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

Discord.NET开发的C#机器人无法读取服务器频道消息内容

解决Discord.NET机器人无法读取服务器频道消息内容的问题

可能的原因及解决步骤

1. 确认特权意图的生效状态

  • 登录Discord开发者门户进入Bot页面:
    • 确保Privileged Gateway Intents下的Message Content Intent开关已开启。
    • 若机器人设置为Public Bot(公开状态),需提交特权意图审核才能生效;测试阶段可暂时关闭Public Bot选项,无需审核即可使用特权意图。

2. 补充代码中缺失的基础网关意图

创建DiscordSocketClient时,除MessageContent外,必须添加Guilds、GuildMessages等基础意图,否则机器人无法正常接收服务器频道的消息内容。示例配置:

var config = new DiscordSocketConfig
{
    GatewayIntents = GatewayIntents.Guilds 
                    | GatewayIntents.GuildMessages 
                    | GatewayIntents.DirectMessages 
                    | GatewayIntents.MessageContent
};
var client = new DiscordSocketClient(config);

注意:GuildMessages是接收服务器频道消息的核心基础意图,缺失它会直接导致机器人无法获取服务器消息内容。

3. 检查机器人在服务器中的权限

确保机器人在目标服务器拥有以下权限:

  • 查看频道:允许机器人看到目标频道
  • 读取消息历史:允许机器人获取频道内的消息内容
    可通过给机器人分配包含这两个权限的角色,或直接在频道权限设置中单独授权。

4. 升级Discord.NET到最新稳定版

旧版本的Discord.NET对Message Content特权意图的支持可能存在bug,建议升级到v3.x及以上的最新稳定版本。

5. 修正代码中的异步调用问题

原代码中调用SendReply时未使用await,会导致异步操作无法正确执行,需添加await确保回复消息发送成功:

public static async Task MessageReceivedAsync(SocketMessage message)
{
    if (message.Author.Id != 1206939510382919700)
    {
        Console.WriteLine($"({DateTime.Now}) {message.Author.Username} ({message.Author.Id}) @ {message.Channel}: {message.Content} ");
        var channel = message.Channel;
        await SendReply(channel, message); // 添加await
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:05:16