mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-11-07 17:36:07 +00:00
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
This commit is contained in:
parent
f2816c3fee
commit
03388bf5a1
1 changed files with 38 additions and 15 deletions
|
|
@ -97,10 +97,10 @@ internal class VkLongPoolClient
|
||||||
private WebClient ReceiverWebClient { get; set; }
|
private WebClient ReceiverWebClient { get; set; }
|
||||||
private WebClient SenderWebClient { get; set; }
|
private WebClient SenderWebClient { get; set; }
|
||||||
private string Token { get; set; }
|
private string Token { get; set; }
|
||||||
private string LastTs { get; set; }
|
private int LastTs { get; set; }
|
||||||
private string Server { get; set; }
|
private string Server { get; set; }
|
||||||
private string Key { get; set; }
|
private string Key { get; set; }
|
||||||
private Action<string, string> OnMessageReceivedCallback { get; set; }
|
private Action<string, string, string> OnMessageReceivedCallback { get; set; }
|
||||||
private string BotCommunityId { get; set; }
|
private string BotCommunityId { get; set; }
|
||||||
|
|
||||||
private void Init()
|
private void Init()
|
||||||
|
|
@ -110,39 +110,62 @@ internal class VkLongPoolClient
|
||||||
|
|
||||||
Key = data.Properties["response"].Properties["key"].StringValue;
|
Key = data.Properties["response"].Properties["key"].StringValue;
|
||||||
Server = data.Properties["response"].Properties["server"].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()
|
private void StartLongPoolAsync()
|
||||||
{
|
{
|
||||||
var baseUrl = String.Format("{0}?act=a_check&version=2&wait=25&key={1}&ts=", Server, Key);
|
|
||||||
Task.Factory.StartNew(() =>
|
Task.Factory.StartNew(() =>
|
||||||
{
|
{
|
||||||
while (true)
|
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 data = ReceiverWebClient.DownloadString(baseUrl + LastTs);
|
||||||
var messages = ProcessResponse(data);
|
var messages = ProcessResponse(data);
|
||||||
|
|
||||||
foreach (var message in messages)
|
foreach (var message in messages)
|
||||||
{
|
{
|
||||||
OnMessageReceivedCallback(message.Item1, message.Item2);
|
OnMessageReceivedCallback(message.Item1, message.Item2, message.Item3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<Tuple<string, string>> ProcessResponse(string jsonData)
|
private IEnumerable<Tuple<string, string, string>> ProcessResponse(string jsonData)
|
||||||
{
|
{
|
||||||
var data = Json.ParseJson(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 updates = data.Properties["updates"].DataArray;
|
||||||
var messages = new List<Tuple<string, string>>();
|
var messages = new List<Tuple<string, string, string>>();
|
||||||
foreach (var str in updates)
|
foreach (var str in updates)
|
||||||
{
|
{
|
||||||
if (str.Properties["type"].StringValue != "message_new") continue;
|
if (str.Properties["type"].StringValue != "message_new") continue;
|
||||||
|
|
@ -150,17 +173,17 @@ internal class VkLongPoolClient
|
||||||
var msgData = str.Properties["object"].Properties;
|
var msgData = str.Properties["object"].Properties;
|
||||||
|
|
||||||
var userId = msgData["from_id"].StringValue;
|
var userId = msgData["from_id"].StringValue;
|
||||||
|
var peer_id = msgData["peer_id"].StringValue;
|
||||||
var msgText = msgData["text"].StringValue;
|
var msgText = msgData["text"].StringValue;
|
||||||
|
|
||||||
messages.Add(new Tuple<string, string>(userId, msgText));
|
messages.Add(new Tuple<string, string, string>(userId, peer_id, msgText));
|
||||||
}
|
}
|
||||||
|
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string CallVkMethod(string methodName, string data)
|
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);
|
var jsonResult = SenderWebClient.DownloadString(url);
|
||||||
|
|
||||||
return jsonResult;
|
return jsonResult;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue