Discord
Überblick
Discord verbindet deinen Minecraft-Server mit deinem Discord-Server. Alles, was an Discord geht, nutzt ein wiederverwendbares Objekt: ein Webhook-Ziel (die URL eines Discord-Kanals, dazu Name und Avatar), das einmal deklariert und von jeder Funktion referenziert wird. Um den Kanal zu wechseln, bearbeitest du einen einzigen Entry.
Die Erweiterung deckt sechs Aufgaben ab: Kontoverknüpfung mit Synchronisierung von Rängen zu Rollen, bidirektionales Chat-Relay, einen Konsolenkanal, um Serverbefehle von Discord aus auszuführen, ein Fehlerberichtssystem im Spiel, Ankündigungen von Shop-Transaktionen und Webhooks, die veröffentlicht werden, wenn sich ein TypeWriter-Fact ändert. Jede Funktion ist ein eigener Entry, du konfigurierst also nur, was du nutzt. Discord ist für den Rest von TypeWriter optional: Ohne Link-Manifest wird kein Discord-Bot gestartet.
Diese Erweiterung hieß bis Version 0.9 Community. Die Entry-Namen haben sich nicht geändert, und vor der Umbenennung erstellte Seiten werden beim ersten Start umgewandelt.
Funktionen
- Webhook-Ziele — ein Entry pro Discord-Kanal (URL, Benutzername, Avatar, dauerhafte Rollen-Pings), von allen Funktionen gemeinsam genutzt.
- Kontoverknüpfung — Spieler führen einen Befehl aus, erhalten einen Code, tippen ihn in einen Discord-Kanal und ihre Konten sind verknüpft; Discord-Rollen folgen ihren Minecraft-Gruppen.
- Chat-Synchronisierung — Minecraft-Chat sowie Beitritts- und Austrittsnachrichten gehen an Discord, und Discord-Nachrichten können zurück ins Spiel gelangen.
- Konsolenkanal — Staff führt Serverbefehle von einem Discord-Kanal aus, mit Befehlsliste, Rollenbeschränkung und Logdatei.
- Fehlerberichte — ein Dialogformular im Spiel, mit Statusverfolgung gespeichert, als Embed oder Forum-Thread an Discord gesendet und über Discord-Slash-Befehle verwaltbar.
- Shop-Ankündigungen — Käufe und Verkäufe werden in den Kanal gepostet, den jeder Shop angibt (erfordert die Shops-Erweiterung).
- Fact-Webhooks — eine Nachricht, wenn sich ein TypeWriter-Fact ändert, pro Spieler, pro Gruppe oder global.
- Automatische Migration — Seiten vor 0.9 mit Inline-Webhooks werden in Webhook-Ziele umgewandelt.
Installation
- Erstelle einen Discord-Webhook im gewünschten Kanal: in Discord Kanal bearbeiten (Channel settings), Integrationen (Integrations), Webhooks, Neuer Webhook (New Webhook), dann kopiere seine URL. Das reicht für Webhooks, Fehlerberichte und einseitigen Chat.
- Für die Kontoverknüpfung, das Chat-Relay von Discord zu Minecraft, den Konsolenkanal und Slash-Befehle benötigst du zusätzlich einen Discord-Bot. Erstelle ihn im Discord Developer Portal, kopiere seinen Token, lade ihn auf deinen Server ein und aktiviere unter Bot den Server Members Intent und den Message Content Intent. Die Erweiterung fordert diese Intents an und kann sich ohne sie nicht verbinden.
- Stelle sicher, dass die Basic-Erweiterung von TypeWriter installiert ist (siehe die TypeWriter-Dokumentation).
- Lege die Discord-JAR in
plugins/Typewriter/extensions/ab und starte den Server neu. Die JAR enthält bereits die für den Bot genutzte JDA-Bibliothek. - Für Shop-Ankündigungen installiere zusätzlich die Shops-Erweiterung.
Fehlerberichte verwenden die Dialogbildschirme von Paper, die Paper 1.21.6 oder neuer benötigen.
Erste Schritte
So verknüpfst du Konten und sendest Fehlerberichte an deinen Staff-Kanal:
- Öffne im TypeWriter-Web-Panel eine Manifest-Seite und füge eine Webhook Definition hinzu. Füge die Kanal-URL in
urlein, optional dazuusernameundavatarUrl. - Füge auf derselben Seite ein Discord Link Storage-Artifact hinzu: Es speichert Verknüpfungen und ausstehende Codes.
- Füge ein Discord Link Manifest hinzu. Setze
storageauf das Artifact undwebhookauf dein Ziel, aktivierebotund füllebotTokenundguildId. SetzeverificationChannelIdauf den Discord-Kanal, in dem Spieler ihren Code eingeben. - Optional: Fülle
roleMappings, um Discord-Rollen nach Minecraft-Gruppe zu vergeben, zum BeispielminecraftGroupvipund die Discord-Rollen-ID indiscordRoleId. - Füge ein Bug Report Sequence Storage-Artifact hinzu, dann ein Bug Report Manifest. Setze
commandName(zum Beispielbugreport),sequenceStorage,serverNameund mindestens einen Eintrag incategories, mit einer Eingabe, derenkeydescriptionist. Setze inwebhookden Wertdestinationauf dein Ziel. - Veröffentliche (Publish). Ein Spieler führt
/discordlinkaus, um einen Code zu erhalten, tippt ihn im Verifizierungskanal ein und ist verknüpft. Mit/bugreportöffnet ein Spieler das Formular.
Um die ID eines Discord-Kanals oder einer Rolle zu erhalten, aktiviere den Entwicklermodus (Developer Mode) in den erweiterten Einstellungen von Discord, klicke dann mit der rechten Maustaste auf den Kanal oder die Rolle und wähle ID kopieren (Copy ID).
So funktioniert es
Das Senden nutzt einen Webhook, ohne Bot. Das Empfangen von Discord benötigt den Bot, der nur im Discord Link Manifest konfiguriert wird. Ohne aktivierten Bot tun das Chat-Relay von Discord zu Minecraft, der Konsolenkanal und die Slash-Befehle für Fehlerberichte nichts.
Ein leeres oder deaktiviertes Ziel ist der normale Weg, nichts zu senden. Ein Verweis auf ein Ziel, das nicht mehr existiert, wird als Destination '…' not found; message dropped protokolliert.
Konfiguration
Die Erweiterung wird im Web-Panel konfiguriert. Verknüpfungsdaten und Fehlerberichte werden in den von dir erstellten Artifact-Entries gespeichert. Darüber hinaus schreibt sie:
| Datei | Inhalt |
|---|---|
logs/discord-console.log | Befehle, die vom Konsolenkanal aus ausgeführt wurden (relativ zum Serverstamm; der Pfad ist ein Feld des Entrys). |
backup/community-webhook-v1/ | Sicherung der Seiten, die von der Migration aus Community umgeschrieben wurden, im Typewriter-Ordner. |
Migration von Community
Vor 0.9 erstellte Seiten speicherten den Webhook in jedem Manifest. Beim ersten Start erstellt die Erweiterung pro eindeutigem Ziel eine Webhook Definition, lässt die Manifeste darauf verweisen und sichert zuvor jede umgeschriebene Seite. Anschließend fordert sie dich auf, einmal /typewriter reload auszuführen.
Befehle
Die folgenden Befehle werden von den Manifest-Entries registriert. Ihre Namen sind Felder dieser Entries; angezeigt sind die Standardwerte.
| Befehl | Beschreibung |
|---|---|
/discordlink | Erzeugt einen Verifizierungscode oder wiederholt den ausstehenden. Nur für Spieler. |
/discordlink unlink | Entfernt die Verknüpfung und die zugeordneten Discord-Rollen. |
/bugreport | Öffnet die Kategorieauswahl und dann das Berichtsformular. |
/bugreport mine | Listet deine eigenen Berichte auf. |
/bugreport list [player] | Listet Berichte auf, optional von einem Spieler. Erfordert die Admin-Berechtigung. |
/bugreport status <reportId> <statusId> | Ändert den Status eines Berichts. Erfordert die Admin-Berechtigung. |
/bugreport delete <reportId> | Löscht einen Bericht. Erfordert die Admin-Berechtigung. |
Ist discordCommands aktiv, registriert das Bug Report Manifest außerdem einen Slash-Befehl auf deinem Discord-Server, benannt wie commandName, mit list, status und delete. Nur Discord-Administratoren oder Mitglieder mit einer Rolle aus discordAdminRoleIds können ihn nutzen.
Das Registrieren dieser Slash-Befehle ersetzt die anderen Slash-Befehle, die dieser Bot auf dem Server hat.
Berechtigungen
Alle Berechtigungen sind Felder der Entries und können geändert werden. Standardwerte:
| Berechtigung | Erlaubt |
|---|---|
discordlink.notify | Eine Nachricht erhalten, wenn ein Spieler ein Konto verknüpft (notifyPermission; leer deaktiviert es). |
bugreport.notify | Eine Nachricht erhalten, wenn ein Bericht eingereicht wird (notifyPermission). |
bugreport.admin | /bugreport list, status und delete verwenden (adminPermission). |
group.<group> | Passt zu einer Rollenzuordnung: Die erste Zuordnung, deren Gruppe zutrifft, ist die Discord-Rolle des Spielers (groupPermissionFormat). |
Entries
9 Einträge, aus dem Quellcode der Erweiterung generiert.
Ereignisse1
- Webhook Fact EventPublish a Discord webhook when a Typewriter fact changes
Befehle2
- Bugreport ManifestConfigure bug report behaviour
- Discord Link ManifestConfigure Discord linking and role synchronization
Artefakte2
- Bugreport Sequence StorageBug report sequence storage
- Discord Link StorageDiscord link storage
Manifeste4
- Chat Sync ManifestConfigure Minecraft to Discord chat synchronization
- Console Channel ManifestConfigure Discord console channel
- Shop Notification ManifestFormat shop transactions announced on Discord
- Webhook DefinitionA reusable Discord webhook destination
Fehlerbehebung
Der Bot verbindet sich nicht. Die Konsole zeigt Failed to connect Discord Bot oder Discord Bot is disabled or token is missing. Prüfe, ob bot mit dem richtigen botToken aktiviert ist und ob die Intents Server Members und Message Content im Developer Portal eingeschaltet sind. Die guildId muss die ID des Servers sein: Ist sie falsch, siehst du guild not found.
/discordlink meldet, die Verknüpfung sei nicht konfiguriert. Auf keiner veröffentlichten Seite gibt es ein Discord Link Manifest. Die Konsole zeigt discord_link_manifest not found; Discord link is disabled.
Der in Discord eingegebene Code wird ignoriert. Spieler müssen nur den Code eingeben, genau codeLength Buchstaben oder Ziffern, in dem Kanal, der in verificationChannelId gesetzt ist. Der Bot reagiert mit einem Haken oder einem Kreuz. Ein abgelaufener Code (codeValidityMinutes) oder ein bereits verknüpftes Discord-Konto wird abgelehnt. Ein bereits verknüpfter Spieler wird ebenfalls abgelehnt, außer autoOverwriteExistingLink ist aktiv.
Der Fehlerbericht-Befehl meldet, es gebe keine Kategorien. categories ist standardmäßig leer. Füge mindestens eine Kategorie hinzu. Ein Bericht wird nur angenommen, wenn seine Eingabe title oder description ausgefüllt ist, und das Formular fügt die Eingabe title selbst hinzu; füge also eine Eingabe mit dem Key description für die Nachricht hinzu.
Fehlerberichte werden von Discord abgelehnt. threadNameTemplate ist für Forumkanäle gedacht. Ist dein Ziel ein normaler Textkanal, leere die Vorlage. Die Konsole zeigt Webhook '…' rejected with HTTP … mit dem Grund.
Konsolenbefehle tun nichts. Der Konsolenkanal benötigt den Bot, und die Kanal-ID in discordChannelId muss übereinstimmen. Ein blockierter Befehl erhält eine Verboten-Reaktion und ein nicht autorisiertes Mitglied ein Kreuz. Standardmäßig ist commandList eine Blacklist mit stop, restart und reload; wechsle zu blacklistIsWhitelist und beschränke allowedRoles für ein sichereres Setup.
Shop-Verkäufe werden nicht angekündigt. Du benötigst ein Shop Notification Manifest (ohne es wird nichts gesendet), und die Shop-Definition muss das Ziel in ihrer notificationWebhookId nennen, mit der ID deines Webhook-Definition-Entrys. Die Shops-Erweiterung muss installiert sein.
Verwandte Erweiterungen
- Shops — seine Shops nennen die Webhook Definition, die ihre Transaktionen ankündigt.