JDA框架getGuildById()返回null问题求助
解决JDA中getGuildById返回null的问题
核心原因及对应解决步骤:
JDA未完成初始化就调用API
调用build()后,JDA需要时间与Discord网关建立连接、同步服务器数据,此时直接调用getGuildById会因数据未加载完成返回null。
修复方式:在build()后调用awaitReady()等待初始化完成,或监听ReadyEvent在回调中处理命令注册。
修正后的代码示例:import javax.security.auth.login.LoginException; import commands.BotCommands; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.entities.Activity; import net.dv8tion.jda.api.entities.Guild; public class DiscordBot { public static void main(String[] args) throws LoginException, InterruptedException { JDA jda = JDABuilder.createDefault("{myToken}") .setActivity(Activity.watching("you sleep")) .addEventListeners(new BotCommands()) .build() .awaitReady(); // 阻塞至JDA完全初始化完成 Guild targetGuild = jda.getGuildById("{myId}"); if (targetGuild == null) { System.out.println("无法找到目标服务器,请检查以下内容:"); System.out.println("1. 机器人是否已加入该服务器"); System.out.println("2. 服务器ID是否输入正确"); return; } targetGuild.upsertCommand("schedule", "Schedule a time to kick a user from a voice channel").queue(); } }机器人未加入目标服务器
确认机器人已通过邀请链接加入指定测试服务器,邀请时必须勾选applications.commands权限(注册斜杠命令的必要权限),同时确保机器人拥有服务器管理相关权限。服务器ID输入错误
检查{myId}是否为正确的服务器纯数字ID,避免多余空格、符号或拼写错误。权限不足
若机器人已在服务器中但仍无法获取,需重新生成包含applications.commands权限的邀请链接,重新授权机器人。
内容的提问来源于stack exchange,提问作者markosdso
相关产品推荐
相关产品推荐

