Discord (Bot API)
Discord verbinden. Bot-Token und Server-Setup. Status: bereit für DM- und Gildentextkanäle über das offizielle Discord-Bot-Gateway.
Schnelleinrichtung (Anfänger)
- 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 vorhaben, Zulassen-Listen oder Namenssuche zu verwenden).
- Setzen Sie das Token für OpenClaw:
- Env:
DISCORD_BOT_TOKEN=... - Oder Konfig:
channels.discord.token: "...". - Wenn beide gesetzt sind, hat config Vorrang (env fallback ist nur default-account).
- Env:
- Laden Sie den Bot auf Ihren Server mit Nachrichtenberechtigung ein (erstellen Sie einen privaten Server, wenn Sie nur DMs wollen).
- Starten Sie das Gateway.
- Der DM-Zugang ist standardmäßig gekoppelt; bestätigen Sie den Kopplungscode beim ersten Kontakt.
Minimale Konfiguration:
{
channels: {
discord: {
enabled: true,
token: "YOUR_BOT_TOKEN"
}
}
}Ziele
- Sprich mit OpenClaw über Discord-DMs oder Gildenkanäle.
- Direkte Chats werden in der Hauptsitzung des Agenten zusammengefasst (Standard:
agent:main:main); Gildenkanäle bleiben isoliert alsagent:<agentId>:discord:channel:<channelId>(Anzeigenamen verwendendiscord:<guildSlug>#<channelSlug>). - Gruppen-DMs werden standardmäßig ignoriert; aktiviere sie über
channels.discord.dm.groupEnabledund schränke sie optional durchchannels.discord.dm.groupChannelsein. - Halte das Routing deterministisch: Antworten gehen immer zu dem Channel zurück, auf dem sie angekommen sind.
Wie es funktioniert
-
Erstellen Sie eine Discord-Anwendung → Bot, aktivieren Sie die benötigten Intents (DMs + Gildennachrichten + Nachrichteninhalt) und holen Sie sich das Bot-Token.
-
Laden Sie den Bot auf Ihren Server ein und geben Sie ihm die erforderlichen Berechtigungen, um Nachrichten zu lesen/zu senden, wenn Sie ihn verwenden möchten.
-
Konfigurieren Sie OpenClaw mit
channels.discord.token(oderDISCORD_BOT_TOKENals Ersatz). -
Starten Sie das Gateway; es startet den Discord-Kanal automatisch, wenn ein Token verfügbar ist (zuerst in der Konfiguration, dann in der Umgebung) und
channels.discord.enablednichtfalseist.- Wenn Sie env vars bevorzugen, setzen Sie
DISCORD_BOT_TOKEN(ein Konfigurationsblock ist optional).
- Wenn Sie env vars bevorzugen, setzen Sie
-
Direkte Chats: benutze
user:<id>(oder eine<@id>Erwähnung) wenn du sie abgibst; alle Turns landen in der gemeinsamenmainSession. Bloße numerische IDs sind zweideutig und werden abgelehnt. -
Gildenkanäle: benutze
channel:<channelId>für die Übergabe. Erwähnungen sind standardmäßig erforderlich und können pro Gilde oder pro Kanal eingestellt werden. -
Direkte Chats: standardmäßig sicher über
channels.discord.dm.policy(Standard:Pairing"). Unbekannte Absender erhalten einen Pairing-Code (läuft nach 1 Stunde ab); Freigabe überopenclaw pairing approve discord <code>.- Um das alte “offen für jeden” Verhalten beizubehalten: setze
channels.discord.dm.policy="open"undchannels.discord.dm.allowFrom=["*"]. - Um eine harte Liste zuzulassen: setzen Sie
channels.discord.dm.policy="allowlist"und listen Sie die Absender inchannels.discord.dm.allowFrom. - Um alle DMs zu ignorieren: setze
channels.discord.dm.enabled=falseoderchannels.discord.dm.policy="disabled".
- Um das alte “offen für jeden” Verhalten beizubehalten: setze
-
Gruppen-DMs werden standardmäßig ignoriert; aktivieren Sie sie mit
channels.discord.dm.groupEnabledund schränken Sie sie optional mitchannels.discord.dm.groupChannelsein. -
Optionale Gildenregeln: setze
channels.discord.guilds, verschlüsselt durch Gilden-ID (bevorzugt) oder Slug, mit Regeln pro Kanal. -
Optionale native Befehle:
commands.nativesteht standardmäßig auf"auto"(an für Discord/Telegram, aus für Slack). Überschreiben mitchannels.discord.commands.native: true|false|"auto";falselöscht zuvor registrierte Befehle. Textbefehle werden durchcommands.textgesteuert und müssen als eigenständige/...Nachrichten gesendet werden. Verwenden Siecommands.useAccessGroups: false, um Zugriffsgruppenprüfungen für Befehle zu umgehen.- Vollständige Befehlsliste + Konfiguration: Slash-Befehle
-
Optionaler Gildenkontextverlauf: Setze
channels.discord.historyLimit(Standardwert 20, fällt zurück aufmessages.groupChat.historyLimit), um die letzten N Gildennachrichten als Kontext einzubeziehen, wenn auf eine Erwähnung geantwortet wird. Setze0zum Deaktivieren. -
Reaktionen: Der Agent kann Reaktionen über das
discord-Tool auslösen (gated bychannels.discord.actions.*).- Semantik des Entfernens von Reaktionen: siehe /tools/reactions.
- Das
discord-Werkzeug ist nur sichtbar, wenn der aktuelle Kanal Discord ist.
-
Native Befehle verwenden isolierte Sitzungsschlüssel (
agent:<agentId>:discord:slash:<userId>) anstelle der gemeinsamenmainSitzung.
Hinweis: Die Auflösung von Name → id nutzt die Suche nach Gildenmitgliedern und erfordert Server Members Intent; wenn der Bot keine Mitglieder suchen kann, verwendet er ids oder <@id>-Erwähnungen.
Hinweis: Slugs werden klein geschrieben und Leerzeichen durch - ersetzt. Channel-Namen werden ohne das führende # geschrieben.
Hinweis: Die Zeilen des Gildenkontextes [from:] enthalten author.tag + id, um das Anpinnen von Antworten zu erleichtern.
Konfig schreibt
Standardmäßig ist es Discord erlaubt, Konfigurationsaktualisierungen zu schreiben, die durch /config set|unset ausgelöst werden (erfordert commands.config: true).Deaktivieren mit:
{
channels: { discord: { configWrites: false } }
}Wie Sie Ihren eigenen Bot erstellen
Dies ist das “Discord Developer Portal”, um OpenClaw in einem Server (Gilden)-Kanal wie #help zu betreiben.
1) Erstellen Sie die Discord-App + Bot-Benutzer
- Discord-Entwicklerportal → Anwendungen → Neue Anwendung
- In Ihrer App:
- Bot → Bot hinzufügen
- Kopieren Sie das Bot Token (das ist das, was Sie in
DISCORD_BOT_TOKENeintragen)
2) Aktivieren Sie die Gateway-Intents, die OpenClaw braucht
Discord blockiert “privilegierte Intents”, es sei denn, Sie aktivieren sie explizit in Bot → Privileged Gateway Intents:
- Nachrichteninhalt-Intent (wird in den meisten Gilden benötigt, um den Nachrichtentext zu lesen; ohne diesen Intent wird “Used disallowed intents” angezeigt oder der Bot verbindet sich, reagiert aber nicht auf Nachrichten)
- Server Members Intent (empfohlen; erforderlich für einige Mitglieder-/Benutzer-Suchvorgänge und den Abgleich von Erlaubnislisten in Gilden)
Du brauchst normalerweise nicht Presence Intent.
3) Generieren Sie eine Einladungs-URL (OAuth2 URL Generator)
In Ihrer App: OAuth2 → URL Generator****Scopes
- ✅
bot - ✅
applications.commands(erforderlich für native Befehle)
Bot-Berechtigungen (minimale Grundeinstellung)
- ✅ 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 Sie sie möchten)
Kopieren Sie die generierte URL, öffnen Sie sie, wählen Sie Ihren Server und installieren Sie den Bot.
4) Erhalte die IDs (Gilde/Benutzer/Kanal)
Discord verwendet überall numerische IDs; OpenClaw config bevorzugt IDs.
- Discord (Desktop/Web) → Benutzereinstellungen → Erweitert → Entwicklermodus aktivieren
- Rechtsklick:
- Servername → Server-ID kopieren (Gilden-ID)
- Kanal (z.B.
#help) → Kanal-ID kopieren - Ihr Benutzer → Benutzer-ID kopieren
5) OpenClaw konfigurieren
Token
Setzen Sie das Bot-Token per env var (empfohlen auf Servern):
DISCORD_BOT_TOKEN=...
Oder über config:
{
channels: {
discord: {
enabled: true,
token: "YOUR_BOT_TOKEN"
}
}
}Unterstützung für mehrere Konten: Verwenden Sie channels.discord.accounts mit Token pro Konto und optionalem Name. Siehe gateway/configuration für das gemeinsame Muster.
Allowlist + Kanal-Routing
Beispiel “Einzelner Server, nur mich zulassen, nur #help zulassen”:
{
channels: {
discord: {
enabled: true,
dm: { enabled: false },
guilds: {
"YOUR_GUILD_ID": {
users: ["YOUR_USER_ID"],
requireMention: true,
channels: {
help: { allow: true, requireMention: true }
}
}
},
retry: {
attempts: 3,
minDelayMs: 500,
maxDelayMs: 30000,
jitter: 0.1
}
}
}
}Anmerkungen:
requireMention: truebedeutet, dass der Bot nur antwortet, wenn er erwähnt wird (empfohlen für gemeinsame Kanäle).- Die
agents.list[].groupChat.mentionPatterns(odermessages.groupChat.mentionPatterns) zählen auch als Erwähnungen für Gildennachrichten. - Multi-Agent Überschreibung: setze pro-Agent Muster auf
agents.list[].groupChat.mentionPatterns. - Wenn
channelsvorhanden ist, wird jeder nicht aufgeführte Channel standardmäßig verweigert. - Benutze einen
"*"Channel-Eintrag, um die Standardeinstellungen auf alle Channels anzuwenden; explizite Channel-Einträge setzen den Platzhalter außer Kraft. - Threads erben die übergeordnete Channel-Konfiguration (allowlist,
requireMention, Skills, Prompts, etc.), es sei denn, du fügst die Channel-ID des Threads explizit hinzu. - Von Bots verfasste Nachrichten werden standardmäßig ignoriert; setze
channels.discord.allowBots=trueum sie zuzulassen (eigene Nachrichten bleiben gefiltert). - Warnung: Wenn Sie Antworten an andere Bots zulassen (
channels.discord.allowBots=true), verhindern Sie Bot-zu-Bot-Antwortschleifen mitrequireMention,channels.discord.guilds.*.channels.<id>.usersallowlists, und/oder klaren Leitplanken inAGENTS.mdundSOUL.md.
6) Überprüfen Sie, ob es funktioniert
- Starten Sie das Gateway.
- Senden Sie in Ihrem Server-Kanal:
@Krill hello(oder wie auch immer Ihr Botname lautet). - Wenn nichts passiert: siehe Fehlerbehebung unten.
Fehlersuche
-
Erstens: Führen Sie
openclaw doctorundopenclaw channels status --probeaus (umsetzbare Warnungen + schnelle Überprüfungen). -
“Used disallowed intents ”: Aktivieren Sie Message Content Intent (und wahrscheinlich Server Members Intent) im Developer Portal, und starten Sie dann das Gateway neu.
-
Bot verbindet sich, antwortet aber nie in einem Gildenkanal:
- Fehlender Message Content Intent, oder
- Dem Bot fehlen Channel-Berechtigungen (Anzeigen/Senden/Verlauf lesen), oder
- Deine Konfiguration erfordert Erwähnungen und du hast es nicht erwähnt, oder
- Deine Gilde/Channel-Zulassungsliste verweigert den Channel/Nutzer.
-
requireMention: falseund trotzdem keine Antworten: -
channels.discord.groupPolicysteht standardmäßig auf allowlist; setze sie auf"open"oder füge einen Gildeneintrag unterchannels.discord.guildshinzu (liste optional Kanäle unterchannels.discord.guilds.<id>.channelsauf, um sie einzuschränken).- Wenn Sie nur
DISCORD_BOT_TOKENsetzen und nie einenchannels.discordAbschnitt erstellen, wird die Laufzeit standardmäßiggroupPolicyaufopengesetzt. Fügen Siechannels.discord.groupPolicyhinzu, channels.defaults.groupPolicy` oder eine Gilden-/Channel-Zulassungsliste, um sie zu sperren.
- Wenn Sie nur
-
requireMentionmuss unterchannels.discord.guilds(oder einem bestimmten Channel) stehen.channels.discord.requireMentionauf der obersten Ebene wird ignoriert. -
Berechtigungsprüfungen (
channels status --probe) prüfen nur numerische Channel-IDs. Wenn Sie Slugs/Namen alschannels.discord.guilds.*.channels-Schlüssel verwenden, kann die Prüfung keine Berechtigungen verifizieren. -
DMs funktionieren nicht:
channels.discord.dm.enabled=false,channels.discord.dm.policy="disabled", oder du wurdest noch nicht zugelassen (channels.discord.dm.policy="pairing").
Fähigkeiten & Grenzen
- DMs und Gilden-Textchannels (Threads werden als separate Channels behandelt; Sprache wird nicht unterstützt).
- Tippindikatoren werden best-effort gesendet; Nachrichten-Chunking verwendet
channels.discord.textChunkLimit(Standard 2000) und teilt große Antworten nach Zeilenzahl auf (channels.discord.maxLinesPerMessage, Standard 17). - Optionales Newline Chunking: Setzen Sie
channels.discord.chunkMode="newline", um Leerzeilen (Absatzgrenzen) vor dem Chunking aufzuteilen. - Datei-Uploads werden bis zu der konfigurierten
channels.discord.mediaMaxMbunterstützt (Standard 8 MB). - Standardmäßig werden Gildenantworten mit Erwähnungen versehen, um lärmende Bots zu vermeiden.
- Antwortkontext wird injiziert, wenn eine Nachricht auf eine andere Nachricht verweist (zitierter Inhalt + ids).
- Natives Antwort-Threading ist standardmäßig ausgeschaltet; mit
channels.discord.replyToModeund Antwort-Tags aktivieren.
Wiederholungsrichtlinie
Ausgehende Discord-API-Aufrufe werden bei Ratenbeschränkungen (429) mit Discord retry_after wiederholt, wenn verfügbar, mit exponentiellem Backoff und Jitter. Konfigurieren Sie über channels.discord.retry. Siehe Retry policy.
Konfigurieren
{
channels: {
discord: {
enabled: true,
token: "abc.123",
groupPolicy: "allowlist",
guilds: {
"*": {
channels: {
general: { allow: true }
}
}
},
mediaMaxMb: 8,
actions: {
reactions: true,
stickers: true,
emojiUploads: true,
stickerUploads: true,
polls: true,
permissions: true,
messages: true,
threads: true,
pins: true,
search: true,
memberInfo: true,
roleInfo: true,
roles: false,
channelInfo: true,
channels: true,
voiceStatus: true,
events: true,
moderation: false
},
replyToMode: "off",
dm: {
enabled: true,
policy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["123456789012345678", "steipete"],
groupEnabled: false,
groupChannels: ["clawd-dm"]
},
guilds: {
"*": { requireMention: true },
"123456789012345678": {
slug: "friends-of-clawd",
requireMention: false,
reactionNotifications: "own",
users: ["987654321098765432", "steipete"],
channels: {
general: { allow: true },
help: {
allow: true,
requireMention: true,
users: ["987654321098765432"],
skills: ["search", "docs"],
systemPrompt: "Keep answers short."
}
}
}
}
}
}
}Ack-Reaktionen werden global gesteuert über messages.ackReaction +
messages.ackReactionScope gesteuert. Benutze messages.removeAckAfterReply um die
Ack-Reaktion zu löschen, nachdem der Bot geantwortet hat.
-
dm.enabled: setzefalseum alle DMs zu ignorieren (Standardtrue). -
dm.policy: DM-Zugangskontrolle (pairingempfohlen)."open"erfordertdm.allowFrom=["*"]. -
dm.allowFrom: DM-Zugriffsliste (Benutzer-IDs oder Namen). Wird vondm.policy="allowlist"und für diedm.policy="open"-Überprüfung verwendet. Der Assistent akzeptiert Benutzernamen und löst sie in IDs auf, wenn der Bot Mitglieder suchen kann. -
dm.groupEnabled: Aktiviert Gruppen-DMs (Voreinstellungfalse). -
dm.groupChannels: optionale Erlaubnisliste für Gruppen-DM-Kanal-Ids oder Slugs. -
groupPolicy: steuert die Behandlung von Gilden-Channels (open|disabled|allowlist);allowlisterfordert Channel-Allowlists. -
guilds: Regeln für jede Gilde, verschlüsselt durch die Gilden-ID (bevorzugt) oder den Slug. -
guilds. "*": Standardeinstellungen pro Gilde, die angewendet werden, wenn kein expliziter Eintrag existiert. -
guilds.<id>.slug: optionaler freundlicher Slug, der für Anzeigenamen verwendet wird. -
guilds.<id>.users: optionale Benutzererlaubnisliste pro Gilde (IDs oder Namen). -
guilds.<id>.tools: optionale Überschreibungen pro Gilde (allow/deny/alsoAllow), die verwendet werden, wenn die Channel-Überschreibung fehlt. -
guilds.<id>.toolsBySender: optionale Überschreibungen der Werkzeugrichtlinien pro Absender auf Gildenebene (wird verwendet, wenn der Channel-Override fehlt; ”*“-Platzhalter wird unterstützt). -
guilds.<id>.channels.<channel>.allow: erlaubt/verweigert den Channel, wenngroupPolicy="allowlist". -
guilds.<id>.channels.<channel>.requireMention: Erwähnung des Gating für den Channel. -
guilds.<id>.channels.<channel>.tools: optionale Überschreibungen der Tool-Richtlinie pro Kanal (allow/deny/alsoAllow). -
guilds.<id>.channels.<channel>.toolsBySender: optionale Überschreibungen der Werkzeugrichtlinien pro Absender innerhalb des Kanals (`”*“-Wildcard unterstützt). -
guilds.<id>.channels.<channel>.users: optionale Benutzererlaubnisliste pro Kanal. -
guilds.<id>.channels.<channel>.skills: Skill-Filter (omit = alle Skills, empty = keine). -
guilds.<id>.channels.<channel>.systemPrompt: zusätzlicher Systemprompt für den Channel (kombiniert mit Channel-Thema). -
guilds.<id>.channels.<channel>.enabled: setzefalseum den Channel zu deaktivieren. -
guilds.<id>.channels: Channel-Regeln (Schlüssel sind Channel-Slugs oder -IDs). -
guilds.<id>.requireMention: Anforderung an die Erwähnung pro Gilde (überschreibbar pro Kanal). -
guilds.<id>.reactionNotifications: Reaktionssystem-Ereignis-Modus (off,own,all,allowlist). -
TextChunkLimit: Größe der ausgehenden Textchunks (Zeichen). Voreinstellung: 2000. -
chunkMode:length(Voreinstellung) teilt nur auf, wenntextChunkLimitüberschritten wird;newlineteilt auf Leerzeilen (Absatzgrenzen) vor der Längenaufteilung auf. -
maxLinesPerMessage: weiche maximale Zeilenzahl pro Nachricht. Voreinstellung: 17. -
mediaMaxMb: Klemme für eingehende Medienauf der Festplatte gespeichert. -
historyLimit: Anzahl der letzten Gildennachrichten, die bei der Beantwortung einer Erwähnung als Kontext mit einbezogen werden (Standardwert 20; fällt zurück aufmessages.groupChat.historyLimit;0deaktiviert). -
dmHistoryLimit: DM-History-Limit in Benutzer-Turns. Überschreibt pro Benutzer:dms["<Benutzer_id>"].historyLimit. -
retry: Wiederholungsrichtlinie für ausgehende Discord-API-Aufrufe (Versuche, minDelayMs, maxDelayMs, Jitter). -
actions: Tool Gates für jede Aktion; weglassen, um alle zuzulassen (zum Deaktivierenfalsesetzen).reactions(deckt react + read reactions ab)Sticker,emojiUploads,stickerUploads,polls,permissions,messages,threads,pins,searchmemberInfo,roleInfo,channelInfo,voiceStatus,eventsChannels(Kanäle erstellen/bearbeiten/löschen + Kategorien + Berechtigungen)Rollen(Rolle hinzufügen/entfernen, Standardfalse)Moderation(Timeout/Kick/Bann, Voreinstellungfalse)
Reaktionsbenachrichtigungen verwenden guilds.<id>.reactionNotifications:
off: keine Reaktionsereignisse.own: Reaktionen auf die eigenen Nachrichten des Bots (Voreinstellung).all: alle Reaktionen auf alle Nachrichten.allowlist: Reaktionen vonguilds.<id>.usersauf alle Nachrichten (leere Liste deaktiviert).
Voreinstellungen für Tool-Aktionen
| Aktionsgruppe | Standard | Anmerkungen |
|---|---|---|
| Reaktionen | aktiviert | Reagieren + Reaktionen auflisten + EmojiListe |
| Aufkleber | aktiviert | Aufkleber senden |
| emojiUploads | aktiviert | Emojis hochladen |
| stickerUploads | aktiviert | Sticker hochladen |
| Umfragen | aktiviert | Umfragen erstellen |
| permissions | enabled | Channel permission snapshot |
| Nachrichten | aktiviert | Lesen/Senden/Bearbeiten/Löschen |
| Threads | aktiviert | Erstellen/Listen/Antworten |
| Pins | aktiviert | Pin/unpin/list |
| Suche | aktiviert | Nachrichtensuche (Vorschaufunktion) |
| memberInfo | aktiviert | Mitgliederinfo |
| roleInfo | aktiviert | Rollenliste |
| channelInfo | aktiviert | Kanalinfo + Liste |
| channels | aktiviert | Kanal-/Kategorieverwaltung |
| voiceStatus | aktiviert | Sprachstatusabfrage |
| events | aktiviert | Geplante Ereignisse auflisten/erstellen |
| Rollen | deaktiviert | Rolle hinzufügen/entfernen |
| Moderation | deaktiviert | Timeout/Kick/Bann |
replyToMode:off(Standard),first, oderall. Gilt nur, wenn das Modell ein Antwort-Tag enthält.
Antwort-Tags
Um eine Antwort anzufordern, kann das Modell ein Tag in seine Ausgabe aufnehmen:
[[reply_to_current]]- Antwort auf die auslösende Discord-Nachricht.[[reply_to:<id>]]- Antwort auf eine bestimmte Nachrichten-ID aus dem Kontext/der Historie. Aktuelle Nachrichten-IDs werden an Prompts als[message_id: ...]angehängt; History-Einträge enthalten bereits IDs.
Das Verhalten wird durch channels.discord.replyToMode gesteuert:
- Aus”: Tags ignorieren.
first: nur der erste ausgehende Chunk/Attachment ist eine Antwort.- all”: jeder ausgehende Chunk/Attachment ist eine Antwort.
Allowlist passende Hinweise:
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 zuzulassen. - Wenn
guilds.<id>.channelsvorhanden ist, werden Kanäle, die nicht aufgeführt sind, standardmäßig verweigert. - Wenn
guilds.<id>.channelsweggelassen wird, sind alle Channels in der zugelassenen Gilde erlaubt. - Um keine Channels zu erlauben, setze
channels.discord.groupPolicy: "disabled"(oder behalte eine leere Erlaubnisliste). - Der Konfigurationsassistent akzeptiert Gilden-/Kanalnamen (öffentlich + privat) und löst sie in IDs auf, wenn möglich.
- Beim Start löst OpenClaw die Kanal-/Benutzernamen in den Zulassungslisten in IDs auf (wenn der Bot Mitglieder suchen kann) und protokolliert die Zuordnung; nicht aufgelöste Einträge werden wie eingegeben beibehalten.
Hinweise zum nativen Befehl:
- Die registrierten Befehle spiegeln die Chat-Befehle von OpenClaw wider.
- Native Befehle beachten dieselben Erlaubnislisten wie DMs/Gildennachrichten (
channels.discord.dm.allowFrom,channels.discord.guilds, Regeln pro Kanal). - Slash-Befehle können immer noch in der Discord-Benutzeroberfläche für Benutzer sichtbar sein, die nicht auf der Erlaubnisliste stehen; OpenClaw erzwingt die Erlaubnislisten bei der Ausführung und antwortet “nicht autorisiert”.
Werkzeug-Aktionen
Der Agent kann discord mit Aktionen aufrufen wie:
react/reactions(Reaktionen hinzufügen oder auflisten)sticker,poll,permissionsreadMessages,sendMessage,editMessage,deleteMessage- Die Nutzdaten der Lese-/Such-/Pin-Tools umfassen normalisierte
timestampMs(UTC-Epoche ms) undtimestampUtcneben dem rohen Discordtimestamp. threadCreate,threadList,threadReplypinMessage,unpinMessage,listPinssearchMessages,memberInfo,roleInfo,roleAdd,roleRemove,emojiListchannelInfo,channelList,voiceStatus,eventList,eventCreatetimeout,kick,ban
Discord-Nachrichten-IDs werden im injizierten Kontext ([discord message id: ...] und in den Verlaufszeilen) angezeigt, damit der Agent sie ansprechen kann.
Emoji können Unicode sein (z. B. ✅) oder eine benutzerdefinierte Emoji-Syntax wie <:party_blob:1234567890>.
Sicherheit & Ops
- Behandeln Sie das Bot-Token wie ein Passwort; bevorzugen Sie die Umgebungsvariable
DISCORD_BOT_TOKENauf überwachten Hosts oder sperren Sie die Berechtigungen der Konfigurationsdatei. - Geben Sie dem Bot nur die Rechte, die er braucht (normalerweise Lesen/Senden von Nachrichten).
- Wenn der Bot feststeckt oder die Rate begrenzt ist, starten Sie das Gateway neu (
openclaw gateway --force), nachdem Sie sichergestellt haben, dass kein anderer Prozess die Discord-Sitzung besitzt.