Discord – Ein Leitfaden zum Programmieren eines Bots in Java

Discord – Ein Leitfaden zum Programmieren eines Bots in Java

Discord ist nicht nur unter Gamern beliebt, sondern wird immer häufiger auch außerhalb der Gamer-Community genutzt. Es bietet die Möglichkeit, sich mit Freunden zu unterhalten und Nachrichten auszutauschen. Darüber hinaus ermöglicht Discord auch die Erstellung eigener Server für die Kommunikation mit einer eigenen Community. Um die Administration eines Servers zu erleichtern, können Bots verwendet werden. In diesem Artikel zeige ich dir, wie du einen Discord-Bot in Java programmieren kannst.

Die Vorbereitung im Web

Bevor wir mit der programmatischen Umsetzung beginnen können, müssen wir einiges vorbereiten. Zunächst erstellen wir die Applikation auf der Discord-Website. Dort können wir über den Button “Neue Applikation” eine neue Applikation erstellen. Anschließend wandeln wir die Applikation in einen Bot um. Dazu navigieren wir im Einstellungsmenü zur Bot-Option und wandeln die Applikation dort um. Nach der Umwandlung können wir den Token des Bots kopieren und für spätere Schritte speichern. Außerdem sollten wir die Default-Einstellung des Bots von “public” auf “privat” ändern, um ungewollte Zugriffe zu verhindern.

Die Entwicklung des Bots

Bevor wir mit der Implementierung beginnen können, müssen wir ein Maven-Projekt erstellen. In der pom.xml fügen wir die Abhängigkeiten zur Discord-API hinzu. Danach erstellen wir zwei Klassen, BotStartUp.java und AdessoBot.java, und packen sie in das Package de.adesso.discordbot. Außerdem erstellen wir eine module-info.java und tragen darin den Namen unseres Moduls und das Package ein, das wir von der Discord-API nutzen möchten.

Jetzt können wir endlich den Code für unseren Bot schreiben. In der Klasse AdessoBot.java erstellen wir die Methode startBot(), in der wir die Discord-API verwenden, um den Bot zu erzeugen. Wir setzen die Aktivität des Bots auf “Solitäre” und starten den Bot über den ShardManager.

Die komplette Klasse sieht dann wie folgt aus:

package de.adesso.discordbot;

import javax.security.auth.login.LoginException;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder;
import net.dv8tion.jda.api.sharding.ShardManager;

public class AdessoBot {
    public ShardManager startBot() throws LoginException, IllegalArgumentException {
        DefaultShardManagerBuilder builder = DefaultShardManagerBuilder.createDefault("Token");
        builder.setActivity(Activity.playing("Solitäre"));
        return builder.build();
    }
}

Um die Applikation zu starten, benötigen wir in der Klasse BotStartUp.java nur noch eine main()-Methode. Darin erzeugen wir ein AdessoBot-Objekt und rufen die startBot()-Methode auf.

LESEN  Welcher Wäschetrockner passt zu dir?

Die ersten Lebenszeichen des Bots

Um unseren Bot zu testen, benötigen wir einen Server, auf dem wir die Rechte haben, einen Bot hinzuzufügen. Am einfachsten ist es, wenn wir für den Test einen eigenen Server erstellen. Über die Discord-Anwendung können wir das ganz einfach über das Pluszeichen auf der linken Seite erledigen. Anschließend weisen wir unserem programmierten Bot über die folgende URL den Server zu: https://discord.com/oauth2/authorize?client_id=unsereClientId&scope=bot&permissions=8. Die client_id ist die eindeutige Application ID unserer Discord-Applikation, die wir unter “General Information” finden. Die Zahl 8 steht für die Administrator-Berechtigung. Nach dem Aufruf der URL müssen wir nur noch bestätigen, dass der Bot unserem Server beitreten darf. Wenn wir nun die Applikation starten, autorisiert sich unser Bot mit dem zuvor kopierten Token am Discord-System. Wenn alles korrekt eingerichtet ist, können wir sehen, wie unser Bot eine Runde Solitäre spielt.

Der Bot mag auch Integrationstests

Natürlich ist es schön zu sehen, dass unser Bot auf unserem Discord-Server Solitäre spielt. Allerdings sollten wir auch Tests schreiben, um sicherzustellen, dass alles wie erwartet funktioniert. Für den Anfang schreiben wir einen Integrationstest. Dazu nutzen wir das JUnit-Framework und das AssertJ-Framework, um unsere Prüfungen durchzuführen. In unserer Testklasse AdessoBotTest.java überprüfen wir, ob der Bot online ist und Solitäre spielt.

Die vollständige Testklasse sieht wie folgt aus:

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import static org.assertj.core.api.Assertions.*;

import java.util.List;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Activity.ActivityType;
import net.dv8tion.jda.api.entities.Status;
import net.dv8tion.jda.api.sharding.ShardManager;

public class AdessoBotTest {
    @Test
    @DisplayName("AdessoBot ist online und spielt Solitäre")
    void adessoBotIsOnline() throws LoginException, IllegalArgumentException, InterruptedException {
        AdessoBot adessoBot = new AdessoBot();
        ShardManager shardManager = adessoBot.startBot();
        List<JDA> shards = shardManager.getShards();
        assertThat(shards.size()).isEqualTo(1);
        shardManager.getShards().get(0).awaitReady();
        JDA jda = shards.get(0);
        Status status = jda.getStatus();
        Activity activity = jda.getPresence().getActivity();

        assertAll(
            () -> assertThat(status).isEqualTo(Status.CONNECTED),
            () -> assertThat(activity.getType()).isEqualTo(ActivityType.COMPETING),
            () -> assertThat(activity.getName()).isEqualTo("Solitär")
        );
    }
}

Fazit

Mit den beschriebenen Schritten kannst du deinen eigenen Discord-Bot in Java erstellen. Beachte, dass dies nur die Grundlagen sind und es viele weitere Möglichkeiten gibt, deinen Bot zu erweitern und anzupassen. Viel Spaß beim Programmieren!

LESEN  Hartriegel: Die zauberhaftesten Arten & Sorten