0

我正在 Discord.Net 中编写一个机器人来检查我的世界服务器上的在线玩家,但是当我调试我的机器人并将服务器从 Discord 提供给它时​​,我遇到了一个错误:MessageReceived 处理程序正在阻止网关任务。大约一分钟后,机器人断开连接:System.Exception:服务器在 Discord.ConnectionManager.<>c__DisplayClass29_0.<b__0>d.MoveNext()和下一个Disconnecting处错过了最后一次心跳我该如何解决?这是我的代码:

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

1 回答 1

0

我最近有类似的问题。

我的不和谐机器人会收到一个命令,在未来的某个时间,我会调用一个独立的函数向不和谐频道发送消息。我的机器人会在不久之后断开连接并重新连接,但不会完成发送消息。

当您在 DiscordSocketClient 上调用 await 异步函数(如 SendMessageAsync)时,会出现此问题。我认为当您不在命令内部工作时调用这样的函数是问题所在。无论如何,从异步客户端函数调用中删除等待修复了断开连接,从而允许我的

于 2021-03-06T23:31:38.847 回答