【问题标题】:The JDA#getGuilds() method is returning an empty listJDA#getGuilds() 方法返回一个空列表
【发布时间】:2021-07-11 23:31:18
【问题描述】:

所以我正在体验不和谐的 JDA api。我试图获取我的机器人的服务器,但它根本不起作用。

public static void main(String[] args) {
        JDABuilder jdab = JDABuilder.create("token",GatewayIntent.DIRECT_MESSAGES);
        JDA jda = null;
        try { jda = jdab.build();
        } catch (LoginException e) { e.printStackTrace(); }
        assert jda != null;
        System.out.println(jda.getGuilds().size());
        for(Guild g : jda.getGuilds()) {
            System.out.println(g.getName());
        }
   }

但实际上它只显示 0,这意味着 getGuilds() 方法的列表是空的。

任何帮助将不胜感激,并感谢任何回答

【问题讨论】:

    标签: java discord discord-jda


    【解决方案1】:

    JDABuilder#build 的文档指出:

    登录进程在不同的线程中运行,所以虽然这会立即返回,但 JDA 尚未完成加载,因此许多 JDA 方法有机会返回错误信息。例如,JDA.getGuilds() 可能会返回一个空列表,或者 JDA.getUserById(long) 可能会为任意用户 ID 返回 null。

    如果您希望确定 JDA 信息正确,请使用 JDA.awaitReady() 或注册一个 EventListener 来监听 ReadyEvent。

    所以你要做的就是调用awaitReady() 来阻塞主线程,直到JDA 准备好。只有这样,您才能可靠地访问 JDA 缓存。

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      相关资源
      最近更新 更多