不和谐.. NET: ConnectAsync方法超时



我只是想让我的不和谐机器人加入我所在的频道。当我调用ConnectAsync时,它工作正常,我的机器人确实加入了通道,但该方法一直挂起并在大约15秒内超时,也断开了机器人与通道的连接。我做了一些研究,但我能找到的是人们说要确保HandleMessage方法是异步的,它是。此外,它内部的其他'await'方法正常工作,例如'SendMessageAsync'。我能做些什么来修复它?OBS:使用ASP。. NET Core 6.

下面是我的代码:

private async Task HandleMessageReceived(SocketMessage message)
{
if (message.Author.Id == _client.CurrentUser.Id)
{
return;
}
else if (message.Content == "!ping")
{
await message.Channel.SendMessageAsync("Pong!");
}
else if (message.Content == "!join" && message.Author is IGuildUser guildUser)
{
// Get the user's voice channel
_voiceChannel = guildUser.VoiceChannel;
// Connect to the voice channel
if (_voiceChannel != null)
{
await message.Channel.SendMessageAsync("I joined the channel.");
var audioClient = await guildUser.VoiceChannel.ConnectAsync();
}
else
{
await message.Channel.SendMessageAsync("You need to be in a voice channel to use this command.");
}
}
}

命令的运行模式必须设置为RunMode.Async,否则连接语音通道会阻塞网关线程。

[Command("name", RunMode = RunMode.Async)]

您可以参考本文档中的示例代码。

如果您已经尝试了,问题仍然存在,请提供一个最小的可重复的例子。

如果你不想使用文本命令框架陈建议。您还可以通过将代码包装在Task.Run:

中来实现异步运行模式。
// Connect to the voice channel
if (_voiceChannel != null)
{
_ = Task.Run(async () =>
{
await message.Channel.SendMessageAsync("I joined the channel.");
var audioClient = await guildUser.VoiceChannel.ConnectAsync();
});
}

但请注意,文本命令被discord弃用(因为经过验证的机器人需要消息内容意图才能使基于文本的命令工作),您应该尽快迁移到斜杠命令。

最新更新