【问题标题】:Discord Bot JDA - Want to get the size of all online membersDiscord Bot JDA - 想要获取所有在线成员的大小
【发布时间】:2021-05-05 19:52:14
【问题描述】:

我正在使用 JDA api 为我的服务器编写一个私有 Discord Bot。我的机器人随机切换他的状态,其中一个随机事件是:“在线玩 x”

而且我想知道目前有多少人在线,无论他们是什么角色,但它不起作用。首先它显示 1 现在显示 2,它们就像在线 10-20。 Bot 有自己的 Bot 角色,我将其他所有角色都分配给了他,因为我认为这样可以解决问题,但事实并非如此。

String[] status = new String[] {"Baba Bot", "Bester Bot", "Coolster Bot", "%members online!"};
int next = 5;

public void onSecond() {
    if(next <= 0) {
        Random rnd = new Random();
        int i = rnd.nextInt(status.length);
        
        shardMan.getShards().forEach(jda -> {
            String text = status[i].replaceAll("%members", "" + jda.getUsers().size());
            
            jda.getPresence().setActivity(Activity.playing(text));
        });
        next = 5;
    } else {
        next--;
    }
}

这就是我的代码。除了 jda.getUsers 之外,一切都很完美。我认为这可能是因为它只寻找担任主要角色的人,但我有 1 个可能是它,但现在我不断有 2 个。机器人列在我的 BOT 角色中,他们是其他 2 个机器人,但是用我的机器人 3。所以这也没有多大意义。或者如果它比我没有解决它的解决方案更重要。我在谷歌上搜索了很多关于这个和文档的信息,但找不到解决方案。

如果有人可以帮助我,那就太好了^^

LG 索伦

【问题讨论】:

    标签: java discord bots


    【解决方案1】:

    要获取公会/服务器的在线计数,您可以使用Guild#retrieveMetaData

    例子:

    guild.retrieveMetaData()
      .map(Guild.MetaData::getApproximatePresences)
      .map(count -> Activity.playing(count + " members online"))
      .queue(activity -> jda.getPresence().setActivity(activity));
    

    获取全局计数需要缓存所有在线成员,这需要特权意图 GUILD_PRESENCES。阅读有关意图和成员缓存的更多信息in the wiki

    就个人而言,我不认为这是一个非常有用的指标,因为它需要付出很多努力才能获取无用的信息(例如全球在线会员数)或用户已经看到的信息(在成员列表中)。

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 2021-06-25
      • 2021-02-15
      • 2020-07-31
      • 1970-01-01
      • 2023-01-05
      • 2020-07-28
      相关资源
      最近更新 更多