Discord (Bot API)
Status: bereit für DMs und Serverkanäle über das offizielle Discord-Gateway.Pairing
Slash commands
Channel troubleshooting
Schnelle Einrichtung
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 die Zuordnung von Namen zu IDs)
- Presence Intent (optional; nur für Presence-Updates 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
- Klicken Sie mit der rechten Maustaste auf Ihr Serversymbol in der Seitenleiste → Copy Server ID
- Klicken Sie mit der rechten Maustaste auf Ihren eigenen Avatar → Copy User ID
DMs von Servermitgliedern zulassen
Ihren Bot-Token sicher setzen (nicht im Chat senden)
openclaw gateway run neu.OpenClaw konfigurieren und koppeln
- Ask your agent
- 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.“
Erstes DM-Pairing genehmigen
- Ask your agent
- CLI
„Genehmige diesen Discord-Pairing-Code: <CODE>“
DISCORD_BOT_TOKEN wird nur für das Standardkonto verwendet.
Für erweiterte ausgehende Aufrufe (Nachrichten-Tool/Kanalaktionen) wird ein expliziter aufrufbezogener token für diesen Aufruf verwendet. Das gilt für Sende- und Lese-/Probe-artige Aktionen (zum Beispiel read/search/fetch/thread/pins/permissions). Kontorichtlinien und Wiederholungseinstellungen kommen 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 seine 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
- Ask your agent
- Config
„Füge meine Discord Server ID <server_id> zur Server-Allowlist hinzu“
Antworten ohne @mention erlauben
- Ask your agent
- Config
„Erlaube meinem Agenten, auf diesem Server zu antworten, ohne dass er mit @ erwähnt werden muss“
Speichernutzung in Serverkanälen einplanen
MEMORY.md) nur in DM-Sitzungen geladen. Serverkanäle laden MEMORY.md nicht automatisch.- Ask your agent
- Manual
„Wenn ich in Discord-Kanälen Fragen stelle, verwendememory_searchodermemory_get, wenn du Langzeitkontext ausMEMORY.mdbenötigst.“
#coding, #home, #research oder alles einrichten, was zu Ihrem Arbeitsablauf passt.
Runtime-Modell
- Das Gateway verwaltet die Discord-Verbindung.
- Das Antwort-Routing ist deterministisch: Eingehende Discord-Nachrichten werden wieder an Discord beantwortet.
- Standardmäßig (
session.dmScope=main) teilen direkte Chats die Hauptsitzung des Agenten (agent:main:main). - Serverkanäle haben 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>), tragen aber weiterhinCommandTargetSessionKeyzur gerouteten Gesprächssitzung.
Forum-Kanäle
Discord-Forum- und Medienkanäle akzeptieren nur Thread-Beiträge. OpenClaw unterstützt zwei Wege, sie zu erstellen:- Senden Sie eine Nachricht an das Forum-Elternelement (
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 einen Thread direkt zu erstellen. Übergeben Sie für Forum-Kanäle nicht--message-id.
channel:<threadId>).
Interaktive Komponenten
OpenClaw unterstützt Discord-Komponenten-v2-Container für Agentennachrichten. Verwenden Sie das Nachrichten-Tool mit einercomponents-Payload. Interaktionsergebnisse werden als normale eingehende Nachrichten an den Agenten zurückgeleitet 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ü
- Auswahlypen:
string,user,role,mentionable,channel
components.reusable=true, damit Buttons, Auswahlmenüs und Formulare mehrfach verwendet werden können, 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 Modellwähler mit Dropdowns für Provider und Modell sowie einem Submit-Schritt. 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 (eine 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
Zugriffssteuerung und Routing
- DM-Richtlinie
- Serverrichtlinie
- Erwähnungen und Gruppen-DMs
channels.discord.dmPolicy steuert den DM-Zugriff (Legacy: channels.discord.dm.policy):pairing(Standard)allowlistopen(erfordert, dasschannels.discord.allowFrom"*"enthält; Legacy:channels.discord.dm.allowFrom)disabled
pairing zum Pairing aufgefordert).Vorrang bei mehreren Konten:channels.discord.accounts.default.allowFromgilt nur für das Kontodefault.- Benannte Konten übernehmen
channels.discord.allowFrom, wenn ihr eigenesallowFromnicht gesetzt ist. - Benannte Konten übernehmen nicht
channels.discord.accounts.default.allowFrom.
user:<id><@id>-Erwähnung
Rollenbasiertes Agenten-Routing
Verwenden Siebindings[].match.roles, um Discord-Servermitglieder anhand der Rollen-ID an verschiedene Agenten weiterzuleiten. Rollenbasierte Bindings akzeptieren nur Rollen-IDs und werden nach Peer- oder Parent-Peer-Bindings und vor reinen Server-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 Presence-Updates für Mitglieder aktiviert sind.OAuth-Scopes und Basisberechtigungen
OAuth-Scopes und Basisberechtigungen
- Scopes:
bot,applications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (optional)
Administrator, sofern es nicht ausdrücklich erforderlich ist.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=falseentfernt ausdrücklich zuvor registrierte native Discord-Befehle.- Die Authentifizierung nativer Befehle verwendet dieselben Discord-Allowlists/-Richtlinien wie die normale Nachrichtenverarbeitung.
- Befehle können in der Discord-Oberfläche dennoch für Benutzer sichtbar sein, die nicht autorisiert sind; die Ausführung erzwingt weiterhin OpenClaw-Authentifizierung und gibt „not authorized“ zurück.
ephemeral: true
Funktionsdetails
Antwort-Tags und native Antworten
Antwort-Tags und native Antworten
Live-Stream-Vorschau
Live-Stream-Vorschau
channels.discord.streamingsteuert Vorschau-Streaming (off|partial|block|progress, Standard:off).- Standard bleibt
off, weil Discord-Vorschaubearbeitungen schnell an Rate Limits stoßen können, besonders wenn mehrere Bots oder Gateways dasselbe Konto oder denselben Serververkehr teilen. progresswird für kanalübergreifende Konsistenz akzeptiert und in Discord aufpartialabgebildet.channels.discord.streamModeist ein Legacy-Alias und wird automatisch migriert.partialbearbeitet eine einzelne Vorschaunachricht, während Tokens ankommen.blocksendet Entwurfsblöcke in Chunk-Größe (verwenden SiedraftChunk, um Größe und Umbruchpunkte anzupassen).
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 geroutet
- Metadaten des Eltern-Threads können für die Verknüpfung mit der Elternsitzung verwendet werden
- Thread-Konfiguration übernimmt die Konfiguration des Elternkanals, sofern kein thread-spezifischer Eintrag existiert
Thread-gebundene Sitzungen für Subagenten
Thread-gebundene Sitzungen für Subagenten
/focus <target>bindet aktuellen/neuen Thread an ein Subagent-/Sitzungsziel/unfocusentfernt die aktuelle Thread-Bindung/agentszeigt aktive Läufe und Bindungsstatus/session idle <duration|off>prüft/aktualisiert automatische Entfokussierung bei Inaktivität für fokussierte Bindungen/session max-age <duration|off>prüft/aktualisiert das harte maximale Alter für fokussierte Bindungen
session.threadBindings.*setzt globale Standardwerte.channels.discord.threadBindings.*überschreibt das Discord-Verhalten.spawnSubagentSessionsmusstruesein, um Threads fürsessions_spawn({ thread: true })automatisch zu erstellen/zu binden.spawnAcpSessionsmusstruesein, um Threads für ACP (/acp spawn ... --thread ...odersessions_spawn({ runtime: "acp", thread: true })) automatisch zu erstellen/zu binden.- Wenn Thread-Bindungen für ein Konto deaktiviert sind, sind
/focusund verwandte Thread-Bindungsoperationen nicht verfügbar.
Persistente ACP-Kanal-Bindungen
Persistente ACP-Kanal-Bindungen
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 geroutet.- Das kann weiterhin bedeuten: „Eine neue Codex-ACP-Sitzung starten“, aber es erstellt nicht selbst einen neuen Discord-Thread. Der bestehende Kanal bleibt die Chat-Oberfläche.
- Codex kann weiterhin in seinem eigenen
cwdoder Backend-Workspace auf der Festplatte laufen. Dieser Workspace ist Runtime-Zustand, nicht ein Discord-Thread. - Thread-Nachrichten können die ACP-Bindung des Elternkanals übernehmen.
- In einem gebundenen Kanal oder Thread setzen
/newund/resetdieselbe ACP-Sitzung direkt 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.
Reaktionsbenachrichtigungen
Reaktionsbenachrichtigungen
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 durch einen HTTP(S)-Proxy.PluralKit-Unterstützung
PluralKit-Unterstützung
- Allowlists können
pk:<memberId>verwenden - Anzeigenamen von Mitgliedern werden nur nach Name/Slug abgeglichen, wenn
channels.discord.dangerouslyAllowNameMatching: truegesetzt ist - Nachschlagen verwendet die ursprüngliche Nachrichten-ID und ist zeitfensterbegrenzt
- wenn die Nachschlageoperation fehlschlägt, werden geproxte Nachrichten als Bot-Nachrichten behandelt und verworfen, sofern nicht
allowBots=true
Presence-Konfiguration
Presence-Konfiguration
- 0: Playing
- 1: Streaming (erfordert
activityUrl) - 2: Listening
- 3: Watching
- 4: Custom (verwendet den Aktivitätstext als Statuszustand; 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; greift 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 Ausführungsgenehmiger nicht aus kanalbezogenem allowFrom, Legacy-dm.allowFrom oder direktem defaultTo ab. Setzen Sie enabled: false, um Discord explizit als nativen Genehmigungs-Client zu deaktivieren.Wenn target auf channel oder both steht, 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 in Kanälen nur in vertrauenswürdigen Kanälen aktivieren. Wenn die Kanal-ID nicht aus dem Sitzungsschlüssel abgeleitet werden kann, fällt OpenClaw auf DM-Zustellung zurück.Discord rendert außerdem die gemeinsam genutzten Genehmigungs-Buttons, die von anderen Chat-Kanälen verwendet werden. Der native Discord-Adapter ergänzt hauptsächlich Genehmiger-DM-Routing und Kanal-Fanout.
Wenn diese Buttons vorhanden sind, sind sie die primäre Genehmigungs-UX; OpenClaw
sollte einen manuellen /approve-Befehl nur einfügen, wenn das Tool-Ergebnis angibt,
dass Chat-Genehmigungen nicht verfügbar sind oder manuelle Genehmigung der einzige Weg ist.Gateway-Authentifizierung für diesen Handler verwendet denselben gemeinsam genutzten Vertrag zur Auflösung von Anmeldedaten 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 anwendbar - URL-Überschreibungen sind override-sicher: CLI-Überschreibungen verwenden keine impliziten Anmeldedaten wieder, und Env-Überschreibungen verwenden nur Env-Anmeldedaten
- IDs mit Präfix
plugin:werden überplugin.approval.resolveaufgelöst. - Andere IDs werden über
exec.approval.resolveaufgelöst. - Discord führt hier keinen zusätzlichen Exec-zu-Plugin-Fallback aus; das ID-Präfix entscheidet, welche Gateway-Methode aufgerufen wird.
Tools und Action-Gates
Discord-Nachrichtenaktionen umfassen Messaging, Kanaladministration, Moderation, Presence und Metadatenaktionen. Zentrale Beispiele:- Messaging:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - Reaktionen:
react,reactions,emojiList - Moderation:
timeout,kick,ban - Presence:
setPresence
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 Ausführungsgenehmigungen und kanalübergreifende Marker. Discord-Nachrichtenaktionen können auchcomponents für benutzerdefinierte UI akzeptieren (erweitert; erfordert das Erstellen einer Komponenten-Payload über das Discord-Tool), während Legacy-embeds weiterhin verfügbar, aber nicht empfohlen sind.
channels.discord.ui.components.accentColorsetzt die Akzentfarbe, die von Discord-Komponentencontainern verwendet wird (Hex).- Pro Konto festlegen mit
channels.discord.accounts.<id>.ui.components.accentColor. embedswerden ignoriert, wenn components v2 vorhanden sind.
Sprachkanäle
OpenClaw kann Discord-Sprachkanälen für Echtzeit-Gespräche beitreten. Dies ist getrennt von Sprachnachrichtenanhängen. 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 Standardagenten des Kontos und folgt denselben Allowlist- und Serverrichtlinien wie andere Discord-Befehle.
Beispiel für automatischen Beitritt:
voice.ttsüberschreibtmessages.ttsnur für die Sprachwiedergabe.- Sprachtranskript-Turns leiten den Besitzerstatus aus Discord-
allowFrom(oderdm.allowFrom) ab; Sprecher, die keine Besitzer sind, können nicht auf nur für Besitzer bestimmte Tools zugreifen (zum Beispielgatewayundcron). - Voice ist standardmäßig aktiviert; setzen Sie
channels.discord.voice.enabled=false, um es zu deaktivieren. voice.daveEncryptionundvoice.decryptionFailureTolerancewerden an die Join-Optionen von@discordjs/voicedurchgereicht.- Die Standardwerte von
@discordjs/voicesinddaveEncryption=trueunddecryptionFailureTolerance=24, wenn nicht gesetzt. - OpenClaw überwacht außerdem Fehler bei der Empfangsentschlüsselung und stellt die Verbindung automatisch wieder her, indem es den Sprachkanal nach wiederholten Fehlern in einem kurzen Zeitraum verlässt und erneut beitritt.
- Wenn Empfangslogs wiederholt
DecryptionFailed(UnencryptedWhenPassthroughDisabled)anzeigen, könnte dies der Upstream-Fehler von@discordjs/voicesein, der in discord.js #11419 verfolgt wird.
Sprachnachrichten
Discord-Sprachnachrichten zeigen eine Wellenformvorschau und erfordern OGG/Opus-Audio plus Metadaten. OpenClaw erzeugt die Wellenform automatisch, benötigt dafür 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 Textinhalt weg (Discord erlaubt keinen Text zusammen mit einer 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 dem Ändern von Intents neu starten
Servernachrichten werden unerwartet blockiert
Servernachrichten werden unerwartet blockiert
groupPolicyprüfen- Server-Allowlist unter
channels.discord.guildsprüfen - wenn die Server-
channels-Map existiert, sind nur aufgeführte Kanäle erlaubt requireMention-Verhalten und Erwähnungsmuster prüfen
Require mention false, aber trotzdem blockiert
Require mention 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 verursachen Timeouts oder doppelte Antworten
Lang laufende Handler verursachen 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, wenn Sie ein separates Sicherheitsventil für in die Warteschlange eingestellte 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 die Runtime-Zuordnung weiterhin funktionieren, aber die Prüfung kann Berechtigungen nicht vollständig verifizieren.DM- und Pairing-Probleme
DM- und Pairing-Probleme
- DM deaktiviert:
channels.discord.dm.enabled=false - DM-Richtlinie deaktiviert:
channels.discord.dmPolicy="disabled"(Legacy:channels.discord.dm.policy) - wartende Pairing-Genehmigung im Modus
pairing
Bot-zu-Bot-Schleifen
Bot-zu-Bot-Schleifen
channels.discord.allowBots=true setzen, verwenden Sie strikte 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 bricht mit DecryptionFailed(...) ab
Voice-STT bricht mit DecryptionFailed(...) ab
- halten Sie OpenClaw aktuell (
openclaw update), damit die Wiederherstellungslogik für Discord-Spracherfassung vorhanden ist - bestätigen Sie
channels.discord.voice.daveEncryption=true(Standard) - beginnen Sie mit
channels.discord.voice.decryptionFailureTolerance=24(Upstream-Standard) und passen Sie es nur bei Bedarf an - beobachten Sie Logs auf:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- wenn Fehler nach automatischem erneuten Beitritt weiter auftreten, sammeln Sie Logs und vergleichen Sie sie mit discord.js #11419
Hinweise zur Konfigurationsreferenz
Primäre Referenz: Wichtige 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 - Inbound-Worker:
inboundWorker.runTimeoutMs - Antwort/Verlauf:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - Zustellung:
textChunkLimit,chunkMode,maxLinesPerMessage - Streaming:
streaming(Legacy-Alias:streamMode),draftChunk,blockStreaming,blockStreamingCoalesce - Medien/Wiederholung:
mediaMaxMb,retrymediaMaxMbbegrenzt ausgehende Discord-Uploads (Standard:8MB)
- Aktionen:
actions.* - Presence:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - Funktionen:
threadBindings, oberste Ebenebindings[](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 nach dem Prinzip der geringsten Rechte.
- Wenn die Bereitstellung oder der Zustand von Befehlen veraltet ist, starten Sie das Gateway neu und prüfen Sie erneut mit
openclaw channels status --probe.