Discord (Bot API)
Status: gotowy do DM-ów i kanałów serwera za pośrednictwem oficjalnej bramy Discord.Parowanie
Polecenia ukośnikowe
Rozwiązywanie problemów z kanałami
Szybka konfiguracja
Musisz utworzyć nową aplikację z botem, dodać bota do swojego serwera i sparować go z OpenClaw. Zalecamy dodanie bota do własnego prywatnego serwera. Jeśli jeszcze go nie masz, najpierw utwórz serwer (wybierz Create My Own > For me and my friends).Utwórz aplikację Discord i bota
Włącz uprzywilejowane intents
- Message Content Intent (wymagane)
- Server Members Intent (zalecane; wymagane dla list dozwolonych ról i dopasowywania nazw do ID)
- Presence Intent (opcjonalne; potrzebne tylko do aktualizacji obecności)
Skopiuj token bota
Wygeneruj URL zaproszenia i dodaj bota do swojego serwera
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (opcjonalnie)
Włącz tryb deweloperski i zbierz swoje ID
- Kliknij User Settings (ikona koła zębatego obok avatara) → Advanced → włącz Developer Mode
- Kliknij prawym przyciskiem myszy ikonę serwera na pasku bocznym → Copy Server ID
- Kliknij prawym przyciskiem myszy swój własny avatar → Copy User ID
Zezwól na DM-y od członków serwera
Ustaw bezpiecznie token bota (nie wysyłaj go na czacie)
openclaw gateway run.Skonfiguruj OpenClaw i sparuj
- Zapytaj swojego agenta
- CLI / config
„Ustawiłem już token mojego bota Discord w konfiguracji. Dokończ proszę konfigurację Discord z User ID<user_id>i Server ID<server_id>.”
Zatwierdź pierwsze parowanie DM
- Zapytaj swojego agenta
- CLI
„Zatwierdź ten kod parowania Discord: <CODE>”
DISCORD_BOT_TOKEN jest używany tylko dla konta domyślnego.
W przypadku zaawansowanych wywołań wychodzących (narzędzie wiadomości/działania kanału) jawny token dla wywołania jest używany dla tego wywołania. Dotyczy to działań typu send oraz read/probe (na przykład read/search/fetch/thread/pins/permissions). Zasady konta i ustawienia ponawiania nadal pochodzą z wybranego konta w aktywnej migawce środowiska uruchomieniowego.Zalecane: skonfiguruj przestrzeń roboczą serwera
Gdy DM-y już działają, możesz skonfigurować swój serwer Discord jako pełną przestrzeń roboczą, w której każdy kanał ma własną sesję agenta z własnym kontekstem. Jest to zalecane dla prywatnych serwerów, na których jesteś tylko Ty i Twój bot.Dodaj swój serwer do listy dozwolonych serwerów
- Zapytaj swojego agenta
- Config
„Dodaj moje Discord Server ID <server_id> do listy dozwolonych serwerów”
Zezwól na odpowiedzi bez @wzmianki
- Zapytaj swojego agenta
- Config
„Pozwól mojemu agentowi odpowiadać na tym serwerze bez konieczności oznaczania go przez @mention”
Zaplanuj pamięć na kanałach serwera
MEMORY.md) jest ładowana tylko w sesjach DM. Kanały serwera nie ładują automatycznie MEMORY.md.- Zapytaj swojego agenta
- Ręcznie
„Gdy zadaję pytania na kanałach Discord, używajmemory_searchlubmemory_get, jeśli potrzebujesz długoterminowego kontekstu zMEMORY.md.”
#coding, #home, #research lub inne kanały pasujące do Twojego przepływu pracy.
Model działania środowiska uruchomieniowego
- Brama zarządza połączeniem z Discord.
- Trasowanie odpowiedzi jest deterministyczne: przychodzące odpowiedzi z Discord wracają do Discord.
- Domyślnie (
session.dmScope=main) rozmowy bezpośrednie współdzielą główną sesję agenta (agent:main:main). - Kanały serwera mają izolowane klucze sesji (
agent:<agentId>:discord:channel:<channelId>). - Grupowe DM-y są domyślnie ignorowane (
channels.discord.dm.groupEnabled=false). - Natywne polecenia ukośnikowe działają w izolowanych sesjach poleceń (
agent:<agentId>:discord:slash:<userId>), jednocześnie przenoszącCommandTargetSessionKeydo trasowanej sesji rozmowy.
Kanały forum
Kanały forum i media w Discord akceptują tylko posty w wątkach. OpenClaw obsługuje dwa sposoby ich tworzenia:- Wyślij wiadomość do nadrzędnego forum (
channel:<forumId>), aby automatycznie utworzyć wątek. Tytuł wątku używa pierwszej niepustej linii wiadomości. - Użyj
openclaw message thread create, aby utworzyć wątek bezpośrednio. Nie przekazuj--message-iddla kanałów forum.
channel:<threadId>).
Komponenty interaktywne
OpenClaw obsługuje kontenery komponentów Discord v2 dla wiadomości agenta. Użyj narzędzia wiadomości z ładunkiemcomponents. Wyniki interakcji są kierowane z powrotem do agenta jako zwykłe wiadomości przychodzące i podążają za istniejącymi ustawieniami Discord replyToMode.
Obsługiwane bloki:
text,section,separator,actions,media-gallery,file- Wiersze akcji pozwalają na maksymalnie 5 przycisków lub jedno menu wyboru
- Typy wyboru:
string,user,role,mentionable,channel
components.reusable=true, aby umożliwić wielokrotne użycie przycisków, selektorów i formularzy do czasu ich wygaśnięcia.
Aby ograniczyć, kto może kliknąć przycisk, ustaw allowedUsers dla tego przycisku (ID użytkowników Discord, tagi lub *). Po skonfigurowaniu niedopasowani użytkownicy otrzymują efemeryczną odmowę.
Polecenia ukośnikowe /model i /models otwierają interaktywny selektor modeli z listami rozwijanymi providera i modelu oraz krokiem Submit. Odpowiedź selektora jest efemeryczna i tylko użytkownik, który go wywołał, może z niego korzystać.
Załączniki plików:
- bloki
filemuszą wskazywać referencję załącznika (attachment://<filename>) - przekaż załącznik przez
media/path/filePath(pojedynczy plik); użyjmedia-gallerydla wielu plików - użyj
filename, aby nadpisać nazwę przesyłanego pliku, gdy powinna odpowiadać referencji załącznika
- Dodaj
components.modalz maksymalnie 5 polami - Typy pól:
text,checkbox,radio,select,role-select,user-select - OpenClaw automatycznie dodaje przycisk wyzwalający
Kontrola dostępu i trasowanie
- Zasady DM
- Zasady serwera
- Wzmianki i grupowe DM-y
channels.discord.dmPolicy kontroluje dostęp do DM-ów (starsze: channels.discord.dm.policy):pairing(domyślnie)allowlistopen(wymaga, abychannels.discord.allowFromzawierało"*"; starsze:channels.discord.dm.allowFrom)disabled
pairing).Pierwszeństwo dla wielu kont:channels.discord.accounts.default.allowFromdotyczy tylko kontadefault.- Nazwane konta dziedziczą
channels.discord.allowFrom, gdy ich własneallowFromnie jest ustawione. - Nazwane konta nie dziedziczą
channels.discord.accounts.default.allowFrom.
user:<id>- wzmianka
<@id>
Trasowanie agentów oparte na rolach
Użyjbindings[].match.roles, aby kierować członków serwera Discord do różnych agentów na podstawie ID ról. Powiązania oparte na rolach akceptują tylko ID ról i są oceniane po powiązaniach peer lub parent-peer, a przed powiązaniami tylko dla serwera. Jeśli powiązanie ustawia też inne pola dopasowania (na przykład peer + guildId + roles), wszystkie skonfigurowane pola muszą pasować.
Konfiguracja Developer Portal
Utwórz aplikację i bota
Utwórz aplikację i bota
- Discord Developer Portal -> Applications -> New Application
- Bot -> Add Bot
- Skopiuj token bota
Uprzywilejowane intents
Uprzywilejowane intents
- Message Content Intent
- Server Members Intent (zalecane)
setPresence) nie wymaga włączania aktualizacji obecności dla członków.Zakresy OAuth i bazowe uprawnienia
Zakresy OAuth i bazowe uprawnienia
- zakresy:
bot,applications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (opcjonalnie)
Administrator, chyba że jest jawnie potrzebne.Skopiuj ID
Skopiuj ID
- ID serwera
- ID kanału
- ID użytkownika
Natywne polecenia i autoryzacja poleceń
commands.nativedomyślnie ma wartość"auto"i jest włączone dla Discord.- Nadpisanie per kanał:
channels.discord.commands.native. commands.native=falsejawnie czyści wcześniej zarejestrowane natywne polecenia Discord.- Autoryzacja natywnych poleceń używa tych samych list dozwolonych i zasad Discord co zwykła obsługa wiadomości.
- Polecenia mogą być nadal widoczne w interfejsie Discord dla użytkowników bez uprawnień; wykonanie nadal wymusza autoryzację OpenClaw i zwraca „not authorized”.
ephemeral: true
Szczegóły funkcji
Tagi odpowiedzi i natywne odpowiedzi
Tagi odpowiedzi i natywne odpowiedzi
[[reply_to_current]][[reply_to:<id>]]
channels.discord.replyToMode:off(domyślnie)firstall
off wyłącza niejawne wątkowanie odpowiedzi. Jawne tagi [[reply_to_*]] są nadal respektowane.ID wiadomości są udostępniane w kontekście/historii, dzięki czemu agenci mogą kierować odpowiedzi do konkretnych wiadomości.Podgląd transmisji na żywo
Podgląd transmisji na żywo
channels.discord.streamingkontroluje strumieniowanie podglądu (off|partial|block|progress, domyślnie:off).- Domyślna wartość pozostaje
off, ponieważ edycje podglądu w Discord mogą szybko trafić na limity szybkości, szczególnie gdy wiele botów lub bram współdzieli to samo konto albo ruch serwera. progressjest akceptowane dla spójności międzykanałowej i w Discord jest mapowane napartial.channels.discord.streamModeto starszy alias i jest automatycznie migrowany.partialedytuje jedną wiadomość podglądu w miarę napływu tokenów.blockwysyła fragmenty o rozmiarze szkicu (użyjdraftChunk, aby dostroić rozmiar i punkty podziału).
block (ograniczone do channels.discord.textChunkLimit):Historia, kontekst i zachowanie wątków
Historia, kontekst i zachowanie wątków
channels.discord.historyLimitdomyślnie20- fallback:
messages.groupChat.historyLimit 0wyłącza
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Wątki Discord są trasowane jako sesje kanałów
- metadane wątku nadrzędnego mogą być używane do powiązania z sesją nadrzędną
- konfiguracja wątku dziedziczy konfigurację kanału nadrzędnego, chyba że istnieje wpis specyficzny dla wątku
Sesje powiązane z wątkiem dla subagentów
Sesje powiązane z wątkiem dla subagentów
/focus <target>powiąż bieżący/nowy wątek z celem subagenta/sesji/unfocususuń bieżące powiązanie wątku/agentspokaż aktywne przebiegi i stan powiązań/session idle <duration|off>sprawdź/zaktualizuj automatyczne odwiązywanie po bezczynności dla skupionych powiązań/session max-age <duration|off>sprawdź/zaktualizuj twardy maksymalny wiek dla skupionych powiązań
session.threadBindings.*ustawia globalne wartości domyślne.channels.discord.threadBindings.*nadpisuje zachowanie Discord.spawnSubagentSessionsmusi mieć wartość true, aby automatycznie tworzyć/powiązywać wątki dlasessions_spawn({ thread: true }).spawnAcpSessionsmusi mieć wartość true, aby automatycznie tworzyć/powiązywać wątki dla ACP (/acp spawn ... --thread ...lubsessions_spawn({ runtime: "acp", thread: true })).- Jeśli powiązania wątków są wyłączone dla konta,
/focusi powiązane operacje powiązań wątków są niedostępne.
Trwałe powiązania kanałów ACP
Trwałe powiązania kanałów ACP
bindings[]ztype: "acp"imatch.channel: "discord"
/acp spawn codex --bind herewiąże bieżący kanał lub wątek Discord na miejscu i utrzymuje trasowanie przyszłych wiadomości do tej samej sesji ACP.- To nadal może oznaczać „uruchom nową sesję Codex ACP”, ale samo w sobie nie tworzy nowego wątku Discord. Istniejący kanał pozostaje powierzchnią czatu.
- Codex może nadal działać we własnym
cwdlub obszarze roboczym backendu na dysku. Ten obszar roboczy jest stanem środowiska uruchomieniowego, a nie wątkiem Discord. - Wiadomości w wątkach mogą dziedziczyć nadrzędne powiązanie ACP kanału.
- W powiązanym kanale lub wątku
/newi/resetresetują tę samą sesję ACP na miejscu. - Tymczasowe powiązania wątków nadal działają i mogą nadpisywać rozwiązywanie celu, gdy są aktywne.
spawnAcpSessionsjest wymagane tylko wtedy, gdy OpenClaw musi utworzyć/powiązać podrzędny wątek przez--thread auto|here. Nie jest wymagane dla/acp spawn ... --bind herew bieżącym kanale.
Powiadomienia o reakcjach
Powiadomienia o reakcjach
offown(domyślnie)allallowlist(używaguilds.<id>.users)
Reakcje potwierdzające
Reakcje potwierdzające
ackReaction wysyła emoji potwierdzenia, gdy OpenClaw przetwarza przychodzącą wiadomość.Kolejność rozwiązywania:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- fallback do emoji tożsamości agenta (
agents.list[].identity.emoji, w przeciwnym razie ”👀”)
- Discord akceptuje emoji unicode lub nazwy niestandardowych emoji.
- Użyj
"", aby wyłączyć reakcję dla kanału lub konta.
Zapisy konfiguracji
Zapisy konfiguracji
/config set|unset (gdy funkcje poleceń są włączone).Wyłącz:Proxy bramy
Proxy bramy
channels.discord.proxy.Obsługa PluralKit
Obsługa PluralKit
- listy dozwolonych mogą używać
pk:<memberId> - wyświetlane nazwy członków są dopasowywane po nazwie/slug tylko wtedy, gdy
channels.discord.dangerouslyAllowNameMatching: true - wyszukiwania używają oryginalnego ID wiadomości i są ograniczone oknem czasowym
- jeśli wyszukiwanie się nie powiedzie, proxowane wiadomości są traktowane jako wiadomości bota i odrzucane, chyba że
allowBots=true
Konfiguracja obecności
Konfiguracja obecności
- 0: Playing
- 1: Streaming (wymaga
activityUrl) - 2: Listening
- 3: Watching
- 4: Custom (używa tekstu aktywności jako stanu statusu; emoji jest opcjonalne)
- 5: Competing
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(obsługuje placeholder{reason})
Zatwierdzenia w Discord
Zatwierdzenia w Discord
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(opcjonalne; w miarę możliwości fallback docommands.ownerAllowFrom)channels.discord.execApprovals.target(dm|channel|both, domyślnie:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled nie jest ustawione lub ma wartość "auto" i można rozwiązać co najmniej jednego zatwierdzającego, albo z execApprovals.approvers, albo z commands.ownerAllowFrom. Discord nie wyprowadza zatwierdzających exec z kanałowego allowFrom, starszego dm.allowFrom ani defaultTo dla wiadomości bezpośrednich. Ustaw enabled: false, aby jawnie wyłączyć Discord jako natywnego klienta zatwierdzeń.Gdy target ma wartość channel lub both, prompt zatwierdzenia jest widoczny w kanale. Tylko rozpoznani zatwierdzający mogą używać przycisków; inni użytkownicy otrzymują efemeryczną odmowę. Prompty zatwierdzeń zawierają tekst polecenia, więc dostarczanie do kanału włączaj tylko w zaufanych kanałach. Jeśli nie można wyprowadzić ID kanału z klucza sesji, OpenClaw przechodzi do dostarczania przez DM.Discord renderuje również współdzielone przyciski zatwierdzeń używane przez inne kanały czatu. Natywny adapter Discord głównie dodaje trasowanie DM dla zatwierdzających i fanout do kanałów.
Gdy te przyciski są obecne, stanowią one podstawowy UX zatwierdzeń; OpenClaw
powinien dołączać ręczne polecenie /approve tylko wtedy, gdy wynik narzędzia wskazuje,
że zatwierdzenia na czacie są niedostępne lub ręczne zatwierdzenie jest jedyną ścieżką.Uwierzytelnianie bramy dla tego modułu obsługi używa tego samego współdzielonego kontraktu rozwiązywania poświadczeń co inni klienci bramy:- uwierzytelnianie lokalne z pierwszeństwem env (
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD, a następniegateway.auth.*) - w trybie lokalnym
gateway.remote.*może być użyte jako fallback tylko wtedy, gdygateway.auth.*nie jest ustawione; skonfigurowane, ale nierozwiązane lokalne SecretRefs kończą się bezpiecznym niepowodzeniem - obsługa trybu zdalnego przez
gateway.remote.*, gdy ma zastosowanie - nadpisania URL są bezpieczne względem nadpisywania: nadpisania CLI nie używają ponownie niejawnych poświadczeń, a nadpisania env używają tylko poświadczeń env
- ID z prefiksem
plugin:są rozwiązywane przezplugin.approval.resolve. - Inne ID są rozwiązywane przez
exec.approval.resolve. - Discord nie wykonuje tu dodatkowego przeskoku fallback z exec do plugin; o tym, którą metodę bramy wywoła, decyduje prefiks ID.
Narzędzia i bramki działań
Działania na wiadomościach Discord obejmują wiadomości, administrację kanałami, moderację, obecność i działania na metadanych. Główne przykłady:- wiadomości:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - reakcje:
react,reactions,emojiList - moderacja:
timeout,kick,ban - obecność:
setPresence
channels.discord.actions.*.
Domyślne zachowanie bramek:
| Grupa działań | Domyślnie |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | włączone |
| roles | wyłączone |
| moderation | wyłączone |
| presence | wyłączone |
Interfejs Components v2
OpenClaw używa Discord components v2 do zatwierdzeń exec i znaczników międzykontekstowych. Działania na wiadomościach Discord mogą również akceptowaćcomponents dla własnego interfejsu (zaawansowane; wymaga skonstruowania ładunku komponentów za pomocą narzędzia Discord), podczas gdy starsze embeds nadal są dostępne, ale nie są zalecane.
channels.discord.ui.components.accentColorustawia kolor akcentu używany przez kontenery komponentów Discord (hex).- Ustaw per konto przez
channels.discord.accounts.<id>.ui.components.accentColor. embedssą ignorowane, gdy obecne są components v2.
Kanały głosowe
OpenClaw może dołączać do kanałów głosowych Discord w celu prowadzenia rozmów w czasie rzeczywistym i w trybie ciągłym. Jest to odrębne od załączników wiadomości głosowych. Wymagania:- Włącz natywne polecenia (
commands.nativelubchannels.discord.commands.native). - Skonfiguruj
channels.discord.voice. - Bot musi mieć uprawnienia Connect + Speak w docelowym kanale głosowym.
/vc join|leave|status, aby sterować sesjami. Polecenie używa domyślnego agenta konta i podlega tym samym regułom list dozwolonych oraz zasad grupowych co inne polecenia Discord.
Przykład auto-dołączania:
voice.ttsnadpisujemessages.ttstylko dla odtwarzania głosu.- Tury transkrypcji głosowej wyprowadzają status właściciela z Discord
allowFrom(lubdm.allowFrom); mówcy niebędący właścicielami nie mogą uzyskać dostępu do narzędzi tylko dla właściciela (na przykładgatewayicron). - Głos jest domyślnie włączony; ustaw
channels.discord.voice.enabled=false, aby go wyłączyć. voice.daveEncryptionivoice.decryptionFailureTolerancesą przekazywane do opcji dołączania@discordjs/voice.- Domyślne wartości
@discordjs/voicetodaveEncryption=trueidecryptionFailureTolerance=24, jeśli nie są ustawione. - OpenClaw obserwuje też niepowodzenia odszyfrowywania odbioru i automatycznie odzyskuje działanie, opuszczając i ponownie dołączając do kanału głosowego po powtarzających się niepowodzeniach w krótkim oknie czasu.
- Jeśli logi odbioru wielokrotnie pokazują
DecryptionFailed(UnencryptedWhenPassthroughDisabled), może to być błąd odbioru upstream@discordjs/voiceśledzony w discord.js #11419.
Wiadomości głosowe
Wiadomości głosowe Discord pokazują podgląd przebiegu fali i wymagają dźwięku OGG/Opus oraz metadanych. OpenClaw generuje przebieg fali automatycznie, ale do sprawdzania i konwersji plików audio potrzebujeffmpeg i ffprobe dostępnych na hoście bramy.
Wymagania i ograniczenia:
- Podaj lokalną ścieżkę pliku (URL-e są odrzucane).
- Pomiń treść tekstową (Discord nie pozwala na tekst + wiadomość głosową w tym samym ładunku).
- Akceptowany jest dowolny format audio; OpenClaw w razie potrzeby konwertuje do OGG/Opus.
Rozwiązywanie problemów
Użyto niedozwolonych intents lub bot nie widzi wiadomości serwera
Użyto niedozwolonych intents lub bot nie widzi wiadomości serwera
- włącz Message Content Intent
- włącz Server Members Intent, gdy zależysz od rozwiązywania użytkowników/członków
- po zmianie intents uruchom ponownie bramę
Wiadomości serwera są nieoczekiwanie blokowane
Wiadomości serwera są nieoczekiwanie blokowane
- sprawdź
groupPolicy - sprawdź listę dozwolonych serwerów w
channels.discord.guilds - jeśli istnieje mapa
channelsserwera, dozwolone są tylko wymienione kanały - sprawdź zachowanie
requireMentioni wzorce wzmianki
Require mention false, ale nadal blokowane
Require mention false, ale nadal blokowane
groupPolicy="allowlist"bez pasującej listy dozwolonych serwera/kanałurequireMentionskonfigurowane w złym miejscu (musi być podchannels.discord.guildslub we wpisie kanału)- nadawca blokowany przez listę dozwolonych
usersserwera/kanału
Długo działające handlery przekraczają limit czasu lub duplikują odpowiedzi
Długo działające handlery przekraczają limit czasu lub duplikują odpowiedzi
Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATESlow listener detected ...discord inbound worker timed out after ...
- jedno konto:
channels.discord.eventQueue.listenerTimeout - wiele kont:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout
- jedno konto:
channels.discord.inboundWorker.runTimeoutMs - wiele kont:
channels.discord.accounts.<accountId>.inboundWorker.runTimeoutMs - domyślnie:
1800000(30 minut); ustaw0, aby wyłączyć
eventQueue.listenerTimeout dla wolnego przygotowania listenera, a inboundWorker.runTimeoutMs
tylko wtedy, gdy chcesz mieć osobny bezpiecznik dla kolejkowanych tur agenta.Niezgodności audytu uprawnień
Niezgodności audytu uprawnień
channels status --probe działają tylko dla numerycznych ID kanałów.Jeśli używasz kluczy typu slug, dopasowanie w czasie działania nadal może działać, ale test nie może w pełni zweryfikować uprawnień.Problemy z DM i parowaniem
Problemy z DM i parowaniem
- DM wyłączone:
channels.discord.dm.enabled=false - zasady DM wyłączone:
channels.discord.dmPolicy="disabled"(starsze:channels.discord.dm.policy) - oczekiwanie na zatwierdzenie parowania w trybie
pairing
Pętle bot-do-bota
Pętle bot-do-bota
channels.discord.allowBots=true, używaj ścisłych reguł wzmianki i list dozwolonych, aby uniknąć zapętleń.
Zalecane jest channels.discord.allowBots="mentions", aby akceptować tylko wiadomości botów, które wspominają bota.Głosowe STT przestaje działać z DecryptionFailed(...)
Głosowe STT przestaje działać z DecryptionFailed(...)
- aktualizuj OpenClaw (
openclaw update), aby logika odzyskiwania odbioru głosowego Discord była obecna - potwierdź
channels.discord.voice.daveEncryption=true(domyślnie) - zacznij od
channels.discord.voice.decryptionFailureTolerance=24(domyślna wartość upstream) i dostrajaj tylko w razie potrzeby - obserwuj logi pod kątem:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- jeśli problemy trwają po automatycznym ponownym dołączeniu, zbierz logi i porównaj z discord.js #11419
Wskaźniki do dokumentacji konfiguracji
Główna dokumentacja: Kluczowe pola Discord o wysokim znaczeniu:- uruchamianie/uwierzytelnianie:
enabled,token,accounts.*,allowBots - zasady:
groupPolicy,dm.*,guilds.*,guilds.*.channels.* - polecenia:
commands.native,commands.useAccessGroups,configWrites,slashCommand.* - kolejka zdarzeń:
eventQueue.listenerTimeout(budżet listenera),eventQueue.maxQueueSize,eventQueue.maxConcurrency - worker przychodzący:
inboundWorker.runTimeoutMs - odpowiedź/historia:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - dostarczanie:
textChunkLimit,chunkMode,maxLinesPerMessage - strumieniowanie:
streaming(starszy alias:streamMode),draftChunk,blockStreaming,blockStreamingCoalesce - media/ponawianie:
mediaMaxMb,retrymediaMaxMbogranicza wychodzące przesyłania do Discord (domyślnie:8MB)
- działania:
actions.* - obecność:
activity,status,activityType,activityUrl - interfejs:
ui.components.accentColor - funkcje:
threadBindings, najwyższego poziomubindings[](type: "acp"),pluralkit,execApprovals,intents,agentComponents,heartbeat,responsePrefix
Bezpieczeństwo i operacje
- Traktuj tokeny bota jako sekrety (
DISCORD_BOT_TOKENpreferowane w środowiskach nadzorowanych). - Przyznawaj minimalne niezbędne uprawnienia Discord.
- Jeśli wdrożenie poleceń lub ich stan są nieaktualne, uruchom ponownie bramę i sprawdź ponownie przez
openclaw channels status --probe.