Discord (Bot API)
Status: bereit für Direktnachrichten und Guild-Textkanäle über das offizielle Discord-Bot-Gateway.Schnellstart (Einsteiger)
- Erstellen Sie einen Discord-Bot und kopieren Sie das Bot-Token.
- Aktivieren Sie in den Discord-App-Einstellungen Message Content Intent (und Server Members Intent, wenn Sie Allowlists oder Namensauflösungen verwenden möchten).
- Setzen Sie das Token für OpenClaw:
- Env:
DISCORD_BOT_TOKEN=... - Oder Konfiguration:
channels.discord.token: "...". - Wenn beide gesetzt sind, hat die Konfiguration Vorrang (Env-Fallback gilt nur für das Standardkonto).
- Env:
- Laden Sie den Bot mit Nachrichtenberechtigungen auf Ihren Server ein (erstellen Sie einen privaten Server, wenn Sie nur Direktnachrichten möchten).
- Starten Sie das Gateway.
- DM-Zugriff ist standardmäßig gekoppelt; genehmigen Sie den Pairing-Code beim ersten Kontakt.
Ziele
- Mit OpenClaw über Discord-DMs oder Guild-Kanäle kommunizieren.
- Direktchats werden in der Hauptsitzung des Agenten zusammengeführt (Standard:
agent:main:main); Guild-Kanäle bleiben alsagent:<agentId>:discord:channel:<channelId>isoliert (Anzeigenamen verwendendiscord:<guildSlug>#<channelSlug>). - Gruppen-DMs werden standardmäßig ignoriert; aktivieren Sie sie über
channels.discord.dm.groupEnabledund beschränken Sie sie optional überchannels.discord.dm.groupChannels. - Deterministisches Routing beibehalten: Antworten gehen immer an den Kanal zurück, auf dem sie eingegangen sind.
Wie es funktioniert
- Erstellen Sie eine Discord-Anwendung → Bot, aktivieren Sie die benötigten Intents (DMs + Guild-Nachrichten + Nachrichteninhalt) und kopieren Sie das Bot-Token.
- Laden Sie den Bot mit den erforderlichen Berechtigungen auf Ihren Server ein, um Nachrichten dort zu lesen/senden, wo Sie ihn verwenden möchten.
- Konfigurieren Sie OpenClaw mit
channels.discord.token(oderDISCORD_BOT_TOKENals Fallback). - Starten Sie das Gateway; es startet den Discord-Kanal automatisch, wenn ein Token verfügbar ist (Konfiguration zuerst, Env-Fallback) und
channels.discord.enablednichtfalseist.- Wenn Sie Env-Variablen bevorzugen, setzen Sie
DISCORD_BOT_TOKEN(ein Konfigurationsblock ist optional).
- Wenn Sie Env-Variablen bevorzugen, setzen Sie
- Direktchats: Verwenden Sie bei der Zustellung
user:<id>(oder eine<@id>-Erwähnung); alle Züge landen in der gemeinsamen Sitzungmain. Reine numerische IDs sind mehrdeutig und werden abgelehnt. - Guild-Kanäle: Verwenden Sie
channel:<channelId>für die Zustellung. Erwähnungen sind standardmäßig erforderlich und können pro Guild oder pro Kanal festgelegt werden. - Direktchats: Standardmäßig sicher über
channels.discord.dm.policy(Standard:"pairing"). Unbekannte Absender erhalten einen Pairing-Code (läuft nach 1 Stunde ab); genehmigen Sie ihn überopenclaw pairing approve discord <code>.- Um das frühere „für alle offen“-Verhalten beizubehalten: setzen Sie
channels.discord.dm.policy="open"undchannels.discord.dm.allowFrom=["*"]. - Für eine harte Allowlist: setzen Sie
channels.discord.dm.policy="allowlist"und listen Sie Absender inchannels.discord.dm.allowFromauf. - Um alle DMs zu ignorieren: setzen Sie
channels.discord.dm.enabled=falseoderchannels.discord.dm.policy="disabled".
- Um das frühere „für alle offen“-Verhalten beizubehalten: setzen Sie
- Gruppen-DMs werden standardmäßig ignoriert; aktivieren Sie sie über
channels.discord.dm.groupEnabledund beschränken Sie sie optional überchannels.discord.dm.groupChannels. - Optionale Guild-Regeln: setzen Sie
channels.discord.guildsnach Guild-ID (bevorzugt) oder Slug, mit Regeln pro Kanal. - Optionale native Befehle:
commands.nativeist standardmäßig"auto"(an für Discord/Telegram, aus für Slack). Überschreiben Sie mitchannels.discord.commands.native: true|false|"auto";falselöscht zuvor registrierte Befehle. Textbefehle werden übercommands.textgesteuert und müssen als eigenständige/...-Nachrichten gesendet werden. Verwenden Siecommands.useAccessGroups: false, um Zugriffskontrollen für Befehle zu umgehen.- Vollständige Befehlsliste + Konfiguration: Slash commands
- Optionaler Guild-Kontextverlauf: setzen Sie
channels.discord.historyLimit(Standard 20, Fallback aufmessages.groupChat.historyLimit), um beim Antworten auf eine Erwähnung die letzten N Guild-Nachrichten als Kontext einzubeziehen. Setzen Sie0, um dies zu deaktivieren. - Reaktionen: Der Agent kann Reaktionen über das Werkzeug
discordauslösen (gesteuert durchchannels.discord.actions.*).- Semantik zum Entfernen von Reaktionen: siehe /tools/reactions.
- Das Werkzeug
discordist nur verfügbar, wenn der aktuelle Kanal Discord ist.
- Native Befehle verwenden isolierte Sitzungsschlüssel (
agent:<agentId>:discord:slash:<userId>) statt der gemeinsamen Sitzungmain.
<@id>-Erwähnungen.
Hinweis: Slugs sind klein geschrieben, Leerzeichen werden durch - ersetzt. Kanalnamen werden ohne das führende # gesluggified.
Hinweis: Guild-Kontextzeilen [from:] enthalten author.tag + id, um ping-fähige Antworten zu erleichtern.
Konfigurationsschreibzugriffe
Standardmäßig darf Discord Konfigurationsupdates schreiben, die durch/config set|unset ausgelöst werden (erfordert commands.config: true).
Deaktivieren mit:
So erstellen Sie Ihren eigenen Bot
Dies ist die Einrichtung im „Discord Developer Portal“ für den Betrieb von OpenClaw in einem Server-(Guild-)Kanal wie#help.
1. Discord-App + Bot-Benutzer erstellen
- Discord Developer Portal → Applications → New Application
- In Ihrer App:
- Bot → Add Bot
- Kopieren Sie das Bot Token (dieses tragen Sie in
DISCORD_BOT_TOKENein)
2) Gateway-Intents aktivieren, die OpenClaw benötigt
Discord blockiert „privilegierte Intents“, sofern sie nicht explizit aktiviert werden. Unter Bot → Privileged Gateway Intents aktivieren Sie:- Message Content Intent (erforderlich, um Nachrichtentext in den meisten Guilds zu lesen; ohne ihn sehen Sie „Used disallowed intents“ oder der Bot verbindet sich, reagiert aber nicht)
- Server Members Intent (empfohlen; erforderlich für einige Mitglieder-/Benutzerabfragen und Allowlist-Abgleiche in Guilds)
setPresence) verwendet Gateway OP3 und erfordert diesen Intent nicht; er ist nur nötig, wenn Sie Präsenz-Updates anderer Guild-Mitglieder empfangen möchten.
3. Einladungs-URL erzeugen (OAuth2 URL Generator)
In Ihrer App: OAuth2 → URL Generator Scopes- ✅
bot - ✅
applications.commands(erforderlich für native Befehle)
- ✅ Kanäle anzeigen
- ✅ Nachrichten senden
- ✅ Nachrichtenverlauf lesen
- ✅ Links einbetten
- ✅ Dateien anhängen
- ✅ Reaktionen hinzufügen (optional, aber empfohlen)
- ✅ Externe Emojis / Sticker verwenden (optional; nur wenn gewünscht)
4. IDs ermitteln (Guild/Benutzer/Kanal)
Discord verwendet überall numerische IDs; die OpenClaw-Konfiguration bevorzugt IDs.- Discord (Desktop/Web) → User Settings → Advanced → Developer Mode aktivieren
- Rechtsklick:
- Servername → Copy Server ID (Guild-ID)
- Kanal (z. B.
#help) → Copy Channel ID - Ihr Benutzer → Copy User ID
5) OpenClaw konfigurieren
Token
Setzen Sie das Bot-Token per Env-Var (auf Servern empfohlen):DISCORD_BOT_TOKEN=...
channels.discord.accounts mit Tokens pro Account und optionalem name. Siehe gateway/configuration für das gemeinsame Muster.
Allowlist + Kanal-Routing
Beispiel „ein Server, nur ich erlaubt, nur #help erlaubt“:requireMention: truebedeutet, dass der Bot nur bei Erwähnung antwortet (empfohlen für geteilte Kanäle).agents.list[].groupChat.mentionPatterns(odermessages.groupChat.mentionPatterns) zählen ebenfalls als Erwähnungen für Guild-Nachrichten.- Multi-Agent-Override: Setzen Sie pro Agent Muster unter
agents.list[].groupChat.mentionPatterns. - Wenn
channelsvorhanden ist, werden alle nicht aufgeführten Kanäle standardmäßig abgelehnt. - Verwenden Sie einen
"*"-Kanal-Eintrag, um Standardwerte für alle Kanäle anzuwenden; explizite Kanal-Einträge überschreiben den Platzhalter. - Threads erben die Konfiguration des Elternkanals (Allowlist,
requireMention, Skills, Prompts usw.), sofern Sie die Thread-Kanal-ID nicht explizit hinzufügen. es sei denn, Sie fügen die Thread-Kanal-ID explizit hinzu. - Owner-Hinweis: Wenn eine Allowlist
userspro Guild oder pro Kanal auf den Absender zutrifft, behandelt OpenClaw diesen Absender im System-Prompt als Owner. Für einen globalen Owner über alle Kanäle hinweg setzen Siecommands.ownerAllowFrom. - Vom Bot verfasste Nachrichten werden standardmäßig ignoriert; setzen Sie
channels.discord.allowBots=true, um sie zuzulassen (eigene Nachrichten bleiben gefiltert). - Warnung: Wenn Sie Antworten an andere Bots erlauben (
channels.discord.allowBots=true), verhindern Sie Bot-zu-Bot-Schleifen mitrequireMention,channels.discord.guilds.*.channels.<id>.users-Allowlists und/oder klaren Schutzmechanismen inAGENTS.mdundSOUL.md.
6. Funktion prüfen
- Starten Sie das Gateway.
- Senden Sie im Serverkanal:
@Krill hello(oder wie auch immer Ihr Bot heißt). - Wenn nichts passiert: prüfen Sie Fehlerbehebung unten.
Fehlerbehebung
- Zuerst: führen Sie
openclaw doctorundopenclaw channels status --probeaus (umsetzbare Warnungen + Kurzprüfungen). - „Used disallowed intents“: Aktivieren Sie Message Content Intent (und vermutlich Server Members Intent) im Developer Portal und starten Sie das Gateway neu.
- Bot verbindet sich, antwortet aber nie in einem Guild-Kanal:
- Fehlender Message Content Intent, oder
- Dem Bot fehlen Kanalberechtigungen (Anzeigen/Senden/Verlauf lesen), oder
- Ihre Konfiguration erfordert Erwähnungen und Sie haben ihn nicht erwähnt, oder
- Ihre Guild-/Kanal-Allowlist lehnt Kanal/Benutzer ab.
requireMention: falseaber weiterhin keine Antworten:channels.discord.groupPolicyist standardmäßig allowlist; setzen Sie es auf"open"oder fügen Sie unterchannels.discord.guildseinen Guild-Eintrag hinzu (optional Kanäle unterchannels.discord.guilds.<id>.channelseinschränken).- Wenn Sie nur
DISCORD_BOT_TOKENsetzen und nie einen Abschnittchannels.discorderstellen, setzt die LaufzeitgroupPolicystandardmäßig aufopen. Fügen Siechannels.discord.groupPolicy,channels.defaults.groupPolicyoder eine Guild-/Kanal-Allowlist hinzu, um es abzusichern.
- Wenn Sie nur
requireMentionmuss unterchannels.discord.guilds(oder einem spezifischen Kanal) liegen.channels.discord.requireMentionauf oberster Ebene wird ignoriert.- Berechtigungsprüfungen (
channels status --probe) prüfen nur numerische Kanal-IDs. Wenn Sie Slugs/Namen als Schlüsselchannels.discord.guilds.*.channelsverwenden, kann die Prüfung Berechtigungen nicht verifizieren. - DMs funktionieren nicht:
channels.discord.dm.enabled=false,channels.discord.dm.policy="disabled"oder Sie wurden noch nicht genehmigt (channels.discord.dm.policy="pairing"). - Exec-Genehmigungen in Discord: Discord unterstützt eine Button-UI für Exec-Genehmigungen in DMs (Einmal erlauben / Immer erlauben / Ablehnen).
/approve <id> ...gilt nur für weitergeleitete Genehmigungen und löst die Discord-Buttons nicht. Wenn Sie❌ Failed to submit approval: Error: unknown approval idsehen oder die UI nie erscheint, prüfen Sie:channels.discord.execApprovals.enabled: truein Ihrer Konfiguration.- Ihre Discord-Benutzer-ID ist in
channels.discord.execApprovals.approversaufgeführt (die UI wird nur an Genehmiger gesendet). - Verwenden Sie die Buttons in der DM-Aufforderung (Einmal erlauben, Immer erlauben, Ablehnen).
- Siehe Exec approvals und Slash commands für den übergreifenden Genehmigungs- und Befehlsfluss.
Funktionen & Grenzen
- DMs und Guild-Textkanäle (Threads werden als separate Kanäle behandelt; Sprache nicht unterstützt).
- Tippindikatoren werden nach bestem Effort gesendet; Nachrichten-Splitting nutzt
channels.discord.textChunkLimit(Standard 2000) und teilt lange Antworten nach Zeilenanzahl (channels.discord.maxLinesPerMessage, Standard 17). - Optionales Absatz-Splitting: setzen Sie
channels.discord.chunkMode="newline", um vor dem Längen-Splitting an Leerzeilen (Absatzgrenzen) zu trennen. - Datei-Uploads bis zur konfigurierten Größe
channels.discord.mediaMaxMb(Standard 8 MB). - Erwähnungsbasierte Guild-Antworten standardmäßig aktiviert, um laute Bots zu vermeiden.
- Antwortkontext wird eingefügt, wenn eine Nachricht auf eine andere verweist (zitierter Inhalt + IDs).
- Native Antwort-Threading ist standardmäßig aus; aktivieren Sie es mit
channels.discord.replyToModeund Antwort-Tags.
Retry-Richtlinie
Ausgehende Discord-API-Aufrufe werden bei Rate Limits (429) unter Verwendung von Discordretry_after (sofern verfügbar) mit exponentiellem Backoff und Jitter wiederholt. Konfigurieren Sie dies über channels.discord.retry. Siehe Retry policy.
Konfiguration
messages.ackReaction +
messages.ackReactionScope gesteuert. Verwenden Sie messages.removeAckAfterReply, um die
Ack-Reaktion nach der Antwort des Bots zu entfernen.
dm.enabled: setzen Siefalse, um alle DMs zu ignorieren (Standardtrue).dm.policy: DM-Zugriffskontrolle (pairingempfohlen)."open"erfordertdm.allowFrom=["*"].dm.allowFrom: DM-Allowlist (Benutzer-IDs oder Namen). Verwendet vondm.policy="allowlist"und fürdm.policy="open"-Validierung. Der Assistent akzeptiert Benutzernamen und löst sie zu IDs auf, wenn der Bot Mitglieder suchen kann.dm.groupEnabled: Gruppen-DMs aktivieren (Standardfalse).dm.groupChannels: optionale Allowlist für Gruppen-DM-Kanal-IDs oder Slugs.groupPolicy: steuert die Behandlung von Guild-Kanälen (open|disabled|allowlist);allowlisterfordert Kanal-Allowlists.guilds: Regeln pro Guild, nach Guild-ID (bevorzugt) oder Slug.guilds."*": Standard-Guild-Einstellungen, wenn kein expliziter Eintrag existiert.guilds.<id>.slug: optionaler freundlicher Slug für Anzeigenamen.guilds.<id>.users: optionale Benutzer-Allowlist pro Guild (IDs oder Namen).guilds.<id>.tools: optionale Tool-Policy-Overrides pro Guild (allow/deny/alsoAllow), wenn der Kanal-Override fehlt.guilds.<id>.toolsBySender: optionale Tool-Policy-Overrides pro Absender auf Guild-Ebene (gilt, wenn der Kanal-Override fehlt; Platzhalter"*"unterstützt).guilds.<id>.channels.<channel>.allow: Kanal zulassen/ablehnen, wenngroupPolicy="allowlist".guilds.<id>.channels.<channel>.requireMention: Erwähnungs-Gating für den Kanal.guilds.<id>.channels.<channel>.tools: optionale Tool-Policy-Overrides pro Kanal (allow/deny/alsoAllow).guilds.<id>.channels.<channel>.toolsBySender: optionale Tool-Policy-Overrides pro Absender innerhalb des Kanals (Platzhalter"*"unterstützt).guilds.<id>.channels.<channel>.users: optionale Benutzer-Allowlist pro Kanal.guilds.<id>.channels.<channel>.skills: Skill-Filter (weglassen = alle Skills, leer = keine).guilds.<id>.channels.<channel>.systemPrompt: zusätzlicher System-Prompt für den Kanal. Discord-Kanalthemen werden als nicht vertrauenswürdiger Kontext injiziert (nicht als System-Prompt).guilds.<id>.channels.<channel>.enabled: setzen Siefalse, um den Kanal zu deaktivieren.guilds.<id>.channels: Kanalregeln (Schlüssel sind Kanal-Slugs oder -IDs).guilds.<id>.requireMention: Erwähnungspflicht pro Guild (pro Kanal überschreibbar).guilds.<id>.reactionNotifications: Reaktions-Systemereignismodus (off,own,all,allowlist).textChunkLimit: Größe der ausgehenden Text-Chunks (Zeichen). Standard: 2000.chunkMode:length(Standard) teilt nur bei Überschreitung vontextChunkLimit;newlineteilt an Leerzeilen (Absatzgrenzen) vor dem Längen-Splitting.maxLinesPerMessage: weiches Maximum der Zeilenanzahl pro Nachricht. Standard: 17.mediaMaxMb: Begrenzung eingehender Medien, die auf Datenträger gespeichert werden.historyLimit: Anzahl der jüngsten Guild-Nachrichten, die beim Antworten auf eine Erwähnung als Kontext einbezogen werden (Standard 20; Fallback aufmessages.groupChat.historyLimit;0deaktiviert).dmHistoryLimit: DM-Verlaufslimit in Benutzerzügen. Pro-Benutzer-Overrides:dms["<user_id>"].historyLimit.retry: Retry-Richtlinie für ausgehende Discord-API-Aufrufe (Versuche, minDelayMs, maxDelayMs, Jitter).pluralkit: PluralKit-proxied Nachrichten auflösen, sodass Systemmitglieder als separate Absender erscheinen.actions: Tool-Gates pro Aktion; weglassen = alles erlauben (setzen Siefalse, um zu deaktivieren).reactions(deckt Reaktionen + Reaktionen lesen ab)stickers,emojiUploads,stickerUploads,polls,permissions,messages,threads,pins,searchmemberInfo,roleInfo,channelInfo,voiceStatus,eventschannels(Kanäle + Kategorien + Berechtigungen erstellen/bearbeiten/löschen)roles(Rollen hinzufügen/entfernen, Standardfalse)moderation(Timeout/Kick/Ban, Standardfalse)presence(Bot-Status/Aktivität, Standardfalse)
execApprovals: Discord-spezifische Exec-Genehmigungs-DMs (Button-UI). Unterstütztenabled,approvers,agentFilter,sessionFilter.
guilds.<id>.reactionNotifications:
off: keine Reaktionsereignisse.own: Reaktionen auf eigene Bot-Nachrichten (Standard).all: alle Reaktionen auf allen Nachrichten.allowlist: Reaktionen vonguilds.<id>.usersauf allen Nachrichten (leere Liste deaktiviert).
PluralKit (PK)-Unterstützung
Aktivieren Sie PK-Lookups, damit proxied Nachrichten dem zugrunde liegenden System + Mitglied zugeordnet werden. Wenn aktiviert, verwendet OpenClaw die Mitgliederidentität für Allowlists und kennzeichnet den Absender alsMember (PK:System), um unbeabsichtigte Discord-Pings zu vermeiden.
- Verwenden Sie
pk:<memberId>indm.allowFrom,guilds.<id>.usersoder pro Kanalusers. - Anzeigenamen von Mitgliedern werden ebenfalls nach Name/Slug abgeglichen.
- Lookups verwenden die ursprüngliche Discord-Nachrichten-ID (die vor dem Proxy), sodass die PK-API sie nur innerhalb ihres 30‑Minuten-Fensters auflöst.
- Wenn PK-Lookups fehlschlagen (z. B. privates System ohne Token), werden proxied Nachrichten
als Bot-Nachrichten behandelt und verworfen, sofern nicht
channels.discord.allowBots=truegesetzt ist.
Standardwerte für Tool-Aktionen
| Aktionsgruppe | Standard | Hinweise |
|---|---|---|
| reactions | aktiviert | Reagieren + Reaktionen auflisten + emojiList |
| stickers | aktiviert | Sticker senden |
| emojiUploads | aktiviert | Emojis hochladen |
| stickerUploads | aktiviert | Sticker hochladen |
| polls | aktiviert | Umfragen erstellen |
| permissions | aktiviert | Kanal-Berechtigungssnapshot |
| messages | aktiviert | Lesen/senden/bearbeiten/löschen |
| threads | aktiviert | Erstellen/auflisten/antworten |
| pins | aktiviert | Anpinnen/abpinnen/auflisten |
| search | aktiviert | Nachrichtensuche (Vorschaufunktion) |
| memberInfo | aktiviert | Mitgliederinformationen |
| roleInfo | aktiviert | Rollenliste |
| channelInfo | aktiviert | Kanalinfo + Liste |
| channels | aktiviert | Kanal-/Kategorieverwaltung |
| voiceStatus | aktiviert | Voice-Statusabfrage |
| events | aktiviert | Geplante Events auflisten/erstellen |
| Rollen | deaktiviert | Rollen hinzufügen/entfernen |
| Moderation | deaktiviert | Timeout/Kick/Ban |
| Präsenz | deaktiviert | Bot-Status/Aktivität (setPresence) |
replyToMode:off(Standard),firstoderall. Gilt nur, wenn das Modell ein Antwort-Tag enthält.
Antwort-Tags
Um eine Thread-Antwort anzufordern, kann das Modell ein Tag in seiner Ausgabe enthalten:[[reply_to_current]]— Antwort auf die auslösende Discord-Nachricht.[[reply_to:<id>]]— Antwort auf eine bestimmte Nachrichten-ID aus Kontext/Verlauf. Aktuelle Nachrichten-IDs werden den Prompts als[message_id: …]angehängt; Verlaufseinträge enthalten bereits IDs.
channels.discord.replyToMode gesteuert:
off: Tags ignorieren.first: Nur der erste ausgehende Chunk/Anhang ist eine Antwort.all: Jeder ausgehende Chunk/Anhang ist eine Antwort.
allowFrom/users/groupChannelsakzeptieren IDs, Namen, Tags oder Erwähnungen wie<@id>.- Präfixe wie
discord:/user:(Benutzer) undchannel:(Gruppen-DMs) werden unterstützt. - Verwenden Sie
*, um jeden Absender/Kanal zu erlauben. - Wenn
guilds.<id>.channelsvorhanden ist, werden nicht aufgeführte Kanäle standardmäßig abgelehnt. - Wenn
guilds.<id>.channelsfehlt, sind alle Kanäle in der allowlisteten Guild erlaubt. - Um keine Kanäle zu erlauben, setzen Sie
channels.discord.groupPolicy: "disabled"(oder lassen Sie die Allowlist leer). - Der Konfigurationsassistent akzeptiert
Guild/Channel-Namen (öffentlich + privat) und löst sie nach Möglichkeit zu IDs auf. - Beim Start löst OpenClaw Kanal-/Benutzernamen in Allowlists zu IDs auf (wenn der Bot Mitglieder suchen kann) und protokolliert die Zuordnung; nicht auflösbare Einträge bleiben unverändert.
- Die registrierten Befehle spiegeln OpenClaws Chat-Befehle wider.
- Native Befehle beachten dieselben Allowlists wie DMs/Guild-Nachrichten (
channels.discord.dm.allowFrom,channels.discord.guilds, Regeln pro Kanal). - Slash-Befehle können in der Discord-UI für nicht allowlistete Benutzer sichtbar sein; OpenClaw erzwingt die Allowlists bei der Ausführung und antwortet mit „not authorized“.
Tool-Aktionen
Der Agent kanndiscord mit Aktionen wie folgenden aufrufen:
react/reactions(Reaktionen hinzufügen oder auflisten)sticker,poll,permissionsreadMessages,sendMessage,editMessage,deleteMessage- Read/Search/Pin-Tool-Payloads enthalten normalisierte
timestampMs(UTC-Epoch-ms) undtimestampUtcneben den rohen Discord-timestamp. threadCreate,threadList,threadReplypinMessage,unpinMessage,listPinssearchMessages,memberInfo,roleInfo,roleAdd,roleRemove,emojiListchannelInfo,channelList,voiceStatus,eventList,eventCreatetimeout,kick,bansetPresence(Bot-Aktivität und Online-Status)
[discord message id: …] und Verlaufzeilen) bereitgestellt, sodass der Agent sie gezielt ansprechen kann.
Emojis können Unicode sein (z. B. ✅) oder benutzerdefinierte Emoji-Syntax wie <:party_blob:1234567890>.
Sicherheit & Betrieb
- Behandeln Sie das Bot-Token wie ein Passwort; bevorzugen Sie die Env-Var
DISCORD_BOT_TOKENauf überwachten Hosts oder beschränken Sie die Dateiberechtigungen der Konfigurationsdatei. - Gewähren Sie dem Bot nur die Berechtigungen, die er benötigt (typischerweise Nachrichten lesen/senden).
- Wenn der Bot festhängt oder rate-limitiert ist, starten Sie das Gateway (
openclaw gateway --force) neu, nachdem Sie bestätigt haben, dass keine anderen Prozesse die Discord-Sitzung besitzen.