问题描述
遇到一个奇怪的问题。初始化任何命令后,当用户添加反应时,我无法收到消息。 DebugMode 没有显示任何异常,程序继续运行,但代码只是在获取消息的行处停止。奇怪的是,重新启动程序后,如果命令没有初始化,我可以从通道中获取消息。
在这个 GIF 中,我预先初始化了命令“hi”。
命令代码:
public class Module : ModuleBase<SocketCommandContext>
{
[Command("hi")]
public async Task Hi()
{
string hi = "Hi";
}
}
OnReaction 代码:
private async Task OnReactionAdded(Cacheable<IUserMessage,ulong> arg1,ISocketMessageChannel arg2,SocketReaction arg3)
{
IEnumerable<IMessage> messages = await arg2.GetMessagesAsync(2).FlattenAsync();
var message = (RestUserMessage)await arg2.GetMessageAsync(messages.First().Id); //Just stops the execution of the code after use any command
}
解决方法
问题是 arg2
只接受 SocketUserMessage
,我尝试通过 RestUserMessage
来完成。尽管目前还不清楚为什么可以通过 RestUserMessage
检索机器人启动之前存在的消息,而机器人发送的新消息只能由 SocketUserMessage
读取。
我的代码:
private async Task OnReactionAdded(Cacheable<IUserMessage,ulong> arg1,ISocketMessageChannel arg2,SocketReaction arg3)
{
IEnumerable<IMessage> messages = await arg2.GetMessagesAsync(2).FlattenAsync();
var message = (SocketUserMessage)await arg2.GetMessageAsync(messages.First().Id);
}