Discord Bot Development in Java

Status
Für weitere Antworten geschlossen.

batthomas

Mitglied
28 Apr. 2014
1.364
3.374
1.255
24
dem GommeHD.net Forum
Guten Tag!

Ich begrüsse euch herzlich zu meinem Discord Bot Development Thread in Java. Die nötigen Links sind im untersten Abschnitt verlinkt.

Was ist Discord?
Discord ist ein innovativer all-in-one Text- und Sprachchat. Zudem sind die Server kostenlos, haben einen DDoS Schutz und bieten unbegrenzte Slots. Die Applikationen sind auf allen Platformen kostenlos zu downloaden.

Wie lerne ich Java?
Es gibt viele Bücher und Tutorials im Internet, um Java zu lernen. Ich kann die Bücher "Java ist auch eine Insel" und "Java SE Standard-Bibliothek" sehr empfehlen. Zu diesen Büchern gibt es auch das Openbook im Internet. Von Youtube Tutorials rate ich euch generell ab, da es nur sehr wenige gute Videos gibt.

Wie erstelle ich einen Discord Bot?
Zuerst erstellt man eine Discord Applikation auf der Discord My Apps Seite. Dann befindet man sich auf der Overview Seite der Applikation. Danach wandelt man seine Applikation mit der folgenden Schaltfläche in einen Bot um.
yRJW3L3.png


Wie füge ich den Bot meinem Server hinzu?
Erst einmal braucht man die Client ID des Bots, die man auf der Overview Seite des Bots auffinden kann.
FKs63bC.png

Wenn man seine Client ID hat, kann man mit einem OAuth Link seinen Bot hinzufügen. Anstatt *clientid* schreibt man einfach seine eigene Client ID dort rein und öffnet den Link.
https://discordapp.com/api/oauth2/authorize?client_id=*clientid*&scope=bot

Dann kann man im Dialog auswählen, auf welchem Server der Bot sich befinden sollte. Man kann nur die Server auswählen, bei denen man die nötigen Berechtigungen besitzt.
B3EHrA5.png


Wie programmiere ich einen Bot in Java?
Man hat die Wahl zwischen den beiden APIs JDA und Discord4J. In diesem Beispiel werde ich JDA nutzen, jedoch liegt die Wahl beim Entwickler.
Zuerst geht man wieder auf die Overview Seite und lässt sich den Client Token anzeigen.
3SbaS2k.png

In eurer IDE nach Wahl könnt ihr dann JDA als Library hinzufügen.
In diesem Beispiel zeige ich, wie man ein Bot programmiert, der auf den Command ".test" einfach "Test back" antwortet. Mit Hilfe von JDA#addEventListener kann man seine eigene Events hinzufügen.
Code:
public static void main(String[] args) {
    try {
        JDA jda = new JDABuilder(AccountType.BOT).setToken("Zensiert").buildAsync();
        jda.addEventListener(new MessageReceivedListener());
    } catch (LoginException | IllegalArgumentException | RateLimitedException ex) {
        Logger.getLogger(DiscordBot.class.getName()).log(Level.SEVERE, null, ex);
    }
}
Code:
public class MessageReceivedListener extends ListenerAdapter {

    @Override
    public void onMessageReceived(MessageReceivedEvent event) {
        if (!event.getAuthor().isBot()) {
            String content = event.getMessage().getRawContent();
            if (content.equals(".test")) {
                event.getChannel().sendMessage("Test back").queue();
            }
        }
    }
}
Man könnte den Bot jetzt weiter ausbauen, da es noch viele weitere Events gibt, jedoch ist dieses Tutorial nun zu Ende. Viel Spass beim Entwickeln! =)

Links
Rheinwerk | Java SE Openbook
Discord | My Apps
Github | JDA Events

Mit freundlichen Grüssen
Thomas
 
Discord.Net ist viel besser. Da gibts Module und Commands, die nicht mal registriert werden müssen (reflection ftw), wobei die commands ne simple funktion mit bestimmten argumenten sind und die argumente werden direkt geparst und es ist so viel ordentlicher. Besonders für commands eignet sich Discord.Net viel besser als dieses JDA und anscheinend auch besser als Discord4J.

Vom Aufbau her ist dein Tutorial allerdings deutlich besser als Monkeyyys und meins zusammen.
 
  • Like
Reaktionen: batthomas
Interessant! :) Vielen Dank für den Beitrag.

P.S. Dies ist mein erster Beitrag, in welchem ich nicht negativ oder sarkastisch antworte seit 6 Monaten+
 
  • Like
Reaktionen: batthomas
Reflection ist wenn es nicht notwendig ist schlechtes Design und sowieso extrem langsam.
Wundert mich ehrlich gesagt, da Microsofts Asp.Net das meines Wissens nach auch verwendet. Und schlussendlich wird es nur genutzt, um die Module und die Commands innerhalb der Module zu registrieren und Initialisieren. Die Eventhandlerregistrierung, die in JDA nötig ist, fällt damit einfach weg. Das ist auch deutlich angenehmer, so Quellcode zu schreiben.
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop