SlimeCloud / SlimeBot

JDA-Bot um das SlimeCloud Discordteam zu unterstützen
https://discord.gg/slimecloud
GNU Affero General Public License v3.0
6 stars 6 forks source link

discord jda-version

👋 SlimeBall Bot

Diese Repository enthält den Quellcode für den SlimeBall Bot auf dem SlimeCloud Discord Server. Der Bot steht unter ständiger Entwicklung, falls du Interesse daran hast mitzuwirken, lies zunächst bitte aufmerksam die README.md Datei, um dich mit unseren Standards vertraut zu machen. Wenn du Fragen hast oder dich mit anderen Entwicklern austauschen möchtest, kannst du gerne in der #👾│tüftlerecke auf dem SlimeCloud Discord Server vorbeischauen.

Dieses Projekt steht unter der GNU Affero General Public License v3.0 Lizenz!

💻 Hosting

Der SlimeBall Bot benötigt eine Infrastruktur um zu funktionieren. Um alle Features nutzen zu können, benötigst du eine PostgreSQL Datenbank. Es wird vorausgesetzt, dass du eine solche bereits zur Verfügung hast.

Der SlimeBall Bot ist in der Programmiersprache Java geschrieben. Du benötigst zum Ausführen also ein JRE 17!

Zum Starten benötigst du 3 Dateien:

Für jeden Commit wird automatisch eine JAR Datei erstellt. Du kannst diese also hier herunterladen. Beispieldateien für config.json und credentials befinden sich im Ordner run_template. Die config.json Datei kann unverändert bleiben, in credentials musst du dein Discord Bot Token sowie optional einige andere Daten eintragen.

Anschließend kannst du die JAR Datei ausführen und der Bot sollte starten.

🏡 Entwicklungsumgebung

Als Entwicklungsumgebung (IDE) empfehlen wir IntelliJ (Community Version reicht aus). Andere IDE's funktionieren im Normalfall auch, folgende Erklärungen beziehen sich jedoch ausschließlich auf die Verwendung von IntelliJ.

Beginne damit, das Projekt zu erstellen. Nutze dazu File->New->Project from Version Control. Gib dort https://github.com/SlimeCloud/java-SlimeBot.git als URL an. Dadurch wird das Projekt automatisch richtig konfiguriert. Überprüfe zur Sicherheit unter File->Project Structure ob die JDK Version auf 17 Eingestellt ist und ändere die Einstellung gegebenenfalls.

Kopiere anschließend den Ordner run_template nach run. Trage dein Bot Token und andere Daten in run/credentials ein. Zum Ausführen kannst du die Run Configuration Run verwenden, die bereits im Projekt enthalten ist.

🧱 Struktur

Der Code des Bots hat eine klare Struktur. Dafür gibt es 4 Haupt-Packages:

🪞 Style-Guild

🤖 Befehle

Um Discord-Befehl zu erstellen und verwalten verwenden wir Discord Utils. Es folgt eine kurze Erklärung für das Wichtigste, für genauere Informationen kannst du hier nachlesen.

Jeder Befehl hat seine eigene Klasse im Package der entsprechenden Funktion. Die Klasse muss die Annotation @ApplicationCommand haben. Hier wird auch der Name des Befehls angegeben. Wenn ein Nutzer den Befehl ausführt, wird die Methode mit @ApplicationCommandMethod in dieser Klasse ausgeführt. Der Befehl muss zusätzlich in der SlimeBot Klasse registriert werden.

Beispiel:


@ApplicationCommand(name = "test")
public class TestCommand {
    @ApplicationCommandMethod
    public void performCommand(@NotNull SlashCommandInteractionEvent event) {
        event.reply("test").setEphemeral(true).queue();
    }
}
...
manager.registerCommand(TestCommand .class);
...

Um Optionen hinzuzufügen, können einfach Parameter mit der @Option-Annotation zur Methode hinzugefügt. Diese optionen werden automatisch registriert und beim Ausführen mit den Werten gefüllt. Sub-Klassen einer Befehlsklasse werden automatisch als Subcommands registriert, wenn sie ebenfalls die @ApplicationCommand-Annotation haben. Sie müssen dann NICHT separat registriert werden.

🔧 Konfiguration

Für die Konfiguration von Servern gibt es die GuildConfig Klasse. Sie enthält Felder und Kategorien, die mit @ConfigField oder @ConfigCategory annotiert sind. Aus diesen informationen wird automatisch ein config-Befehl erstellt.

Um die Konfiguration eines Servers zu laden, kannst du SlimeBall#loadGuild verwenden. Um Zugriff zur SlimeBot instanz zu bekommen, solltest du sie per Konstruktor übergeben.

🗄️ Datenbank

Für Zugriffe auf die Datenbank verwenden wir Java Utils. Es folgt eine kurze Erklärung für das Wichtigste, für genauere Informationen kannst du hier nachlesen.

Für jede Datenbank-Tabelle gibt es eine Variable in SlimeBot. Diese hat im einfachsten Fall den Typ Table<T>, in den meisten Fällen gibt es jedoch ein Wrapper-Interface für die Tabelle, um spezielle Methoden hinzuzfügen.

Beispiel:


@Getter
@AllArgsConstructor
public class Test {
    @Column(key = true)
    private long guild;

    @Column
    public String text;

    public Test() {
        this(0, null);
    }
}
public interface TestTable extends Table<Test> {
    default void create(@NotNull Guild guild) {
        insert(new Test(guild.getIdLong(), guild.getName()));
    }
}
...
private final TestTable testTable;
...

testTable = (TestTable) database.getTable(TestTable.class, Test.class, Test::new, "test").createTable();