我在Discord.Net中编写了一个机器人,该机器人检查了我的世界服务器上的在线播放器,但是当我调试我的机器人并从Discord向其提供服务器时,出现错误: MessageReceived处理程序阻止了网关任务。大约一分钟后,机器人断开连接: System.Exception:服务器错过了上一个心跳
在Discord.ConnectionManager中。<> c__DisplayClass29_0。
public async Task MessageReceivedAsync(SocketMessage message)
{
if (message.Author.Id == client.CurrentUser.Id)
return;
await message.Channel.SendMessageAsync("Adding server");
while (true)
{
if ((message.Content.StartsWith(@"\serwer ") || message.Content.StartsWith(@"\server ")) && !message.Content.EndsWith(".") && message.Content.Contains("."))
{
var url = message.Content.ToString();
if(url.StartsWith(@"\server "))
{
url = url.Replace(@"\server ", "");
}
else
{
url = url.Replace(@"\serwer ", "");
}
try
{
IMinecraftPinger pinger = new MinecraftPinger(url, 25565);
var status = await pinger.PingAsync();
if (status != null)
{
await client.SetGameAsync(status.Players.Online.ToString() + "/" + status.Players.Max.ToString());
}
}
catch
{
await client.SetGameAsync("Serwer offline :(");
}
await Task.Delay(15000);
}
}
}
答案 0 :(得分:0)
我最近遇到了类似这个问题。
我的不和谐机器人会收到一个命令,在未来的某个时间,我会调用一个独立的函数向不和谐频道发送消息。我的机器人很快就会断开连接并重新连接,但不会完成发送消息。
在 DiscordSocketClient 上调用 await async 函数(如 SendMessageAsync)时会出现此问题。我认为当您不在命令内部工作时调用这样的函数是问题所在。无论如何,从异步客户端函数调用中删除等待修复了断开连接,从而允许我的