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

.NET开发Discord Bot:获取用户/机器人活动状态求助

解决.NET Discord Bot无法读取其他机器人状态/活动的问题

以下是针对问题的具体排查和解决步骤:

  • 确认Privileged Gateway Intents的完整配置
    仅在服务器设置里启用Intent不够,必须同时在Discord开发者后台的Bot页面,开启Presence Intent和Server Members Intent这两个特权Intent。同时在代码初始化客户端时,要明确声明启用这些Intent:

    var config = new DiscordSocketConfig
    {
        GatewayIntents = GatewayIntents.Guilds | GatewayIntents.GuildPresences | GatewayIntents.GuildMembers
    };
    var client = new DiscordSocketClient(config);
    

    读取机器人状态和活动的核心依赖是这两个特权Intent,activity.read是用户授权范围,对Bot-to-Bot的状态读取不起核心作用。

  • 重新生成并使用正确的OAuth邀请链接
    确保邀请链接包含bot范围,并且权限参数包含View Channel、Read Message History以及与成员状态相关的权限。生成新的邀请链接后重新邀请Bot到服务器,避免旧链接的权限遗漏。

  • 代码中正确获取目标机器人的状态数据
    不要直接使用全局的User对象,要从目标服务器的成员列表中获取GuildUser实例,再读取其状态和活动:

    // 替换为你的服务器ID和目标机器人ID
    var guild = client.GetGuild(1234567890);
    var targetBot = await guild.GetUserAsync(9876543210);
    
    if (targetBot != null)
    {
        var botStatus = targetBot.Status;
        var botActivities = targetBot.Activities;
        // 处理状态和活动数据
    }
    

    注意:两个Bot必须在同一个服务器内,否则无法获取到目标机器人的状态。

  • 调试时验证加载时机和日志
    确保在服务器加载完成后再获取成员数据,比如在GuildAvailable事件触发后执行查询:

    client.GuildAvailable += async guild =>
    {
        // 在这里获取目标机器人状态
    };
    

    同时启用客户端日志,查看是否有Intent权限相关的警告或错误:

    client.Log += log =>
    {
        Console.WriteLine(log.ToString());
        return Task.CompletedTask;
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:00:15