JDA#getGuilds() 方法返回一个空列表

Posted

技术标签:

【中文标题】JDA#getGuilds() 方法返回一个空列表【英文标题】:The JDA#getGuilds() method is returning an empty list 【发布时间】: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() 方法的列表是空的。

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

【问题讨论】:

【参考方案1】:

JDABuilder#build 的文档指出:

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

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

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

【讨论】:

以上是关于JDA#getGuilds() 方法返回一个空列表的主要内容,如果未能解决你的问题,请参考以下文章

getContactsFromFirebase() 方法返回一个空列表

gridfs "list" 方法返回非空集合的空列表

Hibernate query.list() 方法返回空列表而不是空值

JDA 在通过 id 获取公会时返回 null

JDA 事件获取器返回 null 并让所有成员在一个角色中只返回机器人本身

给立即加入 JDA 的用户 jda 一个角色最好的方法是啥