Beispiel #1
0
        private async void MessageReceived(object sender, VkLongPollUpdateEventArgs e)
        {
            if (e.Update.Type != "message_new")
            {
                return;
            }

            var obj     = e.Update.Object;
            var id      = (long)obj["user_id"];
            var message = obj.ToObject <Message>();

            if (string.IsNullOrWhiteSpace(message.Body))
            {
                return;
            }

            var           searchRegex = new Regex("([^#]+)#?(\\d+)?");
            var           randomRegex = new Regex("([^#]+)#(?:rnd|random|r)");
            Task <string> getUrl      = null;

            if (randomRegex.Match(message.Body) is var rndMatch && rndMatch.Success)
            {
                var query = rndMatch.Groups[1].Value;
                getUrl = gapi.Random(query);
            }
Beispiel #2
0
        private async void MessageReceived(object sender, VkLongPollUpdateEventArgs e)
        {
            if (e.Update.Type != "message_new")
            {
                return;
            }

            var obj     = e.Update.Object;
            var id      = (long)obj["user_id"];
            var message = obj.ToObject <Message>();

            var ingame  = GamesController.IsInGame(id);
            var isready = ingame && GamesController.IsReady(id);

            if (message.Body.ToLower().Contains("игра") && !ingame)
            {
                GamesController.AddToSearch(id);
                api.Messages.Send(new MessagesSendParams()
                {
                    Message = "Вы добавлены в поиск!", UserId = id
                });
                return;
            }

            if (message.Body.ToLower().Contains("свои") && ingame)
            {
                var field = GamesController.GetField(id);
                await SendField(id, field);

                return;
            }

            if (message.Body.ToLower().Contains("противник") && ingame)
            {
                var field = GamesController.GetHiddenEnemyField(id);
                await SendField(id, field);

                return;
            }

            if (message.Body.ToLower().Contains("сколько") && ingame && !isready)
            {
                var ships = GamesController.GetAvailableShipsCount(id);
                var str   = ships.Aggregate("", (current, ship) => current + $"Вы можете добавить {ship.Value} кораблей размера {ship.Key}\n");
                api.Messages.Send(new MessagesSendParams()
                {
                    Message = str,
                    UserId  = id
                });
                return;
            }
            if (message.Body.ToLower().Contains("кон") && ingame)
            {
                GamesController.EndGame(id);
                return;
            }

            if (ingame && !isready)
            {
                var regex = new Regex("((?:(?:[А,Б,В,Г,Д,Е,Ж,З,И,К][1-9])|(?:[1-9][А,Б,В,Г,Д,Е,Ж,З,И,К]))+)(?:\\s|$)");
                var match = regex.Match(message.Body.ToUpper());
                if (match.Success)
                {
                    while (match.Success)
                    {
                        var str    = match.Groups[1].Value;
                        var points = Enumerable.Range(0, str.Length / 2).Select(i => str.Substring(i * 2, 2));
                        match = match.NextMatch();
                        try
                        {
                            GamesController.SetShip(id, points.Select(p => new Place(p)).ToArray());
                        }
                        catch (ShipNotAvailableException)
                        {
                            api.Messages.Send(new MessagesSendParams()
                            {
                                Message = "Вы больше не можете поставить корабли такого размера",
                                UserId  = id
                            });
                            return;
                        }
                        catch (ArgumentException)
                        {
                            api.Messages.Send(new MessagesSendParams()
                            {
                                Message = "Корабль слишком большой или вы неправильно указали координаты",
                                UserId  = id
                            });
                            return;
                        }
                    }
                    api.Messages.Send(new MessagesSendParams()
                    {
                        Message = "Корабль добавлен",
                        UserId  = id
                    });
                    return;
                }
            }
            if (ingame && isready)
            {
                var regex = new Regex("((?:(?:[А,Б,В,Г,Д,Е,Ж,З,И,К][1-9])|(?:[1-9][А,Б,В,Г,Д,Е,Ж,З,И,К])))");
                var match = regex.Match(message.Body.ToUpper());
                if (match.Success)
                {
                    var str   = match.Groups[1].Value;
                    var place = new Place(str);
                    try
                    {
                        var ret = GamesController.Shoot(id, place);
                        var msg = "";
                        switch (ret)
                        {
                        case 0:
                            msg = "Вы не попали. Ход противника.";
                            break;

                        case 1:
                            msg = "Попадание. Ваш ход.";
                            break;

                        case 2:
                            msg = "Корабль уничтожен. Ваш ход.";
                            break;
                        }
                        api.Messages.Send(new MessagesSendParams()
                        {
                            Message = msg,
                            UserId  = id
                        });
                        return;
                    }
                    catch (PlayerStatusException)
                    {
                        api.Messages.Send(new MessagesSendParams()
                        {
                            Message = "Не ваш ход",
                            UserId  = id
                        });
                        return;
                    }
                    catch (ArgumentException)
                    {
                        api.Messages.Send(new MessagesSendParams()
                        {
                            Message = "Вы уже стреляли сюда",
                            UserId  = id
                        });
                        return;
                    }
                }
            }

            api.Messages.Send(new MessagesSendParams()
            {
                Message = "Не понимаю о чем вы", UserId = id
            });
        }