我已经编写了以下方法,但它们都不起作用。有人知道为什么以及如何解决它吗?
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 Wiki:
有很多原因可能导致您的事件监听器无法执行,但以下是最常见的问题:
您使用了错误的登录令牌?
如果该令牌用于无法访问所需公会的其他机器人,则事件侦听器代码无法运行。
您的机器人实际上不在行会中吗?
确保您的漫游器在线,并且有权访问您要与之交互的资源。
您从未注册过听众?
在jda.addEventListener(new MyListener())
或JDABuilder
实例上使用JDA
您没有重写正确的方法吗?
使用@Override
并查看它是否失败。您的方法必须使用在ListenerAdapter
中定义的正确名称和参数列表。
您实际上并没有扩展EventListener
或ListenerAdapter
。
您的班级应该使用extends ListenerAdapter
或implements 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();