.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
相关产品推荐
相关产品推荐

