我目前正在重写我的 Discord Bot,因为旧的机器人仍在 .Net 4.8 Framework 上运行,因此我无法访问新功能,并且许多地方的代码写得不好。这就是为什么我开始使用当前版本的库 (3.8.1) 在 .Net 6 中重写机器人。
我当前遇到的问题是,在我的命令处理程序中,MessageReceived 事件的内容属性是一个空字符串。整个互联网上都在讨论 Discord 开发者门户中的消息内容网关意图,但我启用了此意图,当我从应用程序启动任何其他机器人时,我遇到了完全相同的问题。
这也不能算是验证,因为机器人只在 4 台服务器上。同样奇怪的是,只要消息中的某处提到了机器人,一切都会正常进行,例如如果我写“ping”,那么模块库中相应的命令不会被执行,因为 SocketMessage 内容为空,但当我写“ping @Botname”时,它会起作用。所以这也不能是由于通道中的读/写权限造成的。在与机器人的 DM 聊天中我没有遇到问题。斜杠命令工作正常,但我不想在斜杠命令上构建整个机器人,因为我计划了很多命令,并且不希望所有命令都出现在命令浏览器中。即使降级到旧版本的库也没有改变任何东西。它的代码与我的旧机器人的代码几乎相同,但我的旧机器人可以正常工作。
如果问题需要部分代码,请告诉我。 在那之前,提前致谢!我希望我从谷歌翻译器那里得到的帮助不是那么明显。
我在开发人员门户中尝试了网关意图激活的所有组合,在客户端配置中测试了 GatewayIntents 枚举器的多种组合,我尝试了其他机器人和其他服务器,甚至尝试了其他不和谐帐户。
这里也有同样的问题。我通过设置网关意图解决了这个问题
public async Task RunBotAsync()
{
var cfg = new DiscordSocketConfig()
{
GatewayIntents = GatewayIntents.MessageContent
};
_client = new DiscordSocketClient(cfg);
}