如何在 discord.net 中获取用户、机器人和在线用户数?

Posted

技术标签:

【中文标题】如何在 discord.net 中获取用户、机器人和在线用户数?【英文标题】:How to get users, bots and online users number in discord.net? 【发布时间】:2021-12-24 04:49:57 【问题描述】:

所以我正在制作一个显示服务器统计信息的机器人,但我不希望语​​音通道像现有机器人那样每小时更改 2000 次。我唯一的问题是如何获取机器人、用户和具有特定状态的用户的数量。我试过_discord.Guilds.Count,但它只显示用户+机器人的数量。提前谢谢你^^

【问题讨论】:

我也遇到过这种情况。当我下载公会用户时,我看到的只是我的机器人用户,而不是我登录公会的个人用户。并且套接字客户端 IGuild.DownloadUsersAsync 调用永远不会返回。 【参考方案1】:

最好的方法是遍历所有成员并获取他们的状态。

首先记得在https://discord.com/developers/applications/<your application id here>/bot下的机器人设置中启用SERVER MEMBERS INTENT That button

            IGuild guild = _discord.GetGuild(1234567890); //Put your discord server id
            IGuildUser[] users = guild.GetUsersAsync().Result.ToArray();
            int totalUsers = users.Where(user => user.IsBot == false).Count();
            int online = 0;
            int offline = 0;
            int bots = 0;
            foreach (IGuildUser user in users)
            
                if (user.IsBot) bots++;
                else if (user.Status == UserStatus.Online) online++;
                else if (user.Status == UserStatus.Offline) offline++;
            

如果机器人返回空值,您也可以尝试在 get 方法之间添加一些延迟,例如 await Task.Delay(5000)System.Threading.Thread.Sleep(5000)

【讨论】:

以上是关于如何在 discord.net 中获取用户、机器人和在线用户数?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.NET c# SocketUser 返回 null

Discord.NET 分配角色

如何让我的命令在 Discord.Net 中工作

在机器人发布在 Discord.net 中编写的 Discord 代码后,我正在寻找一种删除 bot 命令的方法

C# Discord.Net“上下文”

Discord C# 用户加入消息