英文:
My Discord-Bot stopped executing its commands
问题
以下是翻译好的内容:
只是今天我才意识到我的机器人在新用户加入后没有做任何操作,尽管他应该像以前一样自动分配角色。经过快速检查,他不再对任何命令作出响应,即使昨天还能正常工作。
我的机器人仍然连接到服务器,而且仍然能够识别主要功能的更改(例如更改在线状态或活动),但是EventListeners
似乎不会做出反应,因此没有命令被执行。
机器人使用Java编码,使用jdk 13,所使用的库是net.dv8tion库JDA-4.2.0-175-withDependencies.jar。
我已经尝试过但没有成功的方法:
- 让机器人重新加入服务器
- 刷新机器人并尝试刷新的Token
- 更新Java
- 分配管理员权限(再次分配)
- 使用
create()
命令代替JDABuilder
(也许我做错了)
另外,我必须指出,其他机器人,比如我们服务器上的Rythm机器人,运行得很正常。
这里有一些可能为您所需的信息的截图(代码片段和Discord示例)
我对编程相对来说是“新手”,所以即使您需要批评所示的某些片段,我也会乐意实现升级或更清晰的代码,但主要优先事项是使这个机器人再次运行起来。希望您能提供帮助!
编辑:代码片段如下
public class Main {
public static JDA jda;
public static String prefix = "rev";
public static String adminPrefix = "toolkit";
public static void main(String[] args) throws LoginException {
jda = new JDABuilder(AccountType.BOT).setToken("my bot token").build();
jda.getPresence().setStatus(OnlineStatus.IDLE);
jda.getPresence().setActivity(Activity.playing("mit nem Butterfly"));
jda.addEventListener(new commands());
jda.addEventListener(new serverJoin());
jda.addEventListener(new adminCommands());
jda.addEventListener(new selfRoles());
jda.addEventListener(new chatlog());
jda.addEventListener(new selfRoleRemove());
}
}
示例类:加入服务器
public class serverJoin extends ListenerAdapter {
public void onGuildMemberJoin(GuildMemberJoinEvent event) {
Guild guild = event.getGuild();
Role role = guild.getRoleById(736342426632847381L);
Member member = event.getMember();
assert role != null;
guild.addRoleToMember(member, role).complete();
String[] messages = {
"[member] hat sich auf diesen Discord verirrt, warmen Empfang bitte!",
"Macht gefälligst Platz für [member]!",
"Willkommen bei Reveries, [member]",
"Hey [member], schönen Aufenthalt!",
"Räumt gefälligst auf, wir wollen keinen schlechten Eindruck gegenüber [member] machen!",
};
Random random = new Random();
int randomNumber = random.nextInt(messages.length);
EmbedBuilder information = new EmbedBuilder();
information.setColor(0x00ffff);
information.setDescription(messages[randomNumber].replace("[member]", member.getAsMention()));
information.setFooter("Willkommen! " + event.getMember().getUser().getName(), event.getMember().getUser().getAvatarUrl());
event.getGuild().getTextChannelById(753546835347374171L).sendMessage(information.build()).queue();
event.getUser().openPrivateChannel().flatMap(privateChannel -> privateChannel.sendMessage("**Willkommen auf dem Revery-Discord!** \n Damit du einen guten Start auf dem Server hast, bitten wir dich, die Regeln zu lesen und eine kurze Vorstellung in den #vorstellrunde-Channel zu schreiben. \n Nachdem du deine Vorstellung geschrieben hast (*welche mind. Name, Alter, Hobbies, Musikrichtung und Lieblingsspiel beeinhaltet*), wird dich zeitnah ein Serverteam-Mitglied freischalten und du kriegst Zugang zu unserem Server. \n Damit ein guter Start gewährleistet ist, bitten wir dich, den Command revhelp in den #bot-commands-Channel zu schreiben. \n \n 🖖🏻🤙🏻 🦊🌟🦋 🪶🍀")).queue();
}
}
英文:
Just today I've realized that my bot didn't do anything after a new user joined, even though he is supposed to automatically assign a role as he did before. After a quick check, he doesn't respond to any commands at all anymore, even though it worked just fine yesterday.
My Bot still connects to the server and changes to the main function still get recognized (as for example changing its online-status oder activity), but the EventListeners
don't seem to react and thus, no commands are executed.
The Bot is coded in Java and uses jdk 13, the library used is the net.dv8tion library JDA-4.2.0-175-withDependencies.jar
Things I have already tried which didn't work:
- Let the bot rejoin
- Refresh the bot and try a refreshed Token
- Update Java
- Assign Administrator-Permissions (again)
- Use the
create()
-command instead of theJDABuilder
(maybe I did it wrong)
Also, I have to point out that other Bots, as for example the Rythm-Bot on our server, run completely fine.
Here are some screenshots that may give the information you need (code snippets & discord example)
https://i.stack.imgur.com/DYS1B.jpg
I am "fairly new" to coding, so even if you have to criticize some snippets shown, I will happily implement upgrades or cleaner code, but the main priority is to get this bot running again. I hope you can help!
Edit: code snippet as text
public class Main {
public static JDA jda;
public static String prefix = "rev";
public static String adminPrefix = "toolkit";
public static void main(String[] args) throws LoginException {
jda = new JDABuilder(AccountType.BOT).setToken("my bot token").build();
jda.getPresence().setStatus(OnlineStatus.IDLE);
jda.getPresence().setActivity(Activity.playing("mit nem Butterfly"));
jda.addEventListener(new commands());
jda.addEventListener(new serverJoin());
jda.addEventListener(new adminCommands());
jda.addEventListener(new selfRoles());
jda.addEventListener(new chatlog());
jda.addEventListener(new selfRoleRemove());
}
}
example class: joining the server
public class serverJoin extends ListenerAdapter {
public void onGuildMemberJoin(GuildMemberJoinEvent event) {
Guild guild = event.getGuild();
Role role = guild.getRoleById(736342426632847381L); //initialisiert die oben eingegebe Rolle
Member member = event.getMember(); //sucht, wer gejoined ist
assert role != null;
guild.addRoleToMember(member, role).complete(); //vergibt die Rolle
String[] nachrichten = {
"[member] hat sich auf diesen Discord verirrt, warmen Empfang bitte!",
"Macht gefälligst Platz für [member]!",
"Willkommen bei Reveries, [member]",
"Hey [member], schönen Aufenthalt!",
"Räumt gefälligst auf, wir wollen keinen schlechten Eindruck gegenüber [member] machen!",
};
Random zufallsZahlMacher = new Random();
int zufallsZahl = zufallsZahlMacher.nextInt(nachrichten.length); //zufällige Textlinie von String[] nachrichten
EmbedBuilder information = new EmbedBuilder();
information.setColor(0x00ffff);
information.setDescription(nachrichten[zufallsZahl].replace("[member]", member.getAsMention()));
information.setFooter("Willkommen! " + event.getMember().getUser().getName(), event.getMember().getUser().getAvatarUrl());
event.getGuild().getTextChannelById(753546835347374171L).sendMessage(information.build()).queue();
event.getUser().openPrivateChannel().flatMap(privateChannel -> privateChannel.sendMessage("**Willkommen auf dem Revery-Discord!** \n Damit du einen guten Start auf dem Server hast, bitten wir dich, die Regeln zu lesen und eine kurze Vorstellung in den #vorstellrunde-Channel zu schreiben. \n Nachdem du deine Vorstellung geschrieben hast (*welche mind. Name, Alter, Hobbies, Musikrichtung und Lieblingsspiel beeinhaltet*), wird dich zeitnah ein Serverteam-Mitglied freischalten und du kriegst Zugang zu unserem Server. \n Damit ein guter Start gewährleistet ist, bitten wir dich, den Command revhelp in den #bot-commands-Channel zu schreiben. \n \n \uD835\uDC16\uD835\uDC22\uD835\uDC2B \uD835\uDC1F\uD835\uDC2B\uD835\uDC1E\uD835\uDC2E\uD835\uDC1E\uD835\uDC27 \uD835\uDC2E\uD835\uDC27\uD835\uDC2C \uD835\uDC1A\uD835\uDC2E\uD835\uDC1F \uD835\uDC1D\uD835\uDC22\uD835\uDC1C\uD835\uDC21!")).queue();
}
}
答案1
得分: 0
JDABuilder 构造函数 new JDABuilder(..)
自六月起已被弃用。您应该改用 JDABuilder.createDefault(token)
。要使用 onGuildMemberJoin
,文档还告诉您需要 GatewayIntent.GUILD_MEMBERS
。请在您的 JDABuilder
上使用 enableIntents
启用此功能。
英文:
The JDABuilder constructor new JDABuilder(..)
has been deprecated since june. You should be using JDABuilder.createDefault(token)
instead. To use onGuildMemberJoin
the documentation also tells you that GatewayIntent.GUILD_MEMBERS
is required. Enable this on your JDABuilder
with enableIntents
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论