From 03388bf5a15315161fba2ad62573cf071ae61f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=BE=D0=BC=D0=B0=20=D0=94=D0=B0=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2?= <35975332+Nekiplay@users.noreply.github.com> Date: Thu, 9 Jul 2020 00:30:08 +0500 Subject: [PATCH] VkMessager bug fix (#1119) * Update VkMessager.cs VK API Auto Update Server Key * Update VkMessager.cs * Update VkMessager.cs * Update VkMessager.cs * Update VkMessager.cs * Update VkMessager.cs * Update VkMessager.cs --- MinecraftClient/config/ChatBots/VkMessager.cs | 53 +++++++++++++------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/MinecraftClient/config/ChatBots/VkMessager.cs b/MinecraftClient/config/ChatBots/VkMessager.cs index 9e801089..9c2502ce 100644 --- a/MinecraftClient/config/ChatBots/VkMessager.cs +++ b/MinecraftClient/config/ChatBots/VkMessager.cs @@ -97,10 +97,10 @@ internal class VkLongPoolClient private WebClient ReceiverWebClient { get; set; } private WebClient SenderWebClient { get; set; } private string Token { get; set; } - private string LastTs { get; set; } + private int LastTs { get; set; } private string Server { get; set; } private string Key { get; set; } - private Action OnMessageReceivedCallback { get; set; } + private Action OnMessageReceivedCallback { get; set; } private string BotCommunityId { get; set; } private void Init() @@ -110,39 +110,62 @@ internal class VkLongPoolClient Key = data.Properties["response"].Properties["key"].StringValue; Server = data.Properties["response"].Properties["server"].StringValue; - LastTs = data.Properties["response"].Properties["ts"].StringValue; + LastTs = Convert.ToInt32(data.Properties["response"].Properties["ts"].StringValue); } - public void SendMessage(string chatId, string text) + public void SendMessage(string chatId, string text, int random_id = 0) { - CallVkMethod("messages.send", "peer_id=" + chatId + "&message=" + text); + if (random_id == 0) + random_id = LastTs; + + CallVkMethod("messages.send", "peer_id=" + chatId + "&random_id=" + random_id + "&message=" + text); } - + + public void SendSticker(string chatId, int sticker_id, int random_id = 0) + { + if (random_id == 0) + random_id = LastTs; + + CallVkMethod("messages.send", "peer_id=" + chatId + "&random_id=" + random_id + "&sticker_id=" + sticker_id); + } + + public void OnlineGroup(bool enable = true) + { + if (enable) + CallVkMethod("groups.enableOnline", "group_id=" + BotCommunityId); + else + CallVkMethod("groups.disableOnline", "group_id=" + BotCommunityId); + } + private void StartLongPoolAsync() { - var baseUrl = String.Format("{0}?act=a_check&version=2&wait=25&key={1}&ts=", Server, Key); Task.Factory.StartNew(() => { while (true) { + var baseUrl = String.Format("{0}?act=a_check&version=2&wait=25&key={1}&ts=", Server, Key); + var data = ReceiverWebClient.DownloadString(baseUrl + LastTs); var messages = ProcessResponse(data); foreach (var message in messages) { - OnMessageReceivedCallback(message.Item1, message.Item2); + OnMessageReceivedCallback(message.Item1, message.Item2, message.Item3); } } }); } - private IEnumerable> ProcessResponse(string jsonData) + private IEnumerable> ProcessResponse(string jsonData) { var data = Json.ParseJson(jsonData); - LastTs = data.Properties["ts"].StringValue; + if (data.Properties.ContainsKey("failed")) // Update Key on Server Error + Init(); + + LastTs = Convert.ToInt32(data.Properties["ts"].StringValue); var updates = data.Properties["updates"].DataArray; - var messages = new List>(); + var messages = new List>(); foreach (var str in updates) { if (str.Properties["type"].StringValue != "message_new") continue; @@ -150,19 +173,19 @@ internal class VkLongPoolClient var msgData = str.Properties["object"].Properties; var userId = msgData["from_id"].StringValue; + var peer_id = msgData["peer_id"].StringValue; var msgText = msgData["text"].StringValue; - messages.Add(new Tuple(userId, msgText)); + messages.Add(new Tuple(userId, peer_id, msgText)); } return messages; } - private string CallVkMethod(string methodName, string data) { - var url = String.Format("https://api.vk.com/method/{0}?v=5.80&access_token={1}&{2}", methodName, Token, data); + var url = String.Format("https://api.vk.com/method/{0}?v=5.120&access_token={1}&{2}", methodName, Token, data); var jsonResult = SenderWebClient.DownloadString(url); return jsonResult; } -} \ No newline at end of file +}