Discord (Bot API)
Status: bereit für DMs und Serverkanäle über das offizielle Discord-Gateway.Kopplung
Slash-Befehle
Fehlerbehebung für Kanäle
Schnelleinrichtung
Sie müssen eine neue Anwendung mit einem Bot erstellen, den Bot zu Ihrem Server hinzufügen und ihn mit OpenClaw koppeln. Wir empfehlen, Ihren Bot zu Ihrem eigenen privaten Server hinzuzufügen. Wenn Sie noch keinen haben, erstellen Sie zuerst einen (wählen Sie Create My Own > For me and my friends).Eine Discord-Anwendung und einen Bot erstellen
Privilegierte Intents aktivieren
- Message Content Intent (erforderlich)
- Server Members Intent (empfohlen; erforderlich für Rollen-Allowlists und Name-zu-ID-Abgleich)
- Presence Intent (optional; nur für Präsenzaktualisierungen erforderlich)
Ihren Bot-Token kopieren
Eine Einladungs-URL erzeugen und den Bot zu Ihrem Server hinzufügen
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (optional)
Developer Mode aktivieren und Ihre IDs erfassen
- Klicken Sie auf User Settings (Zahnradsymbol neben Ihrem Avatar) → Advanced → aktivieren Sie Developer Mode
- Rechtsklick auf Ihr Serversymbol in der Seitenleiste → Copy Server ID
- Rechtsklick auf Ihren eigenen Avatar → Copy User ID
DMs von Servermitgliedern erlauben
Ihren Bot-Token sicher setzen (nicht im Chat senden)
openclaw gateway run stoppen und erneut starten.OpenClaw konfigurieren und koppeln
- Ihren Agenten fragen
- CLI / config
„Ich habe meinen Discord-Bot-Token bereits in der Konfiguration gesetzt. Bitte schließe die Discord-Einrichtung mit der User ID<user_id>und der Server ID<server_id>ab.“
Erste DM-Kopplung genehmigen
- Ihren Agenten fragen
- CLI
„Genehmige diesen Discord-Kopplungscode: <CODE>“
DISCORD_BOT_TOKEN wird nur für das Standardkonto verwendet.
Für erweiterte ausgehende Aufrufe (message-Tool/Kanalaktionen) wird ein expliziter aufrufbezogener token für diesen Aufruf verwendet. Dies gilt für Sende- sowie Lese-/Probe-Aktionen (zum Beispiel read/search/fetch/thread/pins/permissions). Kontorichtlinien und Wiederholungseinstellungen stammen weiterhin aus dem ausgewählten Konto im aktiven Runtime-Snapshot.Empfohlen: Einen Server-Workspace einrichten
Sobald DMs funktionieren, können Sie Ihren Discord-Server als vollständigen Workspace einrichten, in dem jeder Kanal eine eigene Agentensitzung mit eigenem Kontext erhält. Das wird für private Server empfohlen, auf denen nur Sie und Ihr Bot sind.Ihren Server zur Server-Allowlist hinzufügen
- Ihren Agenten fragen
- Konfiguration
„Füge meine Discord Server ID <server_id> zur Server-Allowlist hinzu“
Antworten ohne @Erwähnung erlauben
- Ihren Agenten fragen
- Konfiguration
„Erlaube meinem Agenten, auf diesem Server zu antworten, ohne dass er mit @ erwähnt werden muss“
Speichernutzung in Serverkanälen planen
MEMORY.md) nur in DM-Sitzungen geladen. In Serverkanälen wird MEMORY.md nicht automatisch geladen.- Ihren Agenten fragen
- Manuell
„Wenn ich in Discord-Kanälen Fragen stelle, verwende memory_search oder memory_get, wenn du Langzeitkontext aus MEMORY.md benötigst.“
#coding, #home, #research oder was auch immer zu Ihrem Workflow passt einrichten.
Laufzeitmodell
- Das Gateway besitzt die Discord-Verbindung.
- Die Antwortweiterleitung ist deterministisch: Eingehende Discord-Antworten gehen zurück an Discord.
- Standardmäßig (
session.dmScope=main) teilen sich Direktchats die Hauptsitzung des Agenten (agent:main:main). - Serverkanäle sind isolierte Sitzungsschlüssel (
agent:<agentId>:discord:channel:<channelId>). - Gruppen-DMs werden standardmäßig ignoriert (
channels.discord.dm.groupEnabled=false). - Native Slash-Befehle laufen in isolierten Befehlssitzungen (
agent:<agentId>:discord:slash:<userId>), führen aber weiterhinCommandTargetSessionKeyzur weitergeleiteten Konversationssitzung mit.
Forumskanäle
Discord-Forum- und Medienkanäle akzeptieren nur Thread-Beiträge. OpenClaw unterstützt zwei Möglichkeiten, sie zu erstellen:- Senden Sie eine Nachricht an das Forum-Parent (
channel:<forumId>), um automatisch einen Thread zu erstellen. Der Thread-Titel verwendet die erste nicht leere Zeile Ihrer Nachricht. - Verwenden Sie
openclaw message thread create, um direkt einen Thread zu erstellen. Übergeben Sie für Forumskanäle nicht--message-id.
channel:<threadId>).
Interaktive Komponenten
OpenClaw unterstützt Discord-Komponenten-v2-Container für Agentennachrichten. Verwenden Sie das message-Tool mit einercomponents-Payload. Interaktionsergebnisse werden als normale eingehende Nachrichten zurück an den Agenten geleitet und folgen den vorhandenen Discord-Einstellungen für replyToMode.
Unterstützte Blöcke:
text,section,separator,actions,media-gallery,file- Aktionszeilen erlauben bis zu 5 Buttons oder ein einzelnes Auswahlmenü
- Auswahltypen:
string,user,role,mentionable,channel
components.reusable=true, um Buttons, Auswahlen und Formulare mehrfach verwendbar zu machen, bis sie ablaufen.
Um einzuschränken, wer auf einen Button klicken kann, setzen Sie allowedUsers auf diesem Button (Discord-Benutzer-IDs, Tags oder *). Wenn dies konfiguriert ist, erhalten nicht passende Benutzer eine ephemere Ablehnung.
Die Slash-Befehle /model und /models öffnen einen interaktiven Modellauswähler mit Dropdowns für Provider und Modell sowie einem Schritt zum Absenden. Die Antwort des Auswählers ist ephemer, und nur der aufrufende Benutzer kann sie verwenden.
Dateianhänge:
file-Blöcke müssen auf eine Anhangsreferenz zeigen (attachment://<filename>)- Stellen Sie den Anhang über
media/path/filePathbereit (einzelne Datei); verwenden Siemedia-galleryfür mehrere Dateien - Verwenden Sie
filename, um den Upload-Namen zu überschreiben, wenn er mit der Anhangsreferenz übereinstimmen soll
- Fügen Sie
components.modalmit bis zu 5 Feldern hinzu - Feldtypen:
text,checkbox,radio,select,role-select,user-select - OpenClaw fügt automatisch einen Auslöse-Button hinzu
Zugriffskontrolle und Routing
- DM-Richtlinie
- Serverrichtlinie
- Erwähnungen und Gruppen-DMs
channels.discord.dmPolicy steuert den DM-Zugriff (veraltet: channels.discord.dm.policy):pairing(Standard)allowlistopen(erfordert, dasschannels.discord.allowFrom"*"enthält; veraltet:channels.discord.dm.allowFrom)disabled
pairing zur Kopplung aufgefordert).Vorrang bei mehreren Konten:channels.discord.accounts.default.allowFromgilt nur für dasdefault-Konto.- Benannte Konten erben
channels.discord.allowFrom, wenn ihr eigenesallowFromnicht gesetzt ist. - Benannte Konten erben nicht
channels.discord.accounts.default.allowFrom.
user:<id><@id>-Erwähnung
Rollenbasiertes Agenten-Routing
Verwenden Siebindings[].match.roles, um Discord-Servermitglieder anhand ihrer Rollen-ID an unterschiedliche Agenten weiterzuleiten. Rollenbasierte Bindings akzeptieren nur Rollen-IDs und werden nach Peer- oder Parent-Peer-Bindings und vor rein serverbasierten Bindings ausgewertet. Wenn ein Binding auch andere Match-Felder setzt (zum Beispiel peer + guildId + roles), müssen alle konfigurierten Felder übereinstimmen.
Einrichtung im Developer Portal
App und Bot erstellen
App und Bot erstellen
- Discord Developer Portal -> Applications -> New Application
- Bot -> Add Bot
- Bot-Token kopieren
Privilegierte Intents
Privilegierte Intents
- Message Content Intent
- Server Members Intent (empfohlen)
setPresence) erfordert nicht, dass Präsenzaktualisierungen für Mitglieder aktiviert sind.OAuth-Scopes und grundlegende Berechtigungen
OAuth-Scopes und grundlegende Berechtigungen
- Scopes:
bot,applications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (optional)
Administrator, sofern es nicht ausdrücklich benötigt wird.IDs kopieren
IDs kopieren
- Server-ID
- Kanal-ID
- Benutzer-ID
Native Befehle und Befehlsauthentifizierung
commands.nativeist standardmäßig"auto"und für Discord aktiviert.- Kanalbezogene Überschreibung:
channels.discord.commands.native. commands.native=falselöscht explizit zuvor registrierte native Discord-Befehle.- Die Authentifizierung nativer Befehle verwendet dieselben Discord-Allowlists/-Richtlinien wie die normale Nachrichtenverarbeitung.
- Befehle können in der Discord-Benutzeroberfläche weiterhin für Benutzer sichtbar sein, die nicht autorisiert sind; die Ausführung erzwingt dennoch die OpenClaw-Authentifizierung und gibt „nicht autorisiert“ zurück.
ephemeral: true
Funktionsdetails
Antwort-Tags und native Antworten
Antwort-Tags und native Antworten
Vorschau für Live-Streaming
Vorschau für Live-Streaming
channels.discord.streamingsteuert Vorschau-Streaming (off|partial|block|progress, Standard:off).- Der Standard bleibt
off, weil Discord-Vorschau-Bearbeitungen schnell an Ratenlimits stoßen können, insbesondere wenn mehrere Bots oder Gateways dasselbe Konto oder denselben Serververkehr teilen. progresswird zur kanalübergreifenden Konsistenz akzeptiert und in Discord aufpartialabgebildet.channels.discord.streamModeist ein veralteter Alias und wird automatisch migriert.partialbearbeitet eine einzelne Vorschau-Nachricht, wenn Tokens eintreffen.blocksendet Entwurfsblöcke in Chunk-Größe (verwenden SiedraftChunk, um Größe und Trennpunkte abzustimmen).
block (begrenzt durch channels.discord.textChunkLimit):Verlauf, Kontext und Thread-Verhalten
Verlauf, Kontext und Thread-Verhalten
channels.discord.historyLimitStandard20- Fallback:
messages.groupChat.historyLimit 0deaktiviert
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord-Threads werden als Kanalsitzungen weitergeleitet
- Parent-Thread-Metadaten können für eine Verknüpfung zur übergeordneten Sitzung verwendet werden
- Thread-Konfiguration erbt die Konfiguration des Parent-Kanals, sofern kein threadspezifischer Eintrag vorhanden ist
Thread-gebundene Sitzungen für Subagenten
Thread-gebundene Sitzungen für Subagenten
/focus <target>bindet den aktuellen/neuen Thread an ein Subagent-/Sitzungsziel/unfocusentfernt die aktuelle Thread-Bindung/agentszeigt aktive Läufe und den Bindungsstatus/session idle <duration|off>prüft/aktualisiert das automatische Lösen des Fokus bei Inaktivität für fokussierte Bindungen/session max-age <duration|off>prüft/aktualisiert das harte Maximalalter für fokussierte Bindungen
session.threadBindings.*setzt globale Standardwerte.channels.discord.threadBindings.*überschreibt das Discord-Verhalten.spawnSubagentSessionsmusstruesein, damit Threads fürsessions_spawn({ thread: true })automatisch erstellt/gebunden werden.spawnAcpSessionsmusstruesein, damit Threads für ACP automatisch erstellt/gebunden werden (/acp spawn ... --thread ...odersessions_spawn({ runtime: "acp", thread: true })).- Wenn Thread-Bindungen für ein Konto deaktiviert sind, sind
/focusund verwandte Operationen für Thread-Bindungen nicht verfügbar.
Persistente ACP-Kanalbindungen
Persistente ACP-Kanalbindungen
bindings[]mittype: "acp"undmatch.channel: "discord"
/acp spawn codex --bind herebindet den aktuellen Discord-Kanal oder Thread direkt vor Ort und hält zukünftige Nachrichten an dieselbe ACP-Sitzung gebunden.- Das kann weiterhin bedeuten: „Eine frische Codex-ACP-Sitzung starten“, aber es wird dadurch nicht von selbst ein neuer Discord-Thread erstellt. Der bestehende Kanal bleibt die Chat-Oberfläche.
- Codex kann weiterhin in seinem eigenen
cwdoder Backend-Workspace auf dem Datenträger laufen. Dieser Workspace ist Laufzeitzustand, kein Discord-Thread. - Thread-Nachrichten können die ACP-Bindung des Parent-Kanals erben.
- In einem gebundenen Kanal oder Thread setzen
/newund/resetdieselbe ACP-Sitzung direkt vor Ort zurück. - Temporäre Thread-Bindungen funktionieren weiterhin und können die Zielauflösung überschreiben, solange sie aktiv sind.
spawnAcpSessionsist nur erforderlich, wenn OpenClaw einen untergeordneten Thread über--thread auto|hereerstellen/binden muss. Es ist nicht erforderlich für/acp spawn ... --bind hereim aktuellen Kanal.
Benachrichtigungen für Reaktionen
Benachrichtigungen für Reaktionen
offown(Standard)allallowlist(verwendetguilds.<id>.users)
Bestätigungsreaktionen
Bestätigungsreaktionen
ackReaction sendet ein Bestätigungs-Emoji, während OpenClaw eine eingehende Nachricht verarbeitet.Auflösungsreihenfolge:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- Emoji-Fallback der Agentenidentität (
agents.list[].identity.emoji, sonst ”👀”)
- Discord akzeptiert Unicode-Emojis oder benutzerdefinierte Emoji-Namen.
- Verwenden Sie
"", um die Reaktion für einen Kanal oder ein Konto zu deaktivieren.
Konfigurationsschreibvorgänge
Konfigurationsschreibvorgänge
/config set|unset (wenn Befehlsfunktionen aktiviert sind).Deaktivieren:Gateway-Proxy
Gateway-Proxy
channels.discord.proxy über einen HTTP(S)-Proxy.PluralKit-Unterstützung
PluralKit-Unterstützung
- Allowlists können
pk:<memberId>verwenden - Anzeigenamen von Mitgliedern werden nur dann nach Name/Slug abgeglichen, wenn
channels.discord.dangerouslyAllowNameMatching: truegesetzt ist - Abfragen verwenden die ursprüngliche Nachrichten-ID und sind auf ein Zeitfenster begrenzt
- wenn die Abfrage fehlschlägt, werden weitergeleitete Nachrichten als Bot-Nachrichten behandelt und verworfen, sofern nicht
allowBots=true
Präsenzkonfiguration
Präsenzkonfiguration
- 0: Playing
- 1: Streaming (erfordert
activityUrl) - 2: Listening
- 3: Watching
- 4: Custom (verwendet den Aktivitätstext als Statusstatus; Emoji ist optional)
- 5: Competing
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(unterstützt Platzhalter{reason})
Genehmigungen in Discord
Genehmigungen in Discord
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(optional; fällt nach Möglichkeit aufcommands.ownerAllowFromzurück)channels.discord.execApprovals.target(dm|channel|both, Standard:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled nicht gesetzt oder "auto" ist und mindestens ein Genehmiger aufgelöst werden kann, entweder aus execApprovals.approvers oder aus commands.ownerAllowFrom. Discord leitet Exec-Genehmiger nicht aus kanalbezogenem allowFrom, veraltetem dm.allowFrom oder direktem defaultTo für Direktnachrichten ab. Setzen Sie enabled: false, um Discord explizit als nativen Genehmigungs-Client zu deaktivieren.Wenn target den Wert channel oder both hat, ist die Genehmigungsaufforderung im Kanal sichtbar. Nur aufgelöste Genehmiger können die Buttons verwenden; andere Benutzer erhalten eine ephemere Ablehnung. Genehmigungsaufforderungen enthalten den Befehlstext, daher sollten Sie die Zustellung im Kanal nur in vertrauenswürdigen Kanälen aktivieren. Wenn die Kanal-ID nicht aus dem Sitzungsschlüssel abgeleitet werden kann, verwendet OpenClaw stattdessen die Zustellung per DM.Discord rendert auch die gemeinsamen Genehmigungsbuttons, die von anderen Chat-Kanälen verwendet werden. Der native Discord-Adapter fügt hauptsächlich das DM-Routing für Genehmiger und die Verteilung an Kanäle hinzu.
Wenn diese Buttons vorhanden sind, sind sie die primäre UX für Genehmigungen; OpenClaw
sollte einen manuellen /approve-Befehl nur dann einschließen, wenn das Tool-Ergebnis angibt,
dass Chat-Genehmigungen nicht verfügbar sind oder nur eine manuelle Genehmigung möglich ist.Die Gateway-Authentifizierung für diesen Handler verwendet denselben gemeinsamen Vertrag zur Anmeldedatenauflösung wie andere Gateway-Clients:- env-first-lokale Authentifizierung (
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORDdanngateway.auth.*) - im lokalen Modus kann
gateway.remote.*nur dann als Fallback verwendet werden, wenngateway.auth.*nicht gesetzt ist; konfigurierte, aber nicht aufgelöste lokale SecretRefs schlagen geschlossen fehl - Unterstützung für den Remote-Modus über
gateway.remote.*, wenn zutreffend - URL-Überschreibungen sind Override-sicher: CLI-Überschreibungen verwenden keine impliziten Anmeldedaten wieder, und Env-Überschreibungen verwenden nur Env-Anmeldedaten
- Mit
plugin:präfixierte IDs werden überplugin.approval.resolveaufgelöst. - Andere IDs werden über
exec.approval.resolveaufgelöst. - Discord führt hier keinen zusätzlichen Exec-zu-Plugin-Fallback durch; das ID-Präfix entscheidet, welche Gateway-Methode aufgerufen wird.
Tools und Action Gates
Discord-Nachrichtenaktionen umfassen Messaging, Kanaladministration, Moderation, Präsenz und Metadatenaktionen. Zentrale Beispiele:- Messaging:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - Reaktionen:
react,reactions,emojiList - Moderation:
timeout,kick,ban - Präsenz:
setPresence
event-create akzeptiert einen optionalen Parameter image (URL oder lokaler Dateipfad), um das Titelbild des geplanten Ereignisses festzulegen.
Action Gates befinden sich unter channels.discord.actions.*.
Standardverhalten der Gates:
| Action group | Standard |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | aktiviert |
| roles | deaktiviert |
| moderation | deaktiviert |
| presence | deaktiviert |
Components v2 UI
OpenClaw verwendet Discord components v2 für Exec-Genehmigungen und kanalübergreifende Markierungen. Discord-Nachrichtenaktionen können auchcomponents für benutzerdefinierte UI akzeptieren (fortgeschritten; erfordert das Erstellen einer Komponenten-Payload über das Discord-Tool), während veraltete embeds weiterhin verfügbar sind, aber nicht empfohlen werden.
channels.discord.ui.components.accentColorsetzt die Akzentfarbe, die von Discord-Komponentencontainern verwendet wird (hex).- Pro Konto mit
channels.discord.accounts.<id>.ui.components.accentColorsetzen. embedswerden ignoriert, wenn components v2 vorhanden sind.
Sprachkanäle
OpenClaw kann Discord-Sprachkanälen für Echtzeitgespräche mit kontinuierlicher Interaktion beitreten. Dies ist von Anhängen mit Sprachnachrichten getrennt. Anforderungen:- Aktivieren Sie native Befehle (
commands.nativeoderchannels.discord.commands.native). - Konfigurieren Sie
channels.discord.voice. - Der Bot benötigt die Berechtigungen Connect + Speak im Ziel-Sprachkanal.
/vc join|leave|status, um Sitzungen zu steuern. Der Befehl verwendet den Standard-Agenten des Kontos und folgt denselben Allowlist- und Gruppenrichtlinienregeln wie andere Discord-Befehle.
Beispiel für automatischen Beitritt:
voice.ttsüberschreibtmessages.ttsnur für die Sprachausgabe.- Sprach-Transkript-Turns leiten den Eigentümerstatus aus Discord
allowFrom(oderdm.allowFrom) ab; Sprecher ohne Eigentümerstatus können nicht auf Tools zugreifen, die nur Eigentümern vorbehalten sind (zum Beispielgatewayundcron). - Voice ist standardmäßig aktiviert; setzen Sie
channels.discord.voice.enabled=false, um sie zu deaktivieren. voice.daveEncryptionundvoice.decryptionFailureTolerancewerden an die Join-Optionen von@discordjs/voicedurchgereicht.- Die Standardwerte von
@discordjs/voicesinddaveEncryption=trueunddecryptionFailureTolerance=24, wenn sie nicht gesetzt sind. - OpenClaw überwacht außerdem Entschlüsselungsfehler beim Empfang und stellt sich nach wiederholten Fehlern in einem kurzen Zeitfenster automatisch wieder her, indem der Sprachkanal verlassen und erneut betreten wird.
- Wenn Empfangslogs wiederholt
DecryptionFailed(UnencryptedWhenPassthroughDisabled)anzeigen, könnte dies der Upstream-Receive-Bug von@discordjs/voicesein, der in discord.js #11419 verfolgt wird.
Sprachnachrichten
Discord-Sprachnachrichten zeigen eine Wellenformvorschau an und erfordern OGG/Opus-Audio plus Metadaten. OpenClaw erzeugt die Wellenform automatisch, benötigt aberffmpeg und ffprobe, die auf dem Gateway-Host verfügbar sein müssen, um Audiodateien zu prüfen und zu konvertieren.
Anforderungen und Einschränkungen:
- Geben Sie einen lokalen Dateipfad an (URLs werden abgelehnt).
- Lassen Sie Textinhalte weg (Discord erlaubt nicht Text + Sprachnachricht in derselben Payload).
- Jedes Audioformat wird akzeptiert; OpenClaw konvertiert bei Bedarf in OGG/Opus.
Fehlerbehebung
Nicht erlaubte Intents verwendet oder Bot sieht keine Servernachrichten
Nicht erlaubte Intents verwendet oder Bot sieht keine Servernachrichten
- Message Content Intent aktivieren
- Server Members Intent aktivieren, wenn Sie von Benutzer-/Mitgliederauflösung abhängen
- Gateway nach Änderung der Intents neu starten
Servernachrichten unerwartet blockiert
Servernachrichten unerwartet blockiert
groupPolicyprüfen- Server-Allowlist unter
channels.discord.guildsprüfen - wenn eine
channels-Zuordnung für den Server existiert, sind nur aufgelistete Kanäle erlaubt - Verhalten von
requireMentionund Erwähnungsmustern prüfen
requireMention false, aber trotzdem blockiert
requireMention false, aber trotzdem blockiert
groupPolicy="allowlist"ohne passende Server-/Kanal-AllowlistrequireMentionan der falschen Stelle konfiguriert (muss unterchannels.discord.guildsoder im Kanaleintrag stehen)- Absender durch Server-/Kanal-
users-Allowlist blockiert
Lang laufende Handler haben Timeouts oder doppelte Antworten
Lang laufende Handler haben Timeouts oder doppelte Antworten
Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATESlow listener detected ...discord inbound worker timed out after ...
- Einzelkonto:
channels.discord.eventQueue.listenerTimeout - mehrere Konten:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout
- Einzelkonto:
channels.discord.inboundWorker.runTimeoutMs - mehrere Konten:
channels.discord.accounts.<accountId>.inboundWorker.runTimeoutMs - Standard:
1800000(30 Minuten); setzen Sie0, um zu deaktivieren
eventQueue.listenerTimeout für langsame Listener-Einrichtung und inboundWorker.runTimeoutMs
nur dann, wenn Sie ein separates Sicherheitsventil für in die Warteschlange gestellte Agenten-Turns möchten.Abweichungen bei Berechtigungs-Audits
Abweichungen bei Berechtigungs-Audits
channels status --probe funktionieren nur für numerische Kanal-IDs.Wenn Sie Slug-Schlüssel verwenden, kann das Runtime-Matching weiterhin funktionieren, aber die Probe kann die Berechtigungen nicht vollständig überprüfen.Probleme mit DM und Kopplung
Probleme mit DM und Kopplung
- DM deaktiviert:
channels.discord.dm.enabled=false - DM-Richtlinie deaktiviert:
channels.discord.dmPolicy="disabled"(veraltet:channels.discord.dm.policy) - im Modus
pairingwird auf Genehmigung der Kopplung gewartet
Bot-zu-Bot-Schleifen
Bot-zu-Bot-Schleifen
channels.discord.allowBots=true setzen, verwenden Sie strenge Erwähnungs- und Allowlist-Regeln, um Schleifenverhalten zu vermeiden.
Bevorzugen Sie channels.discord.allowBots="mentions", um nur Bot-Nachrichten zu akzeptieren, die den Bot erwähnen.Voice-STT-Aussetzer mit DecryptionFailed(...)
Voice-STT-Aussetzer mit DecryptionFailed(...)
- halten Sie OpenClaw aktuell (
openclaw update), damit die Wiederherstellungslogik für den Empfang von Discord-Voice vorhanden ist - bestätigen Sie
channels.discord.voice.daveEncryption=true(Standard) - beginnen Sie mit
channels.discord.voice.decryptionFailureTolerance=24(Upstream-Standard) und passen Sie nur bei Bedarf an - beobachten Sie die Logs auf:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- wenn die Fehler nach automatischem erneuten Beitritt weiterhin auftreten, sammeln Sie Logs und vergleichen Sie sie mit discord.js #11419
Verweise auf die Konfigurationsreferenz
Primäre Referenz: Signalstarke Discord-Felder:- Start/Auth:
enabled,token,accounts.*,allowBots - Richtlinie:
groupPolicy,dm.*,guilds.*,guilds.*.channels.* - Befehl:
commands.native,commands.useAccessGroups,configWrites,slashCommand.* - Ereigniswarteschlange:
eventQueue.listenerTimeout(Listener-Budget),eventQueue.maxQueueSize,eventQueue.maxConcurrency - Eingangs-Worker:
inboundWorker.runTimeoutMs - Antwort/Verlauf:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - Zustellung:
textChunkLimit,chunkMode,maxLinesPerMessage - Streaming:
streaming(veralteter Alias:streamMode),draftChunk,blockStreaming,blockStreamingCoalesce - Medien/Wiederholung:
mediaMaxMb,retrymediaMaxMbbegrenzt ausgehende Discord-Uploads (Standard:100MB)
- Aktionen:
actions.* - Präsenz:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - Funktionen:
threadBindings, oberstesbindings[](type: "acp"),pluralkit,execApprovals,intents,agentComponents,heartbeat,responsePrefix
Sicherheit und Betrieb
- Behandeln Sie Bot-Tokens als Geheimnisse (
DISCORD_BOT_TOKENwird in überwachten Umgebungen bevorzugt). - Gewähren Sie Discord-Berechtigungen mit minimalen Rechten.
- Wenn der Befehlsbereitstellungs-/Statuszustand veraltet ist, starten Sie das Gateway neu und prüfen Sie mit
openclaw channels status --probeerneut.