Funktionen können im Feld Variablen eines Blocks oder direkt im Antworttext mit #{...} aufgerufen werden:

#{discord_add_role(message_from, '1465674567090704592')}

Discord-Server-, Kanal-, Rollen- und Nachrichten-IDs sind lange numerische Werte. Der einfachste Weg, sie zu kopieren, ist die Aktivierung von Einstellungen → Erweitert → Entwicklermodus. Danach erscheint die Option ID kopieren im Kontextmenü jedes Objekts.

Die Bot-Verbindung wird im Artikel Wie erstelle ich einen Chatbot in Discord beschrieben.

Wo erhalte ich die Nachrichten-ID

Die ID der Nachricht, die den Block ausgelöst hat, wird in der Variable discord_message_id gespeichert. Sie müssen sie nicht separat abrufen:

#{discord_delete_message(discord_message_id)}

Wenn Sie Daten benötigen, die nicht in den vordefinierten Variablen verfügbar sind, steht der vollständige Webhook in der Variable discord_webhook zur Verfügung. Diese wird gefüllt, wenn der Variable save_webhook ein Wert zugewiesen wird:

data = discord_webhook["data"]

msg_id = data["id"]

result = discord_reply_to_message(msg_id, "Dies ist eine Antwort auf die Nachricht")

Automatisch erstellte Variablen

Diese Variablen werden für jedes Ereignis automatisch gefüllt und erfordern keine zusätzliche Konfiguration.

Variable Beschreibung Beispiel
guild_id Server-ID 1465674567090704591
discord_event Ereignistyp als einzelnes Wort message
discord_message_id Nachrichten-ID mit dem Präfix mid mid1465674569095319625
message_from ID des Ereignisautors mit dem Präfix uid uid413984787162726410
from_username Discord-Benutzername des Autors 00rei
from_name Anzeigename des Autors im Chat Rus
username Benutzername für Direktnachrichten an den Bot 00rei
is_bot 1, wenn der Ereignisautor ein anderer Bot ist 0
nickname Server-Spitzname; leer, wenn nicht gesetzt Moderator
roles Liste der Rollen-IDs des Autors ["1465674567090704592"]
is_admin 1, wenn der Benutzer Administrator oder Serverbesitzer ist 1
reply_from ID des Autors der Nachricht, auf die geantwortet wird uid493121376652230668
reply_from_username Benutzername des Autors, auf den geantwortet wird _deikin
reply_from_name Anzeigename des Autors, auf den geantwortet wird Rus
reply_to_bot 1, wenn die Antwort an den Bot geht 0
reply_message_id ID der Nachricht, auf die geantwortet wird mid1534837349219958804
reply_text Text der Nachricht, auf die geantwortet wird wer hat heute Dienst?

Die Präfixe uid, cid und mid sind Teil des Werts. Übergeben Sie diese Variablen so, wie sie sind, an Funktionen; Sie müssen die Präfixe nicht entfernen.

from_name vs. from_username

from_name enthält den Namen, der verwendet werden sollte, um den Benutzer im Chat anzusprechen:

  1. Server-Spitzname, falls gesetzt.
  2. Anzeigename des Kontos.
  3. Benutzername.

Dies ist die empfohlene Variable für Begrüßungen, da from_username wie _deikin oder 00rei aussehen kann.

Die reply_*-Variablen werden nur gefüllt, wenn die eingehende Nachricht eine Antwort auf eine andere Nachricht ist. Bei normalen Nachrichten werden alle gelöscht.

Daher unterscheidet die folgende Bedingung zuverlässig eine Antwort von einer normalen Nachricht:

#{reply_from != ''}

Die Variablen nickname, roles und is_admin beziehen sich auf den Autor des aktuellen Ereignisses.

Discord stellt diese Daten nicht für Reaktionsereignisse bereit, daher sollten Administratorprüfungen bei einem Nachrichten- oder Slash-Befehl-Ereignis durchgeführt werden.

Der Text der eingehenden Nachricht wird in der Standardvariable question gespeichert, genau wie in anderen Kanälen.


Ereignisse

Zusätzlich zu normalen Nachrichten werden auch Dienstereignisse an den Trichter gesendet.

Ihr Text wird in der Variable question gespeichert, sodass Sie sie mit normalen Textbedingungen behandeln können.

