Discord.Net开发:如何获取服务器用户的游戏活动信息?
解决Discord机器人获取用户游戏状态的问题
首先,你的问题出在Discord.NET版本的API变更以及对Activity类型的错误判断上:
- 新版本Discord.NET中,
user.Game属性已被移除,取而代之的是user.Activities集合(存储用户的所有活动,包括游戏、自定义状态、流媒体等) - 你判断的
CustomStatusGame是自定义状态,并非真正的游戏活动,应该筛选GameActivity类型
以下是修正后的完整代码:
[Command("playing")] [Alias("p")] public async Task GetUsersPlaying() { var guildUsers = Context.Guild.Users; var embedBuilder = new EmbedBuilder { Title = "当前正在玩游戏的成员", Color = Color.Blue }; bool hasPlayingUsers = false; foreach (var user in guildUsers) { // 筛选出用户的游戏活动,同时排除离线用户(可选) var gameActivity = user.Activities.FirstOrDefault(a => a is GameActivity && user.Status != UserStatus.Offline); if (gameActivity != null) { hasPlayingUsers = true; var game = (GameActivity)gameActivity; // 用inline参数让字段左右对齐 embedBuilder.AddField($"成员", user.Mention, true); embedBuilder.AddField($"游戏", game.Name, true); // 添加空字段分隔,优化排版 embedBuilder.AddField("\u200B", "\u200B", false); } } if (!hasPlayingUsers) { embedBuilder.Description = "目前没有成员在玩游戏哦"; } await ReplyAsync(embed: embedBuilder.Build()); }
关键说明:
user.Activities:存储用户的所有活动,需从中筛选GameActivity类型的项GameActivity:代表用户正在游玩的游戏,其Name属性即为游戏名称- 可选过滤
user.Status != UserStatus.Offline:避免显示离线用户的历史游戏记录 - 空状态处理:当无用户玩游戏时添加提示描述,防止发送空Embed
另外需确保:你的Discord.NET是最新稳定版,且机器人在Discord开发者门户的机器人设置中开启了GuildMembersIntent权限,否则可能无法获取完整的用户活动信息。
内容的提问来源于stack exchange,提问作者DefinitivVair0
相关产品推荐
相关产品推荐

