You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:30:51