【问题标题】:Discord JDA - getMembers() not working, returns 0 anywayDiscord JDA - getMembers() 不起作用,无论如何返回 0
【发布时间】:2021-12-20 01:58:14
【问题描述】:

这就是我的代码的样子:

public void onGuildVoiceJoin(GuildVoiceJoinEvent event) {
 
    String channelId = event.getChannelJoined().getId();
     
    if (channelId.equals("904375329764814870")) {
         
        Member member = event.getMember();
        String memberName = event.getMember().getEffectiveName();
        Category category = event.getGuild().getCategoryById("904364634507706468");
         
        event.getGuild().createVoiceChannel("Coaching " + memberName).setParent(category).complete();
         
        List<VoiceChannel> channelList = event.getGuild().getVoiceChannelsByName("Coaching " + memberName, true);
        VoiceChannel channel = channelList.get(0);
      
        event.getGuild().moveVoiceMember(member, channel).queue();
         
         
        while (true){
                
            event.getGuild().getTextChannelById("904364671467929610").sendMessage(
                 
               "Number of people currently on the channel : " + channel.getMembers().size()
         
            ).queue();
             
            wait(3000);
                     
        }

我的目标是获取当前频道内的人数。

我认为 getMembers() 方法是个好方法,但它不起作用

我使用无限 while 来查看当我加入/离开频道时 channel.getMembers().size() 是否发生变化,但它仍然返回 0。

我该如何解决这个问题?并在频道内获得正确数量的人作为回报。

【问题讨论】:

  • 你为什么在一段时间内发送垃圾邮件是真的?
  • 当您发送这样的垃圾邮件时,您只需创建一个大型邮件队列,由于速率限制,这些邮件将延迟发送。如果该值实际更改,则该更改只会在该队列赶上时才会出现,这可能需要很长时间。相反,也许只使用 println?当您的侦听器继续运行时,getMembers 的缓存也不会更新,因为所有缓存都由在您返回之前无法触发的事件更新。
  • 谢谢@Minn,我暂时使用了 3 秒的延迟,我忘了在这里粘贴。是否可以更新 getMembers 缓存?我的代码的最终目标是在他没有用户时删除频道。关于我如何做到这一点的任何想法?
  • 您是否尝试过将每个成员存储在列表中?然后从列表中获取当前成员?例如:List users = guild.getMemberCount();

标签: java discord discord-jda


【解决方案1】:

我的代码的最终目标是在他没有用户时删除频道

这可以通过检查GuildVoiceUpdateEvent中的成员数来实现:

public void onGuildVoiceUpdate(GuildVoiceUpdateEvent event) {
  if (channel.getName().startsWith("Coaching ")) { // check if name matches the desired name
    if (channel.getMembers().isEmpty()) { // check if channel is empty
      channel.delete().queue(); // delete channel
    }
  } 
}

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 2021-02-28
    • 2020-08-07
    • 2021-06-03
    • 2021-07-04
    • 2020-11-13
    • 2020-10-17
    • 2021-05-26
    • 2020-08-28
    相关资源
    最近更新 更多