如何让Discord机器人监听自身(CurrentUser)被提及的消息?
Discord.Net 3.8.1 捕获机器人被提及的消息解决方案
你猜的没错,MentionedUsers里的SocketGuildUser和client.CurrentUser的SocketUser是不同的对象实例,直接用Contains会因为引用不匹配返回false。不用手动遍历,有两种更直接的解决办法:
方法1:通过用户ID比对
所有Discord用户的ID是唯一标识,直接比对ID就能准确判断是否被提及:if (message.MentionedUsers.Any(u => u.Id == client.CurrentUser.Id)) { // 处理被提及的逻辑 }方法2:使用
IsMentioning内置方法(更推荐)
Discord.Net的SocketMessage自带IsMentioning方法,已经处理了类型差异问题,用法更简洁:if (message.IsMentioning(client.CurrentUser, AllowedMentionTypes.Users)) { // 处理被提及的逻辑 }
完整的消息处理示例:
private async Task OnMessageReceived(SocketMessage message) { // 跳过机器人自身发送的消息 if (message.Author.IsBot) return; if (message.IsMentioning(client.CurrentUser, AllowedMentionTypes.Users)) { await message.Channel.SendMessageAsync("我看到你@我啦!"); } }
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

