我的 Discord 机器人停止执行其命令。

huangapple go评论143阅读模式
英文:

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 the JDABuilder (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.

huangapple
  • 本文由 发表于 2020年10月27日 23:04:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/64557233.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定