Ein Discord-Bot-Einladungslink ist nur eine OAuth2-Autorisierungs-URL: Der scope-Parameter legt fest, welche Art von Zugriff angefragt wird (ein Bot-Konto, Slash-Befehle oder beides), und die permissions-Zahl legt fest, was dieses Bot-Konto nach dem Beitritt tun darf. Ein Server-Admin muss das Ganze bestätigen, bevor davon etwas wirksam wird. Diese beiden Parameter zu verstehen ist der Unterschied zwischen einem sicheren Einladungslink und einem Link, den du kopierst, ohne ihn ganz nachvollziehen zu können.
Aufbau eines Einladungslinks
Ein typischer Bot-Einladungslink sieht so aus:
https://discord.com/oauth2/authorize?client_id=123456789&permissions=268446800&scope=bot%20applications.commands
- client_id - die öffentliche ID der Anwendung, bedenkenlos teilbar, sie steckt in jedem Einladungslink dieses Bots.
- scope - welche Art von Zugriff angefragt wird, durch Leerzeichen getrennt (URL-kodiert als
%20). - permissions - eine einzelne Zahl, die alle angefragten Server-Berechtigungen zusammenfasst, aufaddiert.
- guild_id und disable_guild_select (optional) - wählen einen bestimmten Server vor und sperren die Auswahl darauf. Nützlich für einen serverspezifischen Button „Füge mich hier hinzu“.
Der Scope „bot“
Dieser Scope fügt den Bot tatsächlich als Mitglied zum Server hinzu, also den Eintrag in der Mitgliederliste mit dem Bot-Tag daneben. Ohne ihn tritt nichts bei; es gibt kein Bot-Konto, das autorisiert werden könnte.
Der Scope „applications.commands“
Dieser Scope registriert die Slash-, User- und Message-Befehle der Anwendung, damit sie auf diesem Server benutzt werden können. Ein Bot kann technisch auch nur mit dem Scope bot beitreten, aber keiner seiner /commands taucht auf, wenn jemand / eintippt, weil der Server die Registrierung der Befehle nie erlaubt hat.
Warum du fast immer beides willst
Ein nur mit bot eingeladener Bot kann trotzdem Nachrichten senden, auf Buttons unter bereits gesendeten Nachrichten reagieren und auf Dinge antworten, die keinen Slash-Befehl brauchen. Moderne Discord-Nutzer erwarten aber Befehle, und ein Bot, der sie nicht registrieren kann, wirkt kaputt, auch wenn er einwandfrei läuft. Deshalb enthält jeder Einladungslink, den Noxyr erzeugt, und fast jeder seriöse Bot beide Scopes gemeinsam.
Die Berechtigungszahl, entschlüsselt
Jede Discord-Berechtigung – Nachrichten senden, Rollen verwalten, Mitglieder kicken – ist ein einzelnes Bit in einem Bitfeld: ein Flag mit einer Zweierpotenz. Die Zahl im Einladungslink ist die Summe aller gleichzeitig angefragten Flags. Ein Link mit permissions von 8 fragt genau eine Sache an: Administrator, also uneingeschränkten Vollzugriff auf den Server. Ein sauber gebauter Einladungslink summiert stattdessen nur die konkreten Flags, die der Code des Bots tatsächlich nutzt – Kanalverwaltung zum Erstellen von Ticket-Kanälen, Rollenverwaltung für eine Verifizierungsrolle, Moderationsaktionen für die Anti-Raid-Reaktion –, nicht alles, was Discord bietet.
Warum Administrator ein Warnsignal ist und keine Voraussetzung
Die meisten seriösen Bots brauchen es nicht. Wer es anfordert, hat entweder einen echten, seltenen Bedarf für etwas, das fast alle Berechtigungen gleichzeitig berührt, oder – weit häufiger – einen Bot, der schnell gebaut wurde und bei dem permissions mit 8 eingefügt wurde, weil es die einfachste Zahl war. Außerdem ist es der beängstigendste Bildschirm, den Discord einem Server-Besitzer bei der Einrichtung zeigt. Deshalb wird eine Einladung dabei oft direkt abgelehnt, oder der Bot wird später von jemandem entfernt, der die Berechtigungen aufräumt. Du kannst die Berechtigungszahl jedes Einladungslinks mit einem Discord-Berechtigungsrechner dekodieren, bevor du auf Autorisieren klickst, und genau sehen, was angefragt wird.
Wie der Einladungslink von Noxyr aufgebaut ist, als Beispiel
Statt Administrator anzufragen, ist der Einladungslink von Noxyr aus den konkreten Berechtigungen aufgebaut, die seine Funktionen tatsächlich nutzen: Kanal- und Rollenverwaltung für Tickets und Verifizierung, Nachrichten- und Moderationsberechtigungen für Anti-Nuke-Reaktionen, und nichts darüber hinaus. Er enthält immer beide Scopes, bot und applications.commands, damit seine Befehle funktionieren, sobald er beigetreten ist.
Weitere OAuth2-Scopes, die dir begegnen werden
Discord definiert Dutzende OAuth2-Scopes außer bot und applications.commands. Die meisten davon, etwa identify oder guilds.join, gehören zu Anmeldungen im Stil von „Mit Discord anmelden“ für die Web-Authentifizierung und tauchen in einem Standard-Einladungslink gar nicht auf. Wenn ein Link neben bot etwas Unbekanntes anfragt, lohnt es sich zu prüfen, welche Rechte dieser Scope tatsächlich gewährt, bevor du zustimmst. Denn eine Bot-Einladung, die zusätzliche Web-Auth-Scopes braucht, ist außerhalb eines Dienstes, der auch Kontoverknüpfung anbietet, ungewöhnlich.
Den Einladungslink für deinen eigenen Custom Bot erstellen
Sobald du eine Anwendung im Discord Developer Portal angelegt hast, erzeugt der URL-Generator im Tab OAuth2 diesen Link für dich: Aktiviere unter Scopes bot und applications.commands, setze die Häkchen bei den Berechtigungen, die dein Bot braucht, und kopiere das Ergebnis. So musst du weder die URL noch die Berechtigungszahl von Hand zusammenbauen.
Häufige Fragen
Was macht disable_guild_select? Es sperrt die Serverauswahl auf einen vorher gewählten Server, damit ein Einladungslink, der für eine bestimmte Community gedacht ist, nicht versehentlich dazu benutzt werden kann, den Bot woanders hinzuzufügen.
Brauche ich applications.commands, wenn mein Bot nur Buttons nutzt? Nicht zwingend für Buttons unter Nachrichten, die er schon gesendet hat. Du brauchst ihn aber in dem Moment, in dem ein Slash-Befehl im Spiel ist.
Kann das spätere Ändern der Berechtigungszahl nachträglich Zugriff hinzufügen? Nein. Ein Server, der eine Einladung bereits bestätigt hat, behält, was damals gewährt wurde. Das Ändern des Links betrifft nur künftige Einladungen. Bestehende Installationen müssen neu eingeladen und erneut bestätigt werden, um mehr zu bekommen.
Reicht scope=bot allein? Es reicht, damit der Bot beitreten kann, aber seine Slash-Befehle erscheinen nicht ohne applications.commands daneben.
Warum zeigt Discord bei Administrator so eine große Warnung? Weil unbeschränkter Zugriff auf den gesamten Server angefragt wird. Das ist die gefährlichste Berechtigung, die eine Bot-Einladung überhaupt verlangen kann.
Richtest du eine Einladung für deinen eigenen Bot ein? Lies zuerst unseren Leitfaden zum Erstellen einer Discord-Anwendung und dann die Custom-Bot-Dokumentation, wenn du den Code dahinter lieber ganz überspringen willst.