discord_event Text in question Wann tritt es auf
message Nachrichtentext Ein Mitglied sendet eine Nachricht
message_edit Aktualisierter Nachrichtentext Eine Nachricht wird bearbeitet
interaction /warn @user spam Ein Slash-Befehl wird verwendet oder eine Schaltfläche wird geklickt
reaction_add new_like ❤️ uid413984787162726410 Eine Reaktion wird hinzugefügt
reaction_remove reaction_remove ❤️ uid413984787162726410 Eine Reaktion wird entfernt
message_delete message_delete mid1465674569095319625 Eine Nachricht wird gelöscht
messages_delete_bulk messages_delete_bulk 12 Mehrere Nachrichten werden gelöscht
member_join member_join uid413984787162726410 Ein Mitglied tritt dem Server bei
member_leave member_leave uid413984787162726410 Ein Mitglied verlässt den Server
member_update member_update uid413984787162726410 Der Spitzname oder die Rollen eines Mitglieds ändern sich
member_ban member_ban uid413984787162726410 Ein Mitglied wird gebannt
member_unban member_unban uid413984787162726410 Ein Mitglied wird entbannt

Bei einer benutzerdefinierten Reaktion wird anstelle des Emojis selbst die benutzerdefinierte Emoji-ID verwendet:

new_like beer:1479419477396291696 uid413984787162726410

Einzelheiten finden Sie im Abschnitt Reaktionen.

Wenn ein Block nur für normale Nachrichten von Mitgliedern ausgelöst werden soll, fügen Sie die folgende Bedingung hinzu:

discord_event == 'message'

Dies filtert sofort alle Dienstereignisse heraus.

Die Überprüfung nur des Ereignistextes ist unzuverlässig, da ein Mitglied manuell eine Nachricht wie member_join senden könnte.

Wichtig: member_update wird durch jede Mitgliedsaktualisierung ausgelöst, einschließlich einer vom Bot selbst zugewiesenen Rolle. Ein Block, der auf member_update reagiert und eine Rolle zuweist, kann eine Schleife erzeugen, daher sollten solche Bedingungen immer entsprechend eingeschränkt werden.


Nachrichten

Funktion Beschreibung
discord_send_message(channel_id, text) Senden einer Nachricht an einen beliebigen Kanal
discord_send_dm(user_id, text) Senden einer Direktnachricht an ein Mitglied
discord_reply_to_message(message_id, text) Antworten auf eine Nachricht
discord_edit_message(message_id, text) Bearbeiten einer vom Bot gesendeten Nachricht
discord_delete_message(message_id) Löschen einer Nachricht
discord_bulk_delete_messages(channel_id, message_ids) Gleichzeitiges Löschen mehrerer Nachrichten
discord_get_message(channel_id, message_id) Abrufen einer Nachricht
discord_pin_message(message_id) Anheften einer Nachricht
discord_unpin_message(message_id) Lösen einer Nachricht

Discord-Einschränkungen: Es gibt keine zeitliche Begrenzung für das Bearbeiten oder Löschen eigener Nachrichten. Das Massenlöschen funktioniert nur für Nachrichten, die weniger als 14 Tage alt sind, und Sie können zwischen 2 und 100 Nachrichten auf einmal löschen.


Reaktionen

Funktion Beschreibung
discord_send_reaction(message_id, reaction) Hinzufügen einer Reaktion
discord_delete_reaction(message_id, reaction, user_id) Entfernen einer Reaktion. Wenn user_id weggelassen wird, wird die Reaktion des Bots entfernt

Der Parameter reaction akzeptiert entweder ein normales Emoji wie ❤️ oder die ID eines benutzerdefinierten Server-Emojis.

Wo erhalte ich eine benutzerdefinierte Reaktions-ID

Fügen Sie die gewünschte benutzerdefinierte Reaktion zu einer beliebigen Nachricht im Kanal hinzu.

Im Chat erscheint ein Rückruf wie dieser:

new_like beer:1479419477396291696 uid413984787162726410

Hier:

beer:1479419477396291696

ist die Reaktions-ID.

Sie können sie kopieren und in Reaktionsfunktionen verwenden:

#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}

Normale Emojis erscheinen in Rückrufen so, wie sie sind:

new_like ❤️ uid413984787162726410

wobei uid413984787162726410 die ID des Mitglieds ist, das die Reaktion hinzugefügt hat.


Moderation

Funktion Beschreibung
discord_timeout_member(user_id, seconds) Timeout für ein Mitglied für die angegebene Anzahl von Sekunden, bis zu 28 Tagen
discord_remove_timeout(user_id) Vorzeitiges Entfernen eines Timeouts
discord_kick_member(user_id) Kicken eines Mitglieds vom Server; es kann mit einer Einladung zurückkehren
discord_ban_member(user_id, delete_message_seconds) Bannen eines Mitglieds; das zweite Argument gibt an, wie viele Sekunden des Nachrichtenverlaufs gelöscht werden sollen, bis zu 7 Tagen
discord_unban_member(user_id) Entbannen eines Mitglieds

Discord erlaubt es dem Bot nicht, ein Mitglied zu moderieren, dessen Rolle höher ist als die Rolle des Bots. Der Serverbesitzer kann ebenfalls nicht moderiert werden.


Rollen und Mitglieder

Funktion Beschreibung
discord_add_role(user_id, role_id) Zuweisen einer Rolle
discord_remove_role(user_id, role_id) Entfernen einer Rolle
discord_get_roles() Abrufen der Server-Rollen und ihrer IDs
discord_get_member(user_id) Abrufen von Mitgliedsdaten, einschließlich Spitzname, Rollen und Beitrittsdatum
discord_set_nickname(user_id, nickname) Ändern des Server-Spitznamens eines Mitglieds

Die Rolle des Bots muss höher sein als die Rolle, die er zuweist.

Die Rolle @everyone und Rollen, die von Integrationen verwaltet werden, einschließlich Rollen, die anderen Bots gehören, können nicht zugewiesen werden.


Kanäle und Tickets

Funktion Beschreibung
discord_create_channel(name, type, parent_id, permission_overwrites) Erstellen eines Kanals
discord_delete_channel(channel_id) Löschen eines Kanals
discord_set_channel_permission(channel_id, target_id, allow, deny, type) Erlauben oder Verweigern von Kanalberechtigungen
discord_create_invite(channel_id, max_age, max_uses) Erstellen eines Einladungslinks
discord_get_invites() Abrufen der Einladungslinks des Servers

Für discord_create_channel ist der Standard-type:

Wert Kanaltyp
0 Textkanal
2 Sprachkanal
4 Kategorie

Sie können eine Kategorie-ID in parent_id übergeben, um den Kanal innerhalb dieser Kategorie zu erstellen.

Für discord_set_channel_permission gibt das letzte Argument an, wer die Berechtigungen erhält:

Wert Ziel
1 Mitglied
0 Rolle

Die Parameter allow und deny akzeptieren die folgenden Werte:

Wert Berechtigung
1024 Kanal anzeigen
2048 Nachrichten senden
3072 Kanal anzeigen und Nachrichten senden
65536 Nachrichtenverlauf lesen

Für discord_create_invite wird die Lebensdauer der Einladung in Sekunden angegeben.

Zum Beispiel:

86400

bedeutet 24 Stunden.

Ein Wert von 0 für max_uses bedeutet unbegrenzte Nutzungen.


Slash-Befehle

Funktion Beschreibung
discord_get_commands() Abrufen der auf dem Server registrierten Befehle
discord_set_commands(commands) Ersetzen des gesamten Befehlssatzes

discord_set_commands akzeptiert eine Liste von Befehlen:

#{discord_set_commands('[
  {
    "name": "rules",
    "description": "Serverregeln anzeigen"
  },
  {
    "name": "warn",
    "description": "Eine Verwarnung aussprechen",
    "options": [
      {
        "type": 6,
        "name": "user",
        "description": "Benutzer",
        "required": true
      },
      {
        "type": 3,
        "name": "reason",
        "description": "Grund",
        "required": false
      }
    ]
  }
]')}

Discord-Anforderungen

  • name darf nur Kleinbuchstaben enthalten, keine Leerzeichen, und muss zwischen 1 und 32 Zeichen lang sein.
  • description ist erforderlich und muss zwischen 1 und 100 Zeichen lang sein.
  • Erforderliche Optionen müssen vor optionalen Optionen erscheinen.
  • Das Übergeben einer leeren Liste entfernt alle Bot-Befehle vom Server.

Optionstypen

Typ Beschreibung
3 Zeichenfolge
4 Ganzzahl
5 Boolesch
6 Mitglied
7 Kanal
8 Rolle

Wenn ein Befehl aufgerufen wird, wird er als Zeichenfolge wie:

/warn @user spam

an den Trichter gesendet.

Mit anderen Worten, der Befehlsname und die Optionswerte werden durch Leerzeichen getrennt.

Sie können ihn mit einer normalen Textbedingung behandeln.

Eine separate Funktion für Buttons ist nicht erforderlich. Buttons werden in einem normalen Antwortblock konfiguriert, und ein Button-Klick wird auf die gleiche Weise wie ein Slash-Befehl empfangen: Der Button-Wert erscheint im Text.


Punkte und Bestenliste

Die Discord-Integration enthält ein integriertes Wertschätzungssystem. Punkte werden dem Autor der zitierten Nachricht gutgeschrieben.

Sie können es verwenden, um Stufen, Ränge und Bestenlisten zu erstellen.

Funktion Beschreibung
discord_add_thanks_score(value) Fügt dem Autor der zitierten Nachricht Punkte hinzu
discord_add_thanks_score_for_answer(value) Fügt dem Mitglied, das geantwortet hat, Punkte hinzu
discord_minus_thanks_score(value) Entfernt Punkte
discord_get_score(user_id) Gibt die Punkte eines Mitglieds als Zahl zurück. Ohne Argument wird der Ereignisautor verwendet
discord_get_level(user_id, points_per_level) Ruft die Stufe eines Mitglieds ab. Standardschwelle: 100 Punkte pro Stufe
discord_get_user_info(user_id) Ruft Punkte, Bestenlistenposition und Namen als ein einzelnes Objekt ab
discord_get_top(count, shift, humanize, delimiter) Ruft die Bestenliste ab

Für discord_get_top:

  • count — Anzahl der zurückzugebenden Zeilen;
  • shift — Anzahl der zu überspringenden Zeilen, nützlich für die Paginierung;
  • humanize=true — gibt fertig anzeigbaren Text zurück;
  • delimiter — Trennzeichen zwischen dem Namen des Mitglieds und den Punkten.

Beim Vergleichen von Punkten in einer Blockbedingung verwenden Sie discord_get_score. Diese Funktion gibt eine Zahl zurück, daher funktionieren numerische Vergleiche wie erwartet.


Beispiele

Begrüßen eines neuen Mitglieds per Direktnachricht

Blockbedingung:

member_join

Im Feld Variablen:

discord_send_dm(
    message_from,
    'Hallo, #{from_name}! Schau dir die angepinnten Regeln an.'
)

Löschen einer Nachricht, die ein Stoppwort enthält, und Timeout des Mitglieds für 24 Stunden

Blockbedingung: eine Liste von Stoppwörtern.

Zusatzbedingung:

is_admin != 1

Funktionen:

discord_delete_message(discord_message_id)

discord_timeout_member(message_from, 86400)

Zuweisen einer Rolle für eine Reaktion auf eine bestimmte Nachricht

Blockbedingung:

new_like 🍕

Zusatzbedingung:

contains(discord_message_id, '1534927170965602324')

Funktion:

discord_add_role(
    message_from,
    '1465674567090704592'
)

Erstellen eines privaten Ticketkanals über einen Button

ticket = discord_create_channel(
    'ticket-' + from_username
)

ticket_channel = get(
    get(ticket, 'data'),
    'id'
)

discord_set_channel_permission(
    ticket_channel,
    guild_id,
    None,
    1024,
    0
)

discord_set_channel_permission(
    ticket_channel,
    message_from,
    3072,
    None,
    1
)

discord_send_message(
    ticket_channel,
    'Beschreibe dein Problem in einer einzigen Nachricht.'
)

Die erste Berechtigungszeile blendet den Kanal für alle aus (guild_id repräsentiert hier die @everyone-Rolle).

Die zweite Zeile macht den Kanal für das Mitglied verfügbar, das das Ticket erstellt hat.


Punkte für Danke vergeben und eine Rolle basierend auf der Stufe zuweisen

Blockbedingung:

thanks;thx;thank you

Zusatzbedingung:

reply_from != '' and reply_from != message_from and reply_to_bot != 1

Funktionen:

discord_add_thanks_score(1)

if (discord_get_level(reply_from) >= 1) {
    discord_add_role(
        reply_from,
        '1465674567090704592'
    )
}

Die Bedingung:

reply_from != message_from

verhindert, dass Mitglieder sich selbst Punkte vergeben.

Die Bedingung:

reply_to_bot != 1

verhindert, dass dem Bot Punkte gutgeschrieben werden.


Anzeigen der eigenen Punkte mit einem Befehl

Blockbedingung:

/xp

Im Feld Variablen:

points = discord_get_score()

lvl = discord_get_level()

Antworttext:

#{from_name}, du hast #{points} XP · Stufe #{lvl}

Anzeigen der Bestenliste mit einem Befehl

Blockbedingung:

/top

Antworttext:

🏆 XP-Bestenliste:

#{discord_get_top(10, 0, true, ' — ')}