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

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();
    }


默认频道设置

java - JDA。公会成员(member)加入/离开 Activity-LMLPHP

最佳答案

引用JDA Wiki


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


您使用了错误的登录令牌?
如果该令牌用于无法访问所需公会的其他机器人,则事件侦听器代码无法运行。
您的机器人实际上不在行会中吗?
确保您的漫游器在线,并且有权访问您要与之交互的资源。
您从未注册过听众?
jda.addEventListener(new MyListener())JDABuilder实例上使用JDA
您没有重写正确的方法吗?
使用@Override并查看它是否失败。您的方法必须使用在ListenerAdapter中定义的正确名称和参数列表。
您实际上并没有扩展EventListenerListenerAdapter
您的班级应该使用extends ListenerAdapterimplements EventListener
您缺少此事件的必需GatewayIntent
确保您在enableIntents(...)上为JDABuilder以允许接收事件。
该事件还有其他可能无法满足的要求,例如未启用缓存。
请检查事件文档上的要求。


如果以上都不适用,那么您的侦听器代码中可能会出现问题,此时应使用调试器。


为了澄清:

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

例如:

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

09-25 21:44