You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDA触发onMessageReceived/onSlashCommand事件时如何获取Guild ID

问题原因

你调用event.getGuild().getId()返回null,不是Guild接口没有实现对应方法,核心原因是你监听的事件本身不属于公会绑定类事件,比如私聊消息事件、全局用户状态变更事件等,这类事件本身没有关联任何Discord服务器(Guild),调用getGuild()自然返回null。

解决方案

  • 第一步:确认你监听的事件为公会相关事件,优先选择前缀带Guild的事件类,比如GuildMessageReceivedEvent、GuildMemberJoinEvent等,不要使用PrivateMessageReceivedEvent这类非公会事件。
  • 第二步:添加公会场景判断,避免空指针异常,示例代码如下:
// 先判断事件是否来自公会
if (event.isFromGuild()) {
    String guildId = event.getGuild().getId();
    // 此处添加将guildId写入JSON的逻辑
}
  • 如果你使用的是旧版本JDA(Java Discord API),可以通过频道关联的方式间接获取Guild ID,适用于消息类事件:
if (event.getChannel() instanceof TextChannel) {
    String guildId = ((TextChannel) event.getChannel()).getGuild().getId();
}

注意事项

非公会触发的事件本身不存在对应的Guild ID,你的数据存储逻辑需要提前做好这类空场景的兼容处理,避免程序崩溃。

内容的提问来源于stack exchange,提问作者user17228175

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:45:05