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

C#开发Discord Bot无法读取普通消息,仅能响应@提及请求求助

Discord Bot无法读取普通消息内容的排查与修复

问题核心原因

  • 缺失消息内容意图(Message Content Intent):Discord当前要求Bot必须明确开启该权限才能读取非提及类消息的内容,默认状态下仅允许读取@提及、DM等特定场景的消息内容。
  • 未过滤无效消息:代码未排除Bot自身发送的消息或系统消息,这类消息的Content字段为空,导致控制台输出空值。

具体修复步骤

1. 过滤无效消息类型与Bot自身消息

修改MessageReceivedAsync方法,先筛选出有效用户消息,再处理业务逻辑:

public async Task MessageReceivedAsync(SocketMessage message)
{
    // 过滤Bot自身消息和非用户文本消息
    if (!(message is SocketUserMessage userMessage) || message.Author.IsBot)
    {
        return;
    }

    Console.WriteLine("Received message: " + userMessage.Content);

    // 判断普通"hi"消息
    if (userMessage.Content.StartsWith("hi"))
    {
        await message.Channel.SendMessageAsync("I am here, what do you need");
    }
    // 保留原有的@提及判断逻辑
    else if (userMessage.Content.StartsWith("<@1070991931615748157> hi"))
    {
        await message.Channel.SendMessageAsync("I am here, what do you need");
    }
}

2. 在Discord开发者平台开启消息内容权限

  • 登录Discord开发者门户,进入你的Bot应用页面
  • 切换到Bot标签页,找到Privileged Gateway Intents区域
  • 开启Message Content Intent选项并保存设置

3. 初始化客户端时配置网关意图

修改Bot构造函数,添加必要的网关意图配置:

public Bot()
{
    var config = new DiscordSocketConfig
    {
        // 配置必要的网关意图:服务器权限、服务器消息、消息内容
        GatewayIntents = GatewayIntents.Guilds | GatewayIntents.GuildMessages | GatewayIntents.MessageContent
    };
    _client = new DiscordSocketClient(config);
    _client.MessageReceived += MessageReceivedAsync; 
}

验证修复

重新启动Bot后,在测试服务器发送"hi",控制台应正常输出消息内容,Bot也会做出对应响应。

内容的提问来源于stack exchange,提问作者Simplylmk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:20:21