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:
- Server-Spitzname, falls gesetzt.
- Anzeigename des Kontos.
- 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_updatewird durch jede Mitgliedsaktualisierung ausgelöst, einschließlich einer vom Bot selbst zugewiesenen Rolle. Ein Block, der aufmember_updatereagiert 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
-
namedarf nur Kleinbuchstaben enthalten, keine Leerzeichen, und muss zwischen 1 und 32 Zeichen lang sein. -
descriptionist 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, ' — ')}