Discord (Bot API)
Status: Bereit für DMs und Guild-Textkanäle über das offizielle Discord Bot Gateway.
Schnellstart (Einsteiger)
- Erstelle einen Discord Bot und kopiere das Bot Token.
- Aktiviere in den Discord-App-Einstellungen Message Content Intent (und Server Members Intent, falls du Allowlists oder Namensauflösung nutzen möchtest).
- Setze das Token für OpenClaw:
- Env:
DISCORD_BOT_TOKEN=... - Oder Config:
channels.discord.token: "...". - Wenn beides gesetzt ist, hat die Config Vorrang (Env-Fallback gilt nur für den Default-Account).
- Env:
- Lade den Bot auf deinen Server ein mit Nachrichtenberechtigungen (erstelle einen privaten Server, wenn du nur DMs nutzen möchtest).
- Starte das Gateway.
- DM-Zugriff ist standardmäßig auf Pairing eingestellt; genehmige den Pairing-Code beim ersten Kontakt.
Minimale Config:
{
channels: {
discord: {
enabled: true,
token: "YOUR_BOT_TOKEN",
},
},
}
Ziele
- Mit OpenClaw über Discord DMs oder Guild-Kanäle kommunizieren.
- Direkte Chats laufen in der Haupt-Session des Agents zusammen (Standard:
agent:main:main); Guild-Kanäle bleiben isoliert alsagent:<agentId>:discord:channel:<channelId>(Anzeigenamen nutzendiscord:<guildSlug>#<channelSlug>). - Gruppen-DMs werden standardmäßig ignoriert; aktiviere sie über
channels.discord.dm.groupEnabledund schränke sie optional überchannels.discord.dm.groupChannelsein. - Routing bleibt deterministisch: Antworten gehen immer zurück zum Kanal, von dem sie kamen.
Wie es funktioniert
- Erstelle eine Discord-Anwendung → Bot, aktiviere die benötigten Intents (DMs + Guild-Nachrichten + Message Content) und hole dir das Bot Token.
- Lade den Bot auf deinen Server ein mit den Berechtigungen zum Lesen/Senden von Nachrichten, wo du ihn nutzen möchtest.
- Konfiguriere OpenClaw mit
channels.discord.token(oderDISCORD_BOT_TOKENals Fallback). - Starte das Gateway; es startet automatisch den Discord Channel, wenn ein Token verfügbar ist (Config zuerst, Env als Fallback) und
channels.discord.enablednichtfalseist.- Wenn du Env-Variablen bevorzugst, setze
DISCORD_BOT_TOKEN(ein Config-Block ist optional).
- Wenn du Env-Variablen bevorzugst, setze
- Direkte Chats: Nutze
user:<id>(oder eine<@id>-Erwähnung) beim Versenden; alle Turns landen in der gemeinsamenmain-Session. Reine numerische IDs sind mehrdeutig und werden abgelehnt. - Guild-Kanäle: Nutze
channel:<channelId>zum Versenden. Erwähnungen sind standardmäßig erforderlich und können pro Guild oder pro Kanal gesetzt 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); genehmige überopenclaw pairing approve discord <code>.- Um das alte “offen für alle”-Verhalten beizubehalten: Setze
channels.discord.dm.policy="open"undchannels.discord.dm.allowFrom=["*"]. - Für eine harte Allowlist: Setze
channels.discord.dm.policy="allowlist"und liste Absender inchannels.discord.dm.allowFromauf. - Um alle DMs zu ignorieren: Setze
channels.discord.dm.enabled=falseoderchannels.discord.dm.policy="disabled".
- Um das alte “offen für alle”-Verhalten beizubehalten: Setze
- Gruppen-DMs werden standardmäßig ignoriert; aktiviere sie über
channels.discord.dm.groupEnabledund schränke sie optional überchannels.discord.dm.groupChannelsein. - Optionale Guild-Regeln: Setze
channels.discord.guildsmit Schlüsseln nach Guild-ID (bevorzugt) oder Slug, mit Regeln pro Kanal. - Optionale native Commands:
commands.nativeist standardmäßig"auto"(an für Discord/Telegram, aus für Slack). Überschreibe mitchannels.discord.commands.native: true|false|"auto";falselöscht zuvor registrierte Commands. Text-Commands werden übercommands.textgesteuert und müssen als eigenständige/...-Nachrichten gesendet werden. Nutzecommands.useAccessGroups: false, um Access-Group-Checks für Commands zu umgehen.- Vollständige Command-Liste + Config: Slash Commands
- Optionaler Guild-Context-Verlauf: Setze
channels.discord.historyLimit(Standard 20, fällt zurück aufmessages.groupChat.historyLimit), um die letzten N Guild-Nachrichten als Context einzubeziehen, wenn auf eine Erwähnung geantwortet wird. Setze0zum Deaktivieren. - Reactions: Der Agent kann Reactions über das
discord-Tool auslösen (gesteuert durchchannels.discord.actions.*).- Reaction-Entfernungs-Semantik: siehe /tools/reactions.
- Das
discord-Tool wird nur verfügbar gemacht, wenn der aktuelle Channel Discord ist.
- Native Commands nutzen isolierte Session-Keys (
agent:<agentId>:discord:slash:<userId>) statt der gemeinsamenmain-Session.
Hinweis: Name → ID-Auflösung nutzt Guild-Member-Suche und benötigt Server Members Intent; wenn der Bot keine Members durchsuchen kann, nutze IDs oder <@id>-Erwähnungen.
Hinweis: Slugs sind kleingeschrieben mit Leerzeichen ersetzt durch -. Kanalnamen werden ohne führendes # geslugged.
Hinweis: Guild-Context-[from:]-Zeilen enthalten author.tag + id, um ping-fertige Antworten zu erleichtern.
Config-Schreibzugriff
Standardmäßig darf Discord Config-Updates schreiben, die durch /config set|unset ausgelöst werden (benötigt commands.config: true).
Deaktivieren mit:
{
channels: { discord: { configWrites: false } },
}
Eigenen Bot erstellen
Das ist das “Discord Developer Portal”-Setup zum Betrieb von OpenClaw in einem Server-(Guild-)Kanal wie #help.
1) Discord-App + Bot-User erstellen
- Discord Developer Portal → Applications → New Application
- In deiner App:
- Bot → Add Bot
- Kopiere das Bot Token (das kommt in
DISCORD_BOT_TOKEN)
2) Gateway Intents aktivieren, die OpenClaw braucht
Discord blockiert “privileged intents”, außer du aktivierst sie explizit.
In Bot → Privileged Gateway Intents, aktiviere:
- Message Content Intent (erforderlich zum Lesen von Nachrichtentexten in den meisten Guilds; ohne siehst du “Used disallowed intents” oder der Bot verbindet sich, reagiert aber nicht auf Nachrichten)
- Server Members Intent (empfohlen; erforderlich für einige Member/User-Lookups und Allowlist-Matching in Guilds)
Du brauchst normalerweise nicht den Presence Intent.
3) Invite-URL generieren (OAuth2 URL Generator)
In deiner App: OAuth2 → URL Generator
Scopes
- ✅
bot - ✅
applications.commands(erforderlich für native Commands)
Bot Permissions (minimale Baseline)
- ✅ View Channels
- ✅ Send Messages
- ✅ Read Message History
- ✅ Embed Links
- ✅ Attach Files
- ✅ Add Reactions (optional, aber empfohlen)
- ✅ Use External Emojis / Stickers (optional; nur wenn du sie möchtest)
Vermeide Administrator, außer du debuggst und vertraust dem Bot vollständig.
Kopiere die generierte URL, öffne sie, wähle deinen Server und installiere den Bot.
4) IDs holen (Guild/User/Channel)
Discord nutzt überall numerische IDs; OpenClaw-Config bevorzugt IDs.
- Discord (Desktop/Web) → User Settings → Advanced → aktiviere Developer Mode
- Rechtsklick:
- Servername → Copy Server ID (Guild-ID)
- Kanal (z. B.
#help) → Copy Channel ID - Dein User → Copy User ID
5) OpenClaw konfigurieren
Token
Setze das Bot Token über Env-Variable (empfohlen auf Servern):
DISCORD_BOT_TOKEN=...
Oder über Config:
{
channels: {
discord: {
enabled: true,
token: "YOUR_BOT_TOKEN",
},
},
}
Multi-Account-Support: Nutze channels.discord.accounts mit Tokens pro Account und optionalem name. Siehe gateway/configuration für das gemeinsame Pattern.
Allowlist + Channel-Routing
Beispiel “einzelner Server, nur ich erlaubt, nur #help erlaubt”:
{
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,
},
},
},
}
Hinweise:
requireMention: truebedeutet, der Bot antwortet nur bei Erwähnung (empfohlen für geteilte Kanäle).agents.list[].groupChat.mentionPatterns(odermessages.groupChat.mentionPatterns) zählen auch als Erwähnungen für Guild-Nachrichten.- Multi-Agent-Override: Setze Agent-spezifische Patterns auf
agents.list[].groupChat.mentionPatterns. - Wenn
channelsvorhanden ist, wird jeder nicht aufgelistete Kanal standardmäßig abgelehnt. - Nutze einen
"*"-Kanal-Eintrag, um Defaults über alle Kanäle anzuwenden; explizite Kanal-Einträge überschreiben den Wildcard. - Threads erben die Config des Eltern-Kanals (Allowlist,
requireMention, Skills, Prompts usw.), außer du fügst die Thread-Kanal-ID explizit hinzu. - Bot-verfasste Nachrichten werden standardmäßig ignoriert; setze
channels.discord.allowBots=true, um sie zu erlauben (eigene Nachrichten bleiben gefiltert). - Warnung: Wenn du Antworten auf andere Bots erlaubst (
channels.discord.allowBots=true), verhindere Bot-zu-Bot-Antwortschleifen mitrequireMention,channels.discord.guilds.*.channels.<id>.users-Allowlists und/oder klaren Leitplanken inAGENTS.mdundSOUL.md.
6) Prüfen, ob es funktioniert
- Starte das Gateway.
- Sende in deinem Server-Kanal:
@Krill hello(oder wie auch immer dein Bot heißt). - Wenn nichts passiert: Schau dir Troubleshooting unten an.
Troubleshooting
- Zuerst: Führe
openclaw doctorundopenclaw channels status --probeaus (umsetzbare Warnungen + schnelle Audits). - “Used disallowed intents”: Aktiviere Message Content Intent (und wahrscheinlich Server Members Intent) im Developer Portal, dann starte das Gateway neu.
- Bot verbindet sich, antwortet aber nie in einem Guild-Kanal:
- Message Content Intent fehlt, oder
- Dem Bot fehlen Kanal-Berechtigungen (View/Send/Read History), oder
- Deine Config verlangt Erwähnungen und du hast ihn nicht erwähnt, oder
- Deine Guild/Kanal-Allowlist lehnt den Kanal/User ab.
requireMention: false, aber trotzdem keine Antworten:channels.discord.groupPolicyist standardmäßig allowlist; setze es auf"open"oder füge einen Guild-Eintrag unterchannels.discord.guildshinzu (liste optional Kanäle unterchannels.discord.guilds.<id>.channelsauf, um einzuschränken).- Wenn du nur
DISCORD_BOT_TOKENsetzt und nie einenchannels.discord-Abschnitt erstellst, setzt die RuntimegroupPolicystandardmäßig aufopen. Fügechannels.discord.groupPolicy,channels.defaults.groupPolicyoder eine Guild/Kanal-Allowlist hinzu, um es zu sperren.
- Wenn du nur
requireMentionmuss unterchannels.discord.guilds(oder einem spezifischen Kanal) stehen.channels.discord.requireMentionauf oberster Ebene wird ignoriert.- Permission-Audits (
channels status --probe) prüfen nur numerische Kanal-IDs. Wenn du Slugs/Namen alschannels.discord.guilds.*.channels-Keys nutzt, kann das Audit keine Berechtigungen verifizieren. - DMs funktionieren nicht:
channels.discord.dm.enabled=false,channels.discord.dm.policy="disabled", oder du wurdest noch nicht genehmigt (channels.discord.dm.policy="pairing"). - Exec-Approvals in Discord: Discord unterstützt eine Button-UI für Exec-Approvals in DMs (Allow once / Always allow / Deny).
/approve <id> ...ist nur für weitergeleitete Approvals und löst Discords Button-Prompts nicht auf. Wenn du❌ Failed to submit approval: Error: unknown approval idsiehst oder die UI nie erscheint, prüfe:channels.discord.execApprovals.enabled: truein deiner Config.- Deine Discord-User-ID ist in
channels.discord.execApprovals.approversaufgelistet (die UI wird nur an Approvers gesendet). - Nutze die Buttons im DM-Prompt (Allow once, Always allow, Deny).
- Siehe Exec Approvals und Slash Commands für den breiteren Approvals- und Command-Flow.
Funktionen & Limits
- DMs und Guild-Textkanäle (Threads werden als separate Kanäle behandelt; Voice nicht unterstützt).
- Tippindikatoren werden best-effort gesendet; Nachrichten-Chunking nutzt
channels.discord.textChunkLimit(Standard 2000) und teilt hohe Antworten nach Zeilenanzahl (channels.discord.maxLinesPerMessage, Standard 17). - Optionales Newline-Chunking: Setze
channels.discord.chunkMode="newline", um an Leerzeilen (Absatzgrenzen) zu teilen, bevor nach Länge gechunkt wird. - Datei-Uploads unterstützt bis zum konfigurierten
channels.discord.mediaMaxMb(Standard 8 MB). - Erwähnungs-gesteuerte Guild-Antworten standardmäßig, um laute Bots zu vermeiden.
- Reply-Context wird injiziert, wenn eine Nachricht auf eine andere Nachricht verweist (zitierter Inhalt + IDs).
- Natives Reply-Threading ist standardmäßig aus; aktiviere mit
channels.discord.replyToModeund Reply-Tags.
Retry Policy
Ausgehende Discord-API-Calls wiederholen bei Rate Limits (429) unter Nutzung von Discords retry_after, wenn verfügbar, mit exponentiellem Backoff und Jitter. Konfiguriere über channels.discord.retry. Siehe Retry Policy.
Config
{
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: ["openclaw-dm"],
},
guilds: {
"*": { requireMention: true },
"123456789012345678": {
slug: "friends-of-openclaw",
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-Reactions werden global über messages.ackReaction +
messages.ackReactionScope gesteuert. Nutze messages.removeAckAfterReply, um die
Ack-Reaction nach der Bot-Antwort zu entfernen.
dm.enabled: Setzefalse, um alle DMs zu ignorieren (Standardtrue).dm.policy: DM-Zugriffskontrolle (pairingempfohlen)."open"benötigtdm.allowFrom=["*"].dm.allowFrom: DM-Allowlist (User-IDs oder Namen). Wird vondm.policy="allowlist"und fürdm.policy="open"-Validierung genutzt. Der Wizard akzeptiert Usernamen und löst sie zu IDs auf, wenn der Bot Members durchsuchen kann.dm.groupEnabled: Gruppen-DMs aktivieren (Standardfalse).dm.groupChannels: Optionale Allowlist für Gruppen-DM-Kanal-IDs oder Slugs.groupPolicy: Steuert Guild-Kanal-Handling (open|disabled|allowlist);allowlistbenötigt Kanal-Allowlists.guilds: Regeln pro Guild mit Schlüssel nach Guild-ID (bevorzugt) oder Slug.guilds."*": Standard-Guild-Einstellungen, die angewendet werden, wenn kein expliziter Eintrag existiert.guilds.<id>.slug: Optionaler freundlicher Slug für Anzeigenamen.guilds.<id>.users: Optionale User-Allowlist pro Guild (IDs oder Namen).guilds.<id>.tools: Optionale Tool-Policy-Overrides pro Guild (allow/deny/alsoAllow), genutzt wenn das Kanal-Override fehlt.guilds.<id>.toolsBySender: Optionale Tool-Policy-Overrides pro Sender auf Guild-Ebene (gilt wenn das Kanal-Override fehlt;"*"-Wildcard unterstützt).guilds.<id>.channels.<channel>.allow: Kanal erlauben/verweigern 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 Sender innerhalb des Kanals ("*"-Wildcard unterstützt).guilds.<id>.channels.<channel>.users: Optionale User-Allowlist pro Kanal.guilds.<id>.channels.<channel>.skills: Skill-Filter (weglassen = alle Skills, leer = keine).guilds.<id>.channels.<channel>.systemPrompt: Extra System-Prompt für den Kanal (kombiniert mit Kanal-Topic).guilds.<id>.channels.<channel>.enabled: Setzefalse, um den Kanal zu deaktivieren.guilds.<id>.channels: Kanal-Regeln (Keys sind Kanal-Slugs oder IDs).guilds.<id>.requireMention: Erwähnungs-Anforderung pro Guild (pro Kanal überschreibbar).guilds.<id>.reactionNotifications: Reaction-System-Event-Modus (off,own,all,allowlist).textChunkLimit: Ausgehende Text-Chunk-Größe (Zeichen). Standard: 2000.chunkMode:length(Standard) teilt nur bei Überschreitung vontextChunkLimit;newlineteilt an Leerzeilen (Absatzgrenzen) vor Längen-Chunking.maxLinesPerMessage: Soft-Max-Zeilenanzahl pro Nachricht. Standard: 17.mediaMaxMb: Eingehende Medien auf Disk begrenzen.historyLimit: Anzahl der letzten Guild-Nachrichten als Context bei Antwort auf Erwähnung (Standard 20; fällt zurück aufmessages.groupChat.historyLimit;0deaktiviert).dmHistoryLimit: DM-History-Limit in User-Turns. Pro-User-Overrides:dms["<user_id>"].historyLimit.retry: Retry-Policy für ausgehende Discord-API-Calls (attempts, minDelayMs, maxDelayMs, jitter).pluralkit: PluralKit-proxied Messages auflösen, sodass System-Members als separate Sender erscheinen.actions: Tool-Gates pro Action; weglassen um alle zu erlauben (setzefalsezum Deaktivieren).reactions(umfasst react + read reactions)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)
execApprovals: Discord-only Exec-Approval-DMs (Button-UI). Unterstütztenabled,approvers,agentFilter,sessionFilter.
Reaction-Notifications nutzen guilds.<id>.reactionNotifications:
off: Keine Reaction-Events.own: Reactions auf die eigenen Nachrichten des Bots (Standard).all: Alle Reactions auf alle Nachrichten.allowlist: Reactions vonguilds.<id>.usersauf alle Nachrichten (leere Liste deaktiviert).
PluralKit (PK) Support
Aktiviere PK-Lookups, sodass proxied Messages zum zugrundeliegenden System + Member aufgelöst werden.
Wenn aktiviert, nutzt OpenClaw die Member-Identität für Allowlists und kennzeichnet den
Sender als Member (PK:System), um versehentliche Discord-Pings zu vermeiden.
{
channels: {
discord: {
pluralkit: {
enabled: true,
token: "pk_live_...", // optional; erforderlich für private Systeme
},
},
},
}
Allowlist-Hinweise (PK-aktiviert):
- Nutze
pk:<memberId>indm.allowFrom,guilds.<id>.usersoder pro-Kanalusers. - Member-Anzeigenamen werden auch nach Name/Slug gematcht.
- Lookups nutzen die originale Discord-Nachrichten-ID (die Pre-Proxy-Nachricht), sodass die PK-API sie nur innerhalb ihres 30-Minuten-Fensters auflösen kann.
- Wenn PK-Lookups fehlschlagen (z. B. privates System ohne Token), werden proxied Messages
als Bot-Nachrichten behandelt und verworfen, außer
channels.discord.allowBots=true.
Tool-Action-Defaults
| Action-Gruppe | Standard | Hinweise |
|---|---|---|
| reactions | aktiviert | React + list reactions + emojiList |
| stickers | aktiviert | Sticker senden |
| emojiUploads | aktiviert | Emojis hochladen |
| stickerUploads | aktiviert | Sticker hochladen |
| polls | aktiviert | Umfragen erstellen |
| permissions | aktiviert | Kanal-Berechtigungs-Snapshot |
| messages | aktiviert | Lesen/Senden/Bearbeiten/Löschen |
| threads | aktiviert | Erstellen/Auflisten/Antworten |
| pins | aktiviert | Pinnen/Entpinnen/Auflisten |
| search | aktiviert | Nachrichten-Suche (Preview) |
| memberInfo | aktiviert | Member-Info |
| roleInfo | aktiviert | Rollen-Liste |
| channelInfo | aktiviert | Kanal-Info + Liste |
| channels | aktiviert | Kanal/Kategorie-Management |
| voiceStatus | aktiviert | Voice-State-Lookup |
| events | aktiviert | Geplante Events auflisten/erstellen |
| roles | deaktiviert | Rollen hinzufügen/entfernen |
| moderation | deaktiviert | Timeout/Kick/Ban |
replyToMode:off(Standard),firstoderall. Gilt nur wenn das Modell ein Reply-Tag enthält.
Reply-Tags
Um eine Thread-Antwort anzufordern, kann das Modell ein Tag in seiner Ausgabe einfügen:
[[reply_to_current]]— Auf die auslösende Discord-Nachricht antworten.[[reply_to:<id>]]— Auf eine spezifische Nachrichten-ID aus Context/History antworten. Aktuelle Nachrichten-IDs werden an Prompts als[message_id: …]angehängt; History-Einträge enthalten bereits IDs.
Das Verhalten wird über 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.
Allowlist-Matching-Hinweise:
allowFrom/users/groupChannelsakzeptieren IDs, Namen, Tags oder Erwähnungen wie<@id>.- Präfixe wie
discord:/user:(Users) undchannel:(Gruppen-DMs) werden unterstützt. - Nutze
*, um jeden Sender/Kanal zu erlauben. - Wenn
guilds.<id>.channelsvorhanden ist, werden nicht aufgelistete Kanäle standardmäßig abgelehnt. - Wenn
guilds.<id>.channelsfehlt, sind alle Kanäle in der allowgelisteten Guild erlaubt. - Um keine Kanäle zu erlauben, setze
channels.discord.groupPolicy: "disabled"(oder behalte eine leere Allowlist). - Der Configure-Wizard akzeptiert
Guild/Channel-Namen (öffentlich + privat) und löst sie zu IDs auf, wenn möglich. - Beim Start löst OpenClaw Kanal/User-Namen in Allowlists zu IDs auf (wenn der Bot Members durchsuchen kann) und loggt das Mapping; nicht aufgelöste Einträge werden wie eingegeben behalten.
Native-Command-Hinweise:
- Die registrierten Commands spiegeln OpenClaws Chat-Commands.
- Native Commands respektieren dieselben Allowlists wie DMs/Guild-Nachrichten (
channels.discord.dm.allowFrom,channels.discord.guilds, pro-Kanal-Regeln). - Slash-Commands können in der Discord-UI für nicht-allowgelistete User trotzdem sichtbar sein; OpenClaw erzwingt Allowlists bei Ausführung und antwortet “not authorized”.
Tool-Actions
Der Agent kann discord mit Actions wie diesen aufrufen:
react/reactions(Reactions hinzufügen oder auflisten)sticker,poll,permissionsreadMessages,sendMessage,editMessage,deleteMessage- Read/Search/Pin-Tool-Payloads enthalten normalisierte
timestampMs(UTC-Epoch-ms) undtimestampUtcneben rohem Discord-timestamp. threadCreate,threadList,threadReplypinMessage,unpinMessage,listPinssearchMessages,memberInfo,roleInfo,roleAdd,roleRemove,emojiListchannelInfo,channelList,voiceStatus,eventList,eventCreatetimeout,kick,ban
Discord-Nachrichten-IDs werden im injizierten Context sichtbar gemacht ([discord message id: …] und History-Zeilen), sodass der Agent sie ansteuern kann.
Emoji können Unicode sein (z. B. ✅) oder Custom-Emoji-Syntax wie <:party_blob:1234567890>.
Sicherheit & Betrieb
- Behandle das Bot Token wie ein Passwort; bevorzuge die
DISCORD_BOT_TOKEN-Env-Variable auf überwachten Hosts oder sperre die Config-Datei-Berechtigungen. - Gib dem Bot nur die Berechtigungen, die er braucht (typischerweise Read/Send Messages).
- Wenn der Bot hängt oder rate-limited ist, starte das Gateway neu (
openclaw gateway --force), nachdem du bestätigt hast, dass kein anderer Prozess die Discord-Session besitzt.