Gotowe do wiadomości prywatnych i kanałów serwera za pośrednictwem oficjalnego Gateway Discorda.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
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 go utwórz (wybierz Utwórz własny > Dla mnie i moich znajomych).Utwórz aplikację Discord i bota
Włącz intencje uprzywilejowane
- Intencja treści wiadomości (wymagana)
- Intencja członków serwera (zalecana; wymagana dla list dozwolonych ról i dopasowywania nazw do identyfikatorów)
- Intencja obecności (opcjonalna; potrzebna tylko do aktualizacji obecności)
Skopiuj token bota
Wygeneruj URL zaproszenia i dodaj bota do serwera
botapplications.commands
- Wyświetlanie kanałów Uprawnienia tekstowe
- Wysyłanie wiadomości
- Odczyt historii wiadomości
- Osadzanie linków
- Załączanie plików
- Dodawanie reakcji (opcjonalne)
Włącz tryb dewelopera i zbierz swoje identyfikatory
- Kliknij Ustawienia użytkownika (ikona koła zębatego obok awatara) → Zaawansowane → włącz Tryb dewelopera
- Kliknij prawym przyciskiem ikonę serwera na pasku bocznym → Kopiuj identyfikator serwera
- Kliknij prawym przyciskiem własny awatar → Kopiuj identyfikator użytkownika
Zezwól na wiadomości prywatne od członków serwera
Ustaw token bota bezpiecznie (nie wysyłaj go na czacie)
openclaw gateway run.
W przypadku instalacji usług zarządzanych uruchom openclaw gateway install z powłoki, w której dostępny jest DISCORD_BOT_TOKEN, albo zapisz zmienną w ~/.openclaw/.env, aby usługa mogła rozwiązać SecretRef środowiska po ponownym uruchomieniu.
Jeśli Twój host jest blokowany lub ograniczany przez limit zapytań podczas startowego wyszukiwania aplikacji Discord, ustaw identyfikator aplikacji/klienta Discord z Portalu dewelopera, aby start mógł pominąć to wywołanie REST. Użyj channels.discord.applicationId dla konta domyślnego albo channels.discord.accounts.<accountId>.applicationId, gdy uruchamiasz wiele botów Discord.Skonfiguruj OpenClaw i sparuj
- Zapytaj agenta
- CLI / konfiguracja
„Ustawiłem już token bota Discord w konfiguracji. Dokończ konfigurację Discord z identyfikatorem użytkownika<user_id>i identyfikatorem serwera<server_id>.”
Zatwierdź pierwsze parowanie przez wiadomość prywatną
- Zapytaj agenta
- CLI
„Zatwierdź ten kod parowania Discord: <CODE>”
DISCORD_BOT_TOKEN jest używany tylko dla konta domyślnego.
Jeśli dwa włączone konta Discord rozwiązują się do tego samego tokena bota, OpenClaw uruchamia tylko jeden monitor Gateway dla tego tokena. Token pochodzący z konfiguracji ma pierwszeństwo przed domyślną awaryjną wartością środowiskową; w przeciwnym razie wygrywa pierwsze włączone konto, a zduplikowane konto jest zgłaszane jako wyłączone.
W przypadku zaawansowanych wywołań wychodzących (narzędzie wiadomości/akcje kanału) jawny token dla wywołania jest używany dla tego wywołania. Dotyczy to akcji wysyłania oraz akcji typu odczyt/sondowanie (na przykład odczyt/wyszukiwanie/pobieranie/wątek/przypięcia/uprawnienia). Ustawienia zasad konta i ponowień nadal pochodzą z wybranego konta w aktywnej migawce środowiska uruchomieniowego.Zalecane: Skonfiguruj obszar roboczy serwera
Gdy wiadomości prywatne działają, możesz skonfigurować swój serwer Discord jako pełny obszar roboczy, w którym każdy kanał otrzymuje własną sesję agenta z własnym kontekstem. Jest to zalecane dla prywatnych serwerów, gdzie jesteś tylko Ty i Twój bot.Dodaj swój serwer do listy dozwolonych serwerów
- Zapytaj agenta
- Konfiguracja
„Dodaj mój identyfikator serwera Discord <server_id> do listy dozwolonych serwerów”
Zezwól na odpowiedzi bez @wzmianki
message, aby agent mógł domyślnie obserwować i publikować tylko wtedy, gdy uzna, że odpowiedź w kanale jest przydatna.Oznacza to, że wybrany model musi niezawodnie wywoływać narzędzia. Jeśli Discord pokazuje pisanie, a logi pokazują użycie tokenów, ale nie ma opublikowanej wiadomości, sprawdź log sesji pod kątem tekstu asystenta z didSendViaMessagingTool: false. Oznacza to, że model utworzył prywatną odpowiedź końcową zamiast wywołać message(action=send). Przełącz się na silniejszy model wywołujący narzędzia albo użyj poniższej konfiguracji, aby przywrócić starsze automatyczne odpowiedzi końcowe.- Zapytaj agenta
- Konfiguracja
„Zezwól mojemu agentowi odpowiadać na tym serwerze bez konieczności @wzmianki”
Zaplanuj pamięć w kanałach serwera
- Zapytaj agenta
- Ręcznie
„Gdy zadaję pytania w kanałach Discord, użyj memory_search lub memory_get, jeśli potrzebujesz długoterminowego kontekstu z MEMORY.md.”
#coding, #home, #research albo cokolwiek pasuje do Twojego przepływu pracy.
Model środowiska uruchomieniowego
- Gateway jest właścicielem połączenia Discord.
- Routing odpowiedzi jest deterministyczny: odpowiedzi przychodzące z Discord wracają do Discord.
- Metadane gildii/kanału Discord są dodawane do promptu modelu jako niezaufany kontekst, a nie jako widoczny dla użytkownika prefiks odpowiedzi. Jeśli model skopiuje tę otoczkę z powrotem, OpenClaw usuwa skopiowane metadane z odpowiedzi wychodzących oraz z przyszłego kontekstu odtwarzania.
- Domyślnie (
session.dmScope=main) czaty bezpośrednie współdzielą główną sesję agenta (agent:main:main). - Kanały gildii są izolowanymi kluczami sesji (
agent:<agentId>:discord:channel:<channelId>). - Grupowe DM 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 nadal przenoszącCommandTargetSessionKeydo routowanej sesji rozmowy. - Dostarczanie tekstowych ogłoszeń cron/heartbeat do Discord używa raz końcowej odpowiedzi widocznej dla asystenta. Multimedia i strukturalne ładunki komponentów pozostają wieloma wiadomościami, gdy agent emituje wiele dostarczalnych ładunków.
Kanały forum
Kanały forum i mediów Discord akceptują wyłącznie 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 pierwszego niepustego wiersza 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ą routowane z powrotem do agenta jako zwykłe wiadomości przychodzące i stosują istniejące ustawienia Discord replyToMode.
Obsługiwane bloki:
text,section,separator,actions,media-gallery,file- Wiersze akcji pozwalają na maksymalnie 5 przycisków albo jedno menu wyboru
- Typy wyboru:
string,user,role,mentionable,channel
components.reusable=true, aby przyciski, pola wyboru i formularze mogły być używane wielokrotnie, dopóki nie wygasną.
Aby ograniczyć, kto może kliknąć przycisk, ustaw allowedUsers na tym przycisku (identyfikatory użytkowników Discord, tagi albo *). Po skonfigurowaniu niedopasowani użytkownicy otrzymają efemeryczną odmowę.
Polecenia ukośnikowe /model i /models otwierają interaktywny selektor modelu z listami rozwijanymi dostawcy, modelu i zgodnego środowiska uruchomieniowego oraz krokiem Submit. /models add jest przestarzałe i teraz zwraca komunikat o wycofaniu zamiast rejestrować modele z czatu. Odpowiedź selektora jest efemeryczna i może jej użyć tylko użytkownik wywołujący. Menu wyboru Discord są ograniczone do 25 opcji, więc dodaj wpisy provider/* do agents.defaults.models, gdy chcesz, aby selektor pokazywał dynamicznie wykryte modele tylko dla wybranych dostawców, takich jak openai-codex lub vllm.
Załączniki plików:
- Bloki
filemuszą wskazywać na odwołanie do załącznika (attachment://<filename>) - Podaj 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 pasować do odwołania do 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 routing
- DM policy
- Access groups
- Guild policy
- Mentions and group DMs
channels.discord.dmPolicy kontroluje dostęp DM. channels.discord.allowFrom jest kanoniczną listą dozwolonych DM.pairing(domyślne)allowlistopen(wymaga, abychannels.discord.allowFromzawierało"*")disabled
pairing).Priorytet wielu kont:channels.discord.accounts.default.allowFromstosuje się tylko do kontadefault.- Dla jednego konta
allowFromma pierwszeństwo przed starszymdm.allowFrom. - Nazwane konta dziedziczą
channels.discord.allowFrom, gdy ich własneallowFromi starszedm.allowFromnie są ustawione. - Nazwane konta nie dziedziczą
channels.discord.accounts.default.allowFrom.
channels.discord.dm.policy i channels.discord.dm.allowFrom nadal są odczytywane dla zgodności. openclaw doctor --fix migruje je do dmPolicy i allowFrom, gdy może to zrobić bez zmiany dostępu.Format celu DM dla dostarczania:user:<id>- wzmianka
<@id>
allowFrom konta są traktowane jako cele DM użytkownika dla zgodności.Routing agenta oparty na rolach
Użyjbindings[].match.roles, aby routować członków gildii Discord do różnych agentów według identyfikatora roli. Powiązania oparte na rolach akceptują tylko identyfikatory ról i są oceniane po powiązaniach peer lub parent-peer oraz przed powiązaniami tylko dla gildii. Jeśli powiązanie ustawia też inne pola dopasowania (na przykład peer + guildId + roles), wszystkie skonfigurowane pola muszą pasować.
Natywne polecenia i autoryzacja poleceń
commands.nativedomyślnie ma wartość"auto"i jest włączone dla Discord.- Nadpisanie dla kanału:
channels.discord.commands.native. commands.native=falsepomija rejestrację poleceń slash Discord i czyszczenie podczas uruchamiania. Wcześniej zarejestrowane polecenia mogą pozostać widoczne w Discord, dopóki nie usuniesz ich z aplikacji Discord.- Autoryzacja poleceń natywnych używa tych samych list dozwolonych/polityk Discord co zwykła obsługa wiadomości.
- Polecenia mogą nadal być widoczne w interfejsie Discord dla użytkowników, którzy nie są autoryzowani; wykonanie nadal wymusza autoryzację OpenClaw i zwraca „brak autoryzacji”.
ephemeral: true
Szczegóły funkcji
Znaczniki odpowiedzi i odpowiedzi natywne
Znaczniki odpowiedzi i odpowiedzi natywne
[[reply_to_current]][[reply_to:<id>]]
channels.discord.replyToMode:off(domyślnie)firstallbatched
off wyłącza niejawne wątkowanie odpowiedzi. Jawne znaczniki [[reply_to_*]] są nadal respektowane.
first zawsze dołącza niejawną natywną referencję odpowiedzi do pierwszej wychodzącej wiadomości Discord w danej turze.
batched dołącza niejawną natywną referencję odpowiedzi Discord tylko wtedy, gdy
przychodząca tura była opóźnioną partią wielu wiadomości. Jest to przydatne,
gdy chcesz używać odpowiedzi natywnych głównie w niejednoznacznych, gwałtownych rozmowach, a nie przy każdej
turze z pojedynczą wiadomością.Identyfikatory wiadomości są udostępniane w kontekście/historii, aby agenci mogli wskazywać konkretne wiadomości.Podgląd strumienia na żywo
Podgląd strumienia na żywo
channels.discord.streaming przyjmuje off | partial | block | progress (domyślnie). progress utrzymuje jeden edytowalny szkic statusu i aktualizuje go postępem narzędzi aż do końcowego dostarczenia; wspólna etykieta początkowa jest przewijaną linią, więc znika z widoku tak jak reszta, gdy pojawi się wystarczająco dużo pracy. streamMode to starszy alias środowiska uruchomieniowego. Uruchom openclaw doctor --fix, aby przepisać utrwaloną konfigurację na klucz kanoniczny.Ustaw channels.discord.streaming.mode na off, aby wyłączyć edycje podglądu Discord. Jeśli strumieniowanie blokowe Discord jest jawnie włączone, OpenClaw pomija strumień podglądu, aby uniknąć podwójnego strumieniowania.partialedytuje pojedynczą wiadomość podglądu w miarę napływu tokenów.blockemituje fragmenty o rozmiarze szkicu (użyjdraftChunk, aby dostroić rozmiar i punkty podziału, ograniczone dotextChunkLimit).- Media, błędy i finały z jawną odpowiedzią anulują oczekujące edycje podglądu.
streaming.preview.toolProgress(domyślnietrue) kontroluje, czy aktualizacje narzędzi/postępu ponownie używają wiadomości podglądu.- Wiersze narzędzi/postępu renderują się jako zwarte emoji + tytuł + szczegóły, gdy są dostępne, na przykład
🛠️ Bash: run testslub🔎 Web Search: for "query". streaming.preview.commandText/streaming.progress.commandTextkontroluje szczegóły polecenia/wykonania w zwartych liniach postępu:raw(domyślnie) lubstatus(tylko etykieta narzędzia).
block jest jawnie włączone, OpenClaw pomija strumień podglądu, aby uniknąć podwójnego strumieniowania.Historia, kontekst i zachowanie wątków
Historia, kontekst i zachowanie wątków
- domyślny
channels.discord.historyLimitto20 - rozwiązanie zapasowe:
messages.groupChat.historyLimit 0wyłącza
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Wątki Discord są kierowane jako sesje kanału i dziedziczą konfigurację kanału nadrzędnego, chyba że zostanie nadpisana.
- Sesje wątków dziedziczą wybór
/modelna poziomie sesji kanału nadrzędnego jako zapas wyłącznie dla modelu; lokalne wybory/modelwątku nadal mają pierwszeństwo, a historia transkryptu nadrzędnego nie jest kopiowana, chyba że włączono dziedziczenie transkryptu. channels.discord.thread.inheritParent(domyślniefalse) powoduje, że nowe automatyczne wątki są inicjowane z transkryptu nadrzędnego. Nadpisania dla kont znajdują się podchannels.discord.accounts.<id>.thread.inheritParent.- Reakcje narzędzia wiadomości mogą rozwiązywać cele wiadomości prywatnych
user:<id>. guilds.<guild>.channels.<channel>.requireMention: falsejest zachowywane podczas zapasowej aktywacji na etapie odpowiedzi.
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ń powiązanie bieżącego wątku/agentspokaż aktywne uruchomienia i stan powiązania/session idle <duration|off>sprawdź/zaktualizuj automatyczne usuwanie fokusu po bezczynności dla powiązań z fokusem/session max-age <duration|off>sprawdź/zaktualizuj sztywny maksymalny wiek dla powiązań z fokusem
session.threadBindings.*ustawia globalne wartości domyślne.channels.discord.threadBindings.*nadpisuje zachowanie Discord.spawnSessionskontroluje automatyczne tworzenie/powiązywanie wątków dlasessions_spawn({ thread: true })i uruchomień wątków ACP. Domyślnie:true.defaultSpawnContextkontroluje natywny kontekst subagenta dla uruchomień powiązanych z wątkiem. Domyślnie:"fork".- Przestarzałe klucze
spawnSubagentSessions/spawnAcpSessionssą migrowane przezopenclaw doctor --fix. - 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 w miejscu i utrzymuje przyszłe wiadomości w tej samej sesji ACP. Wiadomości wątku dziedziczą powiązanie kanału nadrzędnego.- W powiązanym kanale lub wątku
/newi/resetresetują tę samą sesję ACP w miejscu. Tymczasowe powiązania wątków mogą nadpisywać rozwiązywanie celu, gdy są aktywne. spawnSessionsbramkuje tworzenie/powiązywanie wątków potomnych przez--thread auto|here.
Powiadomienia o reakcjach
Powiadomienia o reakcjach
offown(domyślnie)allallowlist(używaguilds.<id>.users)
Reakcje potwierdzenia
Reakcje potwierdzenia
ackReaction wysyła emoji potwierdzenia, gdy OpenClaw przetwarza przychodzącą wiadomość.Kolejność rozwiązywania:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- zapasowe emoji tożsamości agenta (
agents.list[].identity.emoji, w przeciwnym razie „👀”)
- Discord akceptuje emoji unicode lub niestandardowe nazwy 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 Gateway
Proxy Gateway
channels.discord.proxy.Obsługa PluralKit
Obsługa PluralKit
- listy dozwolonych mogą używać
pk:<memberId> - wyświetlane nazwy członków są dopasowywane według nazwy/sluga tylko wtedy, gdy
channels.discord.dangerouslyAllowNameMatching: true - wyszukiwania używają oryginalnego identyfikatora wiadomości i są ograniczone oknem czasowym
- jeśli wyszukiwanie się nie powiedzie, wiadomości pośredniczone są traktowane jako wiadomości botów i odrzucane, chyba że
allowBots=true
Aliasy wzmianek wychodzących
Aliasy wzmianek wychodzących
mentionAliases, gdy agenci potrzebują deterministycznych wzmianek wychodzących dla znanych użytkowników Discord. Klucze to uchwyty bez początkowego @; wartości to identyfikatory użytkowników Discord. Nieznane uchwyty, @everyone, @here oraz wzmianki wewnątrz spanów kodu Markdown pozostają bez zmian.Konfiguracja obecności
Konfiguracja obecności
- 0: Granie
- 1: Streaming (wymaga
activityUrl) - 2: Słuchanie
- 3: Oglądanie
- 4: Niestandardowe (używa tekstu aktywności jako stanu statusu; emoji jest opcjonalne)
- 5: Rywalizacja
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(obsługuje placeholder{reason})
Approvals in Discord
Approvals in Discord
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(opcjonalne; gdy to możliwe, wraca docommands.ownerAllowFrom)channels.discord.execApprovals.target(dm|channel|both, domyślnie:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled jest nieustawione albo ma wartość "auto" i można rozpoznać co najmniej jedną osobę zatwierdzającą, z execApprovals.approvers albo z commands.ownerAllowFrom. Discord nie wyprowadza osób zatwierdzających exec z kanałowego allowFrom, starszego dm.allowFrom ani defaultTo wiadomości bezpośredniej. Ustaw enabled: false, aby jawnie wyłączyć Discord jako natywnego klienta zatwierdzania.W przypadku wrażliwych poleceń grupowych tylko dla właściciela, takich jak /diagnostics i /export-trajectory, OpenClaw wysyła monity o zatwierdzenie oraz wyniki końcowe prywatnie. Najpierw próbuje wiadomości prywatnej Discord, gdy wywołujący właściciel ma trasę właściciela Discord; jeśli nie jest ona dostępna, wraca do pierwszej dostępnej trasy właściciela z commands.ownerAllowFrom, takiej jak Telegram.Gdy target ma wartość channel albo both, monit o zatwierdzenie jest widoczny w kanale. Tylko rozpoznane osoby zatwierdzające mogą używać przycisków; pozostali użytkownicy otrzymują efemeryczną odmowę. Monity o zatwierdzenie zawierają tekst polecenia, więc włączaj dostarczanie do kanału tylko w zaufanych kanałach. Jeśli identyfikatora kanału nie da się wyprowadzić z klucza sesji, OpenClaw wraca do dostarczenia przez wiadomość prywatną.Discord renderuje także współdzielone przyciski zatwierdzania używane przez inne kanały czatu. Natywny adapter Discord dodaje głównie trasowanie wiadomości prywatnych do osób zatwierdzających oraz fanout kanałów.
Gdy te przyciski są obecne, są podstawowym UX zatwierdzania; OpenClaw
powinien zawierać ręczne polecenie /approve tylko wtedy, gdy wynik narzędzia mówi,
że zatwierdzenia przez czat są niedostępne albo ręczne zatwierdzenie jest jedyną ścieżką.
Jeśli natywne środowisko uruchomieniowe zatwierdzania Discord nie jest aktywne, OpenClaw pozostawia
lokalny deterministyczny monit /approve <id> <decision> widoczny. Jeśli
środowisko uruchomieniowe jest aktywne, ale natywnej karty nie można dostarczyć do żadnego celu,
OpenClaw wysyła w tym samym czacie zastępcze powiadomienie z dokładnym poleceniem /approve
z oczekującego zatwierdzenia.Uwierzytelnianie Gateway i rozstrzyganie zatwierdzeń przestrzegają współdzielonego kontraktu klienta Gateway (identyfikatory plugin: są rozstrzygane przez plugin.approval.resolve; inne identyfikatory przez exec.approval.resolve). Zatwierdzenia wygasają domyślnie po 30 minutach.Zobacz Zatwierdzenia exec.Narzędzia i bramki akcji
Akcje wiadomości Discord obejmują wiadomości, administrację kanałami, moderację, obecność i akcje metadanych. Podstawowe przykłady:- wiadomości:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - reakcje:
react,reactions,emojiList - moderacja:
timeout,kick,ban - obecność:
setPresence
event-create przyjmuje opcjonalny parametr image (URL albo lokalną ścieżkę pliku), aby ustawić obraz okładki zaplanowanego wydarzenia.
Bramki akcji znajdują się w channels.discord.actions.*.
Domyślne zachowanie bramek:
| Grupa akcji | 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 użytkownika Components v2
OpenClaw używa komponentów Discord v2 do zatwierdzeń exec i znaczników międzykontekstowych. Akcje wiadomości Discord mogą też przyjmowaćcomponents dla niestandardowego interfejsu użytkownika (zaawansowane; wymaga skonstruowania ładunku komponentu przez narzędzie discord), podczas gdy starsze embeds pozostają dostępne, ale nie są zalecane.
channels.discord.ui.components.accentColorustawia kolor akcentu używany przez kontenery komponentów Discord (hex).- Ustaw dla każdego konta za pomocą
channels.discord.accounts.<id>.ui.components.accentColor. embedssą ignorowane, gdy obecne są komponenty v2.
Głos
Discord ma dwie odrębne powierzchnie głosowe: kanały głosowe w czasie rzeczywistym (ciągłe rozmowy) oraz załączniki wiadomości głosowych (format podglądu przebiegu fali). Gateway obsługuje oba.Kanały głosowe
Lista kontrolna konfiguracji:- Włącz Message Content Intent w Discord Developer Portal.
- Włącz Server Members Intent, gdy używane są listy dozwolonych ról/użytkowników.
- Zaproś bota z zakresami
botiapplications.commands. - Przyznaj Connect, Speak, Send Messages i Read Message History w docelowym kanale głosowym.
- Włącz natywne polecenia (
commands.nativealbochannels.discord.commands.native). - Skonfiguruj
channels.discord.voice.
/vc join|leave|status, aby kontrolować sesje. Polecenie używa domyślnego agenta konta i stosuje te same reguły listy dozwolonych oraz polityki grupowej co inne polecenia Discord.
voice.ttszastępujemessages.ttstylko dla odtwarzania głosustt-tts. Tryby czasu rzeczywistego używająvoice.realtime.voice.voice.modekontroluje ścieżkę rozmowy. Wartość domyślna toagent-proxy: frontend głosowy czasu rzeczywistego obsługuje taktowanie tur, przerywanie i odtwarzanie, deleguje zasadniczą pracę do trasowanego agenta OpenClaw przezopenclaw_agent_consulti traktuje wynik jak wpisany prompt Discord od tego mówcy.stt-ttszachowuje starszy przepływ wsadowy STT plus TTS.bidipozwala modelowi czasu rzeczywistego rozmawiać bezpośrednio, jednocześnie udostępniającopenclaw_agent_consultdla mózgu OpenClaw.voice.agentSessionkontroluje, która rozmowa OpenClaw otrzymuje tury głosowe. Pozostaw to nieustawione dla własnej sesji kanału głosowego albo ustaw{ mode: "target", target: "channel:<text-channel-id>" }, aby kanał głosowy działał jako rozszerzenie mikrofonu/głośnika istniejącej sesji kanału tekstowego Discord, takiego jak#maintainers.voice.modelzastępuje mózg agenta OpenClaw dla odpowiedzi głosowych Discord i konsultacji czasu rzeczywistego. Pozostaw to nieustawione, aby dziedziczyć model trasowanego agenta. Jest to oddzielne odvoice.realtime.model.agent-proxytrasuje mowę przezdiscord-voice, co zachowuje normalną autoryzację właściciela/narzędzi dla mówcy i sesji docelowej, ale ukrywa narzędzie agentatts, ponieważ Discord voice jest właścicielem odtwarzania. Domyślnieagent-proxydaje konsultacji pełny, równoważny właścicielowi dostęp do narzędzi dla mówców będących właścicielami (voice.realtime.toolPolicy: "owner") i zdecydowanie preferuje konsultację z agentem OpenClaw przed merytorycznymi odpowiedziami (voice.realtime.consultPolicy: "always"). W tym domyślnym trybiealwayswarstwa czasu rzeczywistego nie wypowiada automatycznie wypełniaczy przed odpowiedzią z konsultacji; przechwytuje i transkrybuje mowę, a następnie wypowiada trasowaną odpowiedź OpenClaw. Jeśli wiele wymuszonych odpowiedzi z konsultacji zakończy się, gdy Discord nadal odtwarza pierwszą odpowiedź, późniejsze odpowiedzi z dokładną mową są kolejkowane do czasu bezczynności odtwarzania, zamiast zastępować mowę w środku zdania.- W trybie
stt-ttsSTT używatools.media.audio;voice.modelnie wpływa na transkrypcję. - W trybach czasu rzeczywistego
voice.realtime.provider,voice.realtime.modelivoice.realtime.voicekonfigurują sesję audio czasu rzeczywistego. Dla OpenAI Realtime 2 plus mózgu Codex użyjvoice.realtime.model: "gpt-realtime-2"ivoice.model: "openai-codex/gpt-5.5". - Dostawca czasu rzeczywistego OpenAI akceptuje bieżące nazwy zdarzeń Realtime 2 oraz starsze aliasy zgodne z Codex dla zdarzeń audio wyjściowego i transkryptu, dzięki czemu zgodne migawki dostawcy mogą się rozchodzić bez utraty audio asystenta.
voice.realtime.bargeInkontroluje, czy zdarzenia rozpoczęcia mówienia przez użytkownika Discord przerywają aktywne odtwarzanie czasu rzeczywistego. Jeśli nie jest ustawione, podąża za ustawieniem przerywania audio wejściowego dostawcy czasu rzeczywistego.voice.realtime.minBargeInAudioEndMskontroluje minimalny czas odtwarzania asystenta, zanim wtrącenie OpenAI czasu rzeczywistego obetnie audio. Domyślnie:250. Ustaw0, aby przerywać natychmiast w pomieszczeniach z niskim echem, albo zwiększ tę wartość dla konfiguracji głośników z dużym echem.- Dla głosu OpenAI w odtwarzaniu Discord ustaw
voice.tts.provider: "openai"i wybierz głos Text-to-speech wvoice.tts.openai.voicelubvoice.tts.providers.openai.voice.cedarjest dobrym męsko brzmiącym wyborem w bieżącym modelu TTS OpenAI. - Zastąpienia
systemPromptDiscord dla poszczególnych kanałów mają zastosowanie do tur transkryptu głosowego dla tego kanału głosowego. - Tury transkryptu głosowego 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ścicieli (na przykładgatewayicron). - Discord voice jest opcjonalny dla konfiguracji wyłącznie tekstowych; ustaw
channels.discord.voice.enabled=true(albo zachowaj istniejący blokchannels.discord.voice), aby włączyć polecenia/vc, runtime głosowy i intencję GatewayGuildVoiceStates. channels.discord.intents.voiceStatesmoże jawnie zastąpić subskrypcję intencji stanu głosowego. Pozostaw to nieustawione, aby intencja podążała za efektywnym włączeniem głosu.- Jeśli
voice.autoJoinma wiele wpisów dla tej samej gildii, OpenClaw dołącza do ostatnio skonfigurowanego kanału dla tej gildii. voice.allowedChannelsjest opcjonalną listą dozwolonej rezydencji. Pozostaw to nieustawione, aby zezwolić/vc joinna dołączanie do dowolnego autoryzowanego kanału głosowego Discord. Gdy jest ustawione,/vc join, automatyczne dołączanie przy starcie i przeniesienia stanu głosowego bota są ograniczone do wymienionych wpisów{ guildId, channelId }. Ustaw pustą tablicę, aby odmówić wszystkich dołączeń głosowych Discord. Jeśli Discord przeniesie bota poza listę dozwolonych, OpenClaw opuszcza ten kanał i ponownie dołącza do skonfigurowanego celu automatycznego dołączania, gdy jest dostępny.voice.daveEncryptionivoice.decryptionFailureTolerancesą przekazywane do opcji dołączania@discordjs/voice.- Wartości domyślne
@discordjs/voicetodaveEncryption=trueidecryptionFailureTolerance=24, jeśli nie są ustawione. - OpenClaw domyślnie używa dekodera pure-JS
opusscriptdo odbioru głosu Discord. Opcjonalny natywny pakiet@discordjs/opusjest ignorowany przez politykę instalacji pnpm repozytorium, więc zwykłe instalacje, ścieżki Docker i niepowiązane testy nie kompilują natywnego dodatku. Dedykowane hosty wydajności głosowej mogą go włączyć za pomocąOPENCLAW_DISCORD_OPUS_DECODER=nativepo zainstalowaniu natywnego dodatku. voice.connectTimeoutMskontroluje początkowe oczekiwanie Ready@discordjs/voicedla prób/vc joini automatycznego dołączania. Domyślnie:30000.voice.reconnectGraceMskontroluje, jak długo OpenClaw czeka, aż rozłączona sesja głosowa zacznie ponownie się łączyć, zanim ją zniszczy. Domyślnie:15000.- W trybie
stt-ttsodtwarzanie głosu nie zatrzymuje się tylko dlatego, że inny użytkownik zaczyna mówić. Aby uniknąć pętli sprzężenia zwrotnego, OpenClaw ignoruje nowe przechwytywanie głosu podczas odtwarzania TTS; mów po zakończeniu odtwarzania, aby rozpocząć następną turę. Tryby czasu rzeczywistego przekazują rozpoczęcia mówienia jako sygnały wtrącenia do dostawcy czasu rzeczywistego. - W trybach czasu rzeczywistego echo z głośników do otwartego mikrofonu może wyglądać jak wtrącenie i przerywać odtwarzanie. Dla pomieszczeń Discord z dużym echem ustaw
voice.realtime.providers.openai.interruptResponseOnInputAudio: false, aby OpenAI nie przerywało automatycznie przy audio wejściowym. Dodajvoice.realtime.bargeIn: true, jeśli nadal chcesz, aby zdarzenia rozpoczęcia mówienia Discord przerywały aktywne odtwarzanie. Most czasu rzeczywistego OpenAI ignoruje obcięcia odtwarzania krótsze niżvoice.realtime.minBargeInAudioEndMsjako prawdopodobne echo/szum i rejestruje je jako pominięte, zamiast czyścić odtwarzanie Discord. voice.captureSilenceGraceMskontroluje, jak długo OpenClaw czeka po zgłoszeniu przez Discord, że mówca przestał mówić, zanim sfinalizuje ten segment audio dla STT. Domyślnie:2500; zwiększ tę wartość, jeśli Discord dzieli normalne pauzy na poszarpane częściowe transkrypty.- Gdy wybranym dostawcą TTS jest ElevenLabs, odtwarzanie głosu Discord używa strumieniowego TTS i zaczyna od strumienia odpowiedzi dostawcy. Dostawcy bez obsługi strumieniowania wracają do ścieżki syntetyzowanego pliku tymczasowego.
- OpenClaw monitoruje również niepowodzenia odszyfrowania odbioru i automatycznie odzyskuje działanie przez opuszczenie i ponowne dołączenie do kanału głosowego po powtarzających się niepowodzeniach w krótkim oknie czasowym.
- Jeśli logi odbioru wielokrotnie pokazują
DecryptionFailed(UnencryptedWhenPassthroughDisabled)po aktualizacji, zbierz raport zależności i logi. Dołączona linia@discordjs/voiceobejmuje upstreamową poprawkę wypełniania z PR discord.js #11449, która zamknęła issue discord.js #11419. - Zdarzenia odbioru
The operation was abortedsą oczekiwane, gdy OpenClaw finalizuje przechwycony segment mówcy; są to szczegółowe diagnostyki, a nie ostrzeżenia. - Szczegółowe logi głosowe Discord zawierają ograniczony jednowierszowy podgląd transkryptu STT dla każdego zaakceptowanego segmentu mówcy, więc debugowanie pokazuje zarówno stronę użytkownika, jak i stronę odpowiedzi agenta bez zrzucania nieograniczonego tekstu transkryptu.
- W trybie
agent-proxywymuszona rezerwowa konsultacja pomija prawdopodobnie niekompletne fragmenty transkryptu, takie jak tekst kończący się na...albo końcowy łącznik, taki jakand, oraz oczywiste nieakcyjne zakończenia, takie jak „zaraz wracam” lub „pa”. Logi pokazująforced agent consult skipped reason=..., gdy zapobiega to nieaktualnej odpowiedzi w kolejce.
node-gyp.
Po zainstalowaniu natywnego dodatku uruchom Gateway za pomocą:
discord voice: opus decoder: @discordjs/opus. Bez włączenia przez env albo jeśli natywnego dodatku brakuje lub nie może się załadować na hoście, OpenClaw loguje discord voice: opus decoder: opusscript i nadal odbiera głos przez rezerwową implementację pure-JS.
Potok STT plus TTS:
- Przechwytywanie PCM Discord jest konwertowane do tymczasowego pliku WAV.
tools.media.audioobsługuje STT, na przykładopenai/gpt-4o-mini-transcribe.- Transkrypt jest wysyłany przez wejście Discord i trasowanie, podczas gdy odpowiedź LLM działa z polityką wyjścia głosowego, która ukrywa narzędzie agenta
ttsi prosi o zwrócony tekst, ponieważ Discord voice jest właścicielem końcowego odtwarzania TTS. voice.model, gdy jest ustawione, zastępuje tylko LLM odpowiedzi dla tej tury kanału głosowego.voice.ttsjest scalane na wierzchumessages.tts; dostawcy obsługujący strumieniowanie zasilają odtwarzacz bezpośrednio, w przeciwnym razie wynikowy plik audio jest odtwarzany w dołączonym kanale.
voice.agentSession każdy kanał głosowy otrzymuje własną trasowaną sesję OpenClaw. Na przykład /vc join channel:234567890123456789 rozmawia z sesją dla tego kanału głosowego Discord. Model czasu rzeczywistego jest tylko frontendem głosowym; merytoryczne żądania są przekazywane do skonfigurowanego agenta OpenClaw. Jeśli model czasu rzeczywistego utworzy końcowy transkrypt bez wywołania narzędzia konsultacji, OpenClaw wymusza konsultację jako mechanizm rezerwowy, więc domyślne zachowanie nadal przypomina rozmowę z agentem.
Przykład starszego STT plus TTS:
agent-proxy bot dołącza do skonfigurowanego kanału głosowego, ale tury agenta OpenClaw używają normalnej trasowanej sesji i agenta kanału docelowego. Sesja głosowa czasu rzeczywistego wypowiada zwrócony wynik z powrotem w kanale głosowym. Agent nadzorujący nadal może używać zwykłych narzędzi wiadomości zgodnie ze swoją polityką narzędzi, w tym wysłać oddzielną wiadomość Discord, jeśli jest to właściwe działanie.
Przydatne formy celu:
target: "channel:123456789012345678"trasuje przez sesję kanału tekstowego Discord.target: "123456789012345678"jest traktowane jako cel kanału.target: "dm:123456789012345678"lubtarget: "user:123456789012345678"trasuje przez tę sesję wiadomości bezpośrednich.
bargeIn: true pozwala zdarzeniom rozpoczęcia mówienia przez użytkownika w Discord oraz dźwiękowi już aktywnego mówcy anulować aktywne odpowiedzi czasu rzeczywistego, zanim kolejna przechwycona tura dotrze do OpenAI. Bardzo wczesne sygnały wejścia w wypowiedź z audioEndMs poniżej minBargeInAudioEndMs są traktowane jako prawdopodobne echo/szum i ignorowane, aby model nie urywał wypowiedzi przy pierwszej ramce odtwarzania.
Oczekiwane logi głosu:
- Przy dołączaniu:
discord voice: joining ... voiceSession=... supervisorSession=... agentSessionMode=... voiceModel=... realtimeModel=... - Przy uruchomieniu trybu czasu rzeczywistego:
discord voice: realtime bridge starting ... autoRespond=false interruptResponse=false bargeIn=false minBargeInAudioEndMs=... - Przy dźwięku mówcy:
discord voice: realtime speaker turn opened ...,discord voice: realtime input audio started ... outputAudioMs=... outputActive=...orazdiscord voice: realtime speaker turn closed ... chunks=... discordBytes=... realtimeBytes=... interruptedPlayback=... - Przy pominięciu nieaktualnej mowy:
discord voice: realtime forced agent consult skipped reason=incomplete-transcript ...lubreason=non-actionable-closing ... - Przy zakończeniu odpowiedzi czasu rzeczywistego:
discord voice: realtime audio playback finishing reason=response.done ... audioMs=... chunks=... - Przy zatrzymaniu/zresetowaniu odtwarzania:
discord voice: realtime audio playback stopped reason=... audioMs=... elapsedMs=... chunks=... - Przy konsultacji czasu rzeczywistego:
discord voice: realtime consult requested ... voiceSession=... supervisorSession=... question=... - Przy odpowiedzi agenta:
discord voice: agent turn answer ... - Przy zakolejkowanej dokładnej mowie:
discord voice: realtime exact speech queued ... queued=... outputAudioMs=... outputActive=..., a następniediscord voice: realtime exact speech dequeued reason=player-idle ... - Przy wykryciu wejścia w wypowiedź:
discord voice: realtime barge-in detected source=speaker-start ...lubdiscord voice: realtime barge-in detected source=active-speaker-audio ..., a następniediscord voice: realtime barge-in requested reason=... outputAudioMs=... outputActive=... - Przy przerwaniu trybu czasu rzeczywistego:
discord voice: realtime model interrupt requested client:response.cancel reason=barge-in, a następnie albodiscord voice: realtime model audio truncated client:conversation.item.truncate reason=barge-in audioEndMs=..., albodiscord voice: realtime model interrupt confirmed server:response.done status=cancelled ... - Przy zignorowanym echu/szumie:
discord voice: realtime model interrupt ignored client:conversation.item.truncate.skipped reason=barge-in audioEndMs=0 minAudioEndMs=250 - Przy wyłączonym wejściu w wypowiedź:
discord voice: realtime capture ignored during playback (barge-in disabled) ... - Przy bezczynnym odtwarzaniu:
discord voice: realtime barge-in ignored reason=... outputActive=false ... playbackChunks=0
realtime audio playback startedoznacza, że Discord zaczął odtwarzać dźwięk asystenta. Od tego momentu most zaczyna zliczać porcje wyjścia asystenta, bajty PCM Discord, bajty czasu rzeczywistego dostawcy oraz czas trwania syntetyzowanego dźwięku.realtime speaker turn openedoznacza, że mówca Discord stał się aktywny. Jeśli odtwarzanie jest już aktywne ibargeInjest włączone, po tym może pojawić siębarge-in detected source=speaker-start.realtime input audio startedoznacza pierwszą rzeczywistą ramkę dźwięku otrzymaną dla tej tury mówcy.outputActive=truelub niezeroweoutputAudioMsw tym miejscu oznacza, że mikrofon wysyła wejście, gdy odtwarzanie asystenta jest nadal aktywne.barge-in detected source=active-speaker-audiooznacza, że OpenClaw wykrył dźwięk mówcy na żywo, gdy odtwarzanie asystenta było aktywne. Jest to przydatne do odróżnienia prawdziwego przerwania od zdarzenia rozpoczęcia mówienia w Discord bez użytecznego dźwięku.barge-in requested reason=...oznacza, że OpenClaw poprosił dostawcę czasu rzeczywistego o anulowanie lub skrócenie aktywnej odpowiedzi. ZawieraoutputAudioMs,outputActiveiplaybackChunks, aby było widać, ile dźwięku asystenta faktycznie odtworzono przed przerwaniem.realtime audio playback stopped reason=...to lokalny punkt resetowania odtwarzania Discord. Powód wskazuje, kto zatrzymał odtwarzanie:barge-in,player-idle,provider-clear-audio,forced-agent-consult,stream-closelubsession-close.realtime speaker turn closedpodsumowuje przechwyconą turę wejściową.chunks=0lubhasAudio=falseoznacza, że tura mówcy została otwarta, ale do mostu czasu rzeczywistego nie dotarł żaden użyteczny dźwięk.interruptedPlayback=trueoznacza, że ta tura wejściowa nałożyła się na wyjście asystenta i uruchomiła logikę wejścia w wypowiedź.
outputAudioMs: czas trwania dźwięku asystenta wygenerowanego przez dostawcę czasu rzeczywistego przed danym wierszem logu.audioMs: czas trwania dźwięku asystenta zliczony przez OpenClaw przed zatrzymaniem odtwarzania.elapsedMs: czas zegarowy między otwarciem a zamknięciem strumienia odtwarzania lub tury mówcy.discordBytes: bajty stereo PCM 48 kHz wysłane do lub odebrane z głosu Discord.realtimeBytes: bajty PCM w formacie dostawcy wysłane do lub odebrane od dostawcy czasu rzeczywistego.playbackChunks: porcje dźwięku asystenta przekazane do Discord dla aktywnej odpowiedzi.sinceLastAudioMs: odstęp między ostatnią przechwyconą ramką dźwięku mówcy a zamknięciem tury mówcy.
- Natychmiastowe ucięcie z
source=active-speaker-audio, małymoutputAudioMsi tym samym użytkownikiem w pobliżu zwykle wskazuje na echo głośnika trafiające do mikrofonu. Zwiększvoice.realtime.minBargeInAudioEndMs, zmniejsz głośność głośnika, użyj słuchawek albo ustawvoice.realtime.providers.openai.interruptResponseOnInputAudio: false. source=speaker-start, po którym następujespeaker turn closed ... hasAudio=false, oznacza, że Discord zgłosił rozpoczęcie mówienia, ale żaden dźwięk nie dotarł do OpenClaw. Może to być przejściowe zdarzenie głosowe Discord, działanie bramki szumów albo krótkie aktywowanie mikrofonu przez klienta.audio playback stopped reason=stream-closebez pobliskiego wejścia w wypowiedź lubprovider-clear-audiooznacza, że lokalny strumień odtwarzania Discord zakończył się nieoczekiwanie. Sprawdź poprzedzające logi dostawcy i odtwarzacza Discord.capture ignored during playback (barge-in disabled)oznacza, że OpenClaw celowo odrzucił wejście, gdy dźwięk asystenta był aktywny. Włączvoice.realtime.bargeIn, jeśli chcesz, aby mowa przerywała odtwarzanie.barge-in ignored ... outputActive=falseoznacza, że VAD Discord lub dostawcy zgłosił mowę, ale OpenClaw nie miał aktywnego odtwarzania do przerwania. Nie powinno to ucinać dźwięku.
voice.model, uwierzytelnianie STT dla tools.media.audio, uwierzytelnianie TTS dla messages.tts/voice.tts oraz uwierzytelnianie dostawcy czasu rzeczywistego dla voice.realtime.providers lub normalnej konfiguracji uwierzytelniania dostawcy.
Wiadomości głosowe
Wiadomości głosowe Discord pokazują podgląd fali i wymagają dźwięku OGG/Opus. OpenClaw generuje falę automatycznie, ale potrzebujeffmpeg i ffprobe na hoście Gateway, aby sprawdzić i przekonwertować dźwięk.
- Podaj lokalną ścieżkę pliku (adresy URL są odrzucane).
- Pomiń treść tekstową (Discord odrzuca tekst + wiadomość głosową w tym samym ładunku).
- Akceptowany jest dowolny format dźwięku; OpenClaw w razie potrzeby konwertuje go do OGG/Opus.
Rozwiązywanie problemów
Użyto niedozwolonych intencji albo bot nie widzi wiadomości gildii
Użyto niedozwolonych intencji albo bot nie widzi wiadomości gildii
- włącz Message Content Intent
- włącz Server Members Intent, gdy zależysz od rozwiązywania użytkowników/członków
- zrestartuj Gateway po zmianie intencji
Wiadomości gildii są nieoczekiwanie blokowane
Wiadomości gildii są nieoczekiwanie blokowane
- sprawdź
groupPolicy - sprawdź listę dozwolonych gildii w
channels.discord.guilds - jeśli istnieje mapa
channelsgildii, dozwolone są tylko wymienione kanały - sprawdź zachowanie
requireMentioni wzorce wzmianek
Require mention jest false, ale nadal blokuje
Require mention jest false, ale nadal blokuje
groupPolicy="allowlist"bez pasującej listy dozwolonych gildii/kanałówrequireMentionskonfigurowane w złym miejscu (musi być podchannels.discord.guildsalbo we wpisie kanału)- nadawca zablokowany przez listę dozwolonych
usersgildii/kanału
Długotrwałe tury Discord albo zduplikowane odpowiedzi
Długotrwałe tury Discord albo zduplikowane odpowiedzi
Slow listener detected ...stuck session: sessionKey=agent:...:discord:... state=processing ...
- pojedyncze konto:
channels.discord.eventQueue.listenerTimeout - wiele kont:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout - kontroluje to tylko pracę listenera Gateway Discord, nie czas życia tury agenta
Ostrzeżenia o przekroczeniu limitu czasu wyszukiwania metadanych Gateway
Ostrzeżenia o przekroczeniu limitu czasu wyszukiwania metadanych Gateway
/gateway/bot przed połączeniem. Przejściowe błędy wracają do domyślnego adresu URL Gateway Discord i są ograniczane częstotliwościowo w logach.Pokrętła limitu czasu metadanych:- pojedyncze konto:
channels.discord.gatewayInfoTimeoutMs - wiele kont:
channels.discord.accounts.<accountId>.gatewayInfoTimeoutMs - awaryjna zmienna środowiskowa, gdy konfiguracja nie jest ustawiona:
OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS - domyślnie:
30000(30 sekund), maks.:120000
Restarty po przekroczeniu limitu czasu READY Gateway
Restarty po przekroczeniu limitu czasu READY Gateway
READY Gateway Discord podczas uruchamiania i po ponownych połączeniach środowiska wykonawczego. Konfiguracje z wieloma kontami i stopniowaniem uruchamiania mogą wymagać dłuższego okna READY podczas startu niż domyślne.Pokrętła limitu czasu READY:- uruchamianie, pojedyncze konto:
channels.discord.gatewayReadyTimeoutMs - uruchamianie, wiele kont:
channels.discord.accounts.<accountId>.gatewayReadyTimeoutMs - awaryjna zmienna środowiskowa dla uruchamiania, gdy konfiguracja nie jest ustawiona:
OPENCLAW_DISCORD_READY_TIMEOUT_MS - domyślnie przy uruchamianiu:
15000(15 sekund), maks.:120000 - środowisko wykonawcze, pojedyncze konto:
channels.discord.gatewayRuntimeReadyTimeoutMs - środowisko wykonawcze, wiele kont:
channels.discord.accounts.<accountId>.gatewayRuntimeReadyTimeoutMs - awaryjna zmienna środowiskowa dla środowiska wykonawczego, gdy konfiguracja nie jest ustawiona:
OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS - domyślnie w środowisku wykonawczym:
30000(30 sekund), maks.:120000
Niezgodności audytu uprawnień
Niezgodności audytu uprawnień
channels status --probe działają tylko dla numerycznych identyfikatorów kanałów.Jeśli używasz kluczy typu slug, dopasowywanie w środowisku wykonawczym nadal może działać, ale sonda 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 - polityka DM wyłączona:
channels.discord.dmPolicy="disabled"(starsze:channels.discord.dm.policy) - oczekiwanie na zatwierdzenie parowania w trybie
pairing
Pętle bot-bot
Pętle bot-bot
channels.discord.allowBots=true, użyj ścisłych reguł wzmianek i listy dozwolonych, aby uniknąć zachowania pętli.
Preferuj channels.discord.allowBots="mentions", aby akceptować tylko wiadomości botów, które wspominają bota.Problemy z Voice STT z błędem DecryptionFailed(...)
Problemy z Voice STT z błędem DecryptionFailed(...)
- utrzymuj OpenClaw w aktualnej wersji (
openclaw update), aby dostępna była logika odzyskiwania odbioru głosu Discord - 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 dzienniki pod kątem:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- jeśli awarie nadal występują po automatycznym ponownym dołączeniu, zbierz dzienniki i porównaj je z historią odbioru upstream DAVE w discord.js #11419 oraz discord.js #11449
Dokumentacja konfiguracji
Główna dokumentacja: Dokumentacja konfiguracji - Discord.Najważniejsze pola Discord
Najważniejsze pola Discord
- 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 - gateway:
gatewayInfoTimeoutMs,gatewayReadyTimeoutMs,gatewayRuntimeReadyTimeoutMs - odpowiedzi/historia:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - dostarczanie:
textChunkLimit,chunkMode,maxLinesPerMessage - przesyłanie strumieniowe:
streaming(starszy alias:streamMode),streaming.preview.toolProgress,draftChunk,blockStreaming,blockStreamingCoalesce - media/ponawianie:
mediaMaxMb(ogranicza wychodzące przesyłanie plików Discord, domyślnie100MB),retry - akcje:
actions.* - obecność:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - funkcje:
threadBindings, najwyższego poziomubindings[](type: "acp"),pluralkit,execApprovals,intents,agentComponents,heartbeat,responsePrefix
Bezpieczeństwo i operacje
- Traktuj tokeny botów jako sekrety (w nadzorowanych środowiskach preferowane
DISCORD_BOT_TOKEN). - Przyznawaj minimalne wymagane uprawnienia Discord.
- Jeśli wdrożenie poleceń lub stan są nieaktualne, uruchom ponownie gateway i sprawdź ponownie za pomocą
openclaw channels status --probe.