【问题标题】:JDA. GuildMemberJoin/LeaveEventJDA。公会成员加入/离开事件
【发布时间】:2020-09-27 17:40:18
【问题描述】:

我写了以下方法,但它们都不起作用。有谁知道为什么以及如何解决它?

PS:机器人有管理员权限。

public class GuildMemberJoin extends ListenerAdapter {
    public void onGuildMemberJoin(GuildMemberJoinEvent event) {
        EmbedBuilder join = new EmbedBuilder();

        join.setColor(Color.getHSBColor(227, 74, 64));
        join.setTitle("SERVER UPDATE");
        join.setDescription(event.getMember().getAsMention() + " has now joined The server!");
        event.getGuild().getDefaultChannel().sendMessage(join.build()).queue();
    }
public class GuildMemberLeave extends ListenerAdapter {
    public void onGuildMemberLeave(GuildMemberLeaveEvent event) {
        EmbedBuilder join = new EmbedBuilder();
        TextChannel spamChannel = event.getGuild().getTextChannelById("713429117546135572");

        join.setColor(Color.getHSBColor(227, 74, 64));
        join.setTitle("SERVER UPDATE");
        join.setDescription(event.getMember().getAsMention() + " has now left the server!");
        spamChannel.sendMessage(join.build()).queue();
    }

默认频道设置

【问题讨论】:

  • 您使用的是什么版本的 JDA?
  • 您是否注册了您的适配器?您是否包含@Override 注释?您是否验证了事件是否正在触发(例如,您是否添加了 System.out.println("onGuildMemberJoin event fired")System.out.println("onGuildMemberLeave event fired") )?
  • 我使用的是最新的 JDA 版本。 @Minn
  • @BroIamBro "latest" 不是有效版本,您必须更具体
  • @Cardinal-ReinstateMonica 我现在试试“SOUT”的东西,看看有没有发生什么。我没有使用@Override(如果我必须使用它。你可以告诉我在哪里吗?)。是的,我确实注册了它们^

标签: java bots discord-jda


【解决方案1】:

引用JDA Wiki

您的事件侦听器可能无法执行的原因有很多,但以下是最常见的问题:

  1. 您使用了错误的登录令牌?
    如果令牌用于另一个无权访问所需行会的机器人,则事件侦听器代码无法运行。
  2. 您的机器人实际上不在公会中?
    确保您的机器人在线并且可以访问您尝试与之交互的资源。
  3. 您从未注册过您的听众?
    JDABuilderJDA 实例上使用jda.addEventListener(new MyListener())
  4. 您没有覆盖正确的方法?
    使用@Override 看看是否失败。您的方法必须使用ListenerAdapter 中定义的正确名称和参数列表。
  5. 您实际上并未扩展EventListenerListenerAdapter
    你的班级应该或者使用extends ListenerAdapterimplements EventListener
  6. 您缺少此事件所需的GatewayIntent
    确保您在JDABuilderenableIntents(...) 以允许接收事件。
  7. 该事件还有其他可能无法满足的要求,例如未启用缓存。
    请查看活动文档上的要求。

如果以上都不适用于您,那么您的侦听器代码可能存在问题,此时您应该使用调试器。

澄清:

您可以通过在JDABuilder 上执行builder.enableIntents(GatewayIntent.GUILD_MEMBERS) 来启用GUILD_MEMBERS 意图。

例如:

JDABuilder builder = JDABuilder.createDefault(token);
builder.enableIntents(GatewayIntent.GUILD_MEMBERS);
builder.addEventListeners(myListener);
JDA jda = builder.build();

另见:Gateway Intents and Member Cache Policy

【讨论】:

猜你喜欢
  • 2020-10-03
  • 2020-11-20
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2023-04-09
  • 2021-06-27
  • 2021-01-23
  • 2021-02-18
相关资源
最近更新 更多