DiscordボットをRasberry Piに配置しましたが、問題が発生しました。コマンドを使用しようとすると、初めて動作します。しかし、これを2回目に使用する代わりに、「MessageReceivedハンドラがゲートウェイタスクをブロックしています」というメッセージが表示されます。 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throwでサーバー逃した最後のハートビート ()で[0x0000c]:System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccessで0 (まもなくして、それはその後Async APIコールを2回使用した後、Piのボットがクラッシュする
のSystem.Exception氏は述べていますSystem.Runtime.CompilerServicesにある0 のSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Taskタスク)の[0x0003e]の中の[0x0003e] TaskAwaiter.ValidateEnd(System.Threading.Tasks.Taskタスク):0 、System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1 + ConfiguredTaskAwait [TResult] .GetResult()[0x00000] in:0 Discord.ConnectionManagerで+ <> c__DisplayClass28_0 + < b__0> d.MoveNext()0x0014b]:0
及び切断、一部を再接続しようとしているが、毎回erroring。私はコマンドインタフェースを使用していませんが、私はasync/awaitを使用しています。それは私の通常のコンピュータ上で完璧に動作し、私のパイを壊すだけです。
using Discord;
using Discord.WebSocket;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GlurrrBotDiscord
{
public class Program
{
DiscordSocketClient client;
static void Main(string[] args) => new Program().MainAsync().GetAwaiter().GetResult();
public async Task MainAsync()
{
client = new DiscordSocketClient();
try
{
using(StreamReader sr = new StreamReader("botcode.txt"))
{
string code = sr.ReadLine();
await client.LoginAsync(TokenType.Bot, code);
}
}
catch(Exception e)
{
Console.WriteLine("Code not found");
Console.WriteLine(e.Message);
}
await client.StartAsync();
await client.SetGameAsync("praise");
client.MessageReceived += handleMessage;
await Task.Delay(-1);
}
private async Task handleMessage(SocketMessage msg)
{
Console.WriteLine(msg.Author + " : " + msg.Content);
if(msg.Content.Contains("/leave"))
{
var embed = new EmbedBuilder() {
Title = msg.Author + " has left",
Description = msg.Author + " has left the Discord and would like everyone to know they did. They are very triggered.",
Color = Color.DarkRed,
};
await msg.Channel.SendMessageAsync("", false, embed);
}
}
}
}
完全なコードはServer missed last heartbeat at
は〜あなたが実行しているのいずれかのコマンドは、ゲートウェイを使用し、(それが接続タイムアウトを聞かせするのに十分な長占有し続けることを意味しA MessageReceived handler is blocking the gateway task
の結果であるhttps://github.com/Silthreent/Glurrr-Discord-Bot
関連コードをここに**掲載してください。 [mcve] – MickyD
2つの非同期呼び出しを使用するときはいつでもそうです。 'IF(msg.Content.Contains( "/休暇")) {VAR埋め込み=新しいEmbedBuilder(){ タイトル= msg.Author + "残している"、 説明= msg.Author +" 「Discord」を離れ、誰もが知って欲しいと思っています。 を待つmsg.Channel.SendMessageAsync( ""、false、embed); } '' ' おそらく最も簡単な場所です。 ~~新しいコメントをスタックする。ゴミのように見える~~ – Silthreent
あなたはコメントにコードを入れないので、質問を編集してそこに最小限の完全な検証可能なサンプルを置く必要があります。あなたの質問を更新する前にMickyDがあなたに送ったリンクを読んでください。コメントに載せたコードは一例として受け入れられません。 –