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); }
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 }); }