Discord (Bot API)
Stan: gotowy do DM-ów i kanałów serwera za pośrednictwem oficjalnej bramy Discord.Parowanie
Polecenia ukośnikowe
Rozwiązywanie problemów z kanałem
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 uprawnione intencje
- 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 adres URL zaproszenia i dodaj bota do serwera
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (opcjonalne)
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 ikonę serwera na pasku bocznym → Copy Server ID
- Kliknij prawym przyciskiem 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 za pomocą 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łowe) jawny token dla pojedynczego wywołania jest używany tylko 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 pochodzą nadal z wybranego konta w aktywnej migawce środowiska wykonawczego.Zalecane: skonfiguruj obszar roboczy serwera
Gdy DM-y już działają, możesz skonfigurować swój serwer Discord jako pełny obszar roboczy, w którym każdy kanał ma własną sesję agenta i własny kontekst. Jest to zalecane w przypadku 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
- Konfiguracja
“Dodaj moje Discord Server ID <server_id> do listy dozwolonych serwerów”
Zezwól na odpowiedzi bez wzmianki @
- Zapytaj swojego agenta
- Konfiguracja
“Pozwól mojemu agentowi odpowiadać na tym serwerze bez konieczności używania @mention”
Zaplanuj użycie pamięci na kanałach serwera
- Zapytaj swojego agenta
- Ręcznie
“Kiedy zadaję pytania na kanałach Discord, używaj memory_search lub memory_get, jeśli potrzebujesz długoterminowego kontekstu z MEMORY.md.”
#coding, #home, #research lub cokolwiek pasuje do Twojego sposobu pracy.
Model środowiska wykonawczego
- Brama zarządza połączeniem Discord.
- Routing odpowiedzi jest deterministyczny: odpowiedzi przychodzące z Discord wracają do Discord.
- Domyślnie (
session.dmScope=main) czaty 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>), przy jednoczesnym przenoszeniuCommandTargetSessionKeydo routowanej sesji rozmowy.
Kanały forum
Kanały forum i medió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 podlegają istniejącym ustawieniom Discord replyToMode.
Obsługiwane bloki:
text,section,separator,actions,media-gallery,file- Wiersze akcji pozwalają na maksymalnie 5 przycisków albo pojedyncze menu wyboru
- Typy wyboru:
string,user,role,mentionable,channel
components.reusable=true, aby umożliwić wielokrotne użycie przycisków, list wyboru i formularzy aż do ich wygaśnięcia.
Aby ograniczyć, kto może kliknąć przycisk, ustaw allowedUsers dla tego przycisku (ID użytkowników Discord, tagi lub *). Gdy jest to skonfigurowane, niedopasowani użytkownicy otrzymują efemeryczną odmowę.
Polecenia ukośnikowe /model i /models otwierają interaktywny wybór modelu z listami rozwijanymi dostawcy i modelu oraz krokiem Submit. Odpowiedź selektora jest efemeryczna i tylko użytkownik, który go wywołał, może z niej korzystać.
Załączniki plików:
- bloki
filemuszą wskazywać referencję załącznika (attachment://<filename>) - przekaż załącznik przez
media/path/filePath(pojedynczy plik); dla wielu plików użyjmedia-gallery - użyj
filename, aby nadpisać nazwę przesyłanego pliku, gdy ma 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 routing
- 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ślne)allowlistopen(wymaga, abychannels.discord.allowFromzawierało"*"; starsze:channels.discord.dm.allowFrom)disabled
pairing).Priorytet 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>
Routing agenta oparty na rolach
Użyjbindings[].match.roles, aby kierować członków serwera Discord do różnych agentów według ID roli. Powiązania oparte na rolach akceptują wyłącznie ID ról i są oceniane po powiązaniach peer lub parent-peer, a przed powiązaniami tylko-serwerowymi. Jeśli powiązanie ustawia także 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
Uprawnione intencje
Uprawnione intencje
- Message Content Intent
- Server Members Intent (zalecane)
setPresence) nie wymaga włączenia aktualizacji obecności 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 (opcjonalne)
Administrator, chyba że jest to wyraźnie potrzebne.Skopiuj ID
Skopiuj ID
- ID serwera
- ID kanału
- ID użytkownika
Polecenia natywne i uwierzytelnianie poleceń
commands.nativedomyślnie ma wartość"auto"i jest włączone dla Discord.- Nadpisanie dla kanału:
channels.discord.commands.native. commands.native=falsejawnie usuwa wcześniej zarejestrowane natywne polecenia Discord.- Uwierzytelnianie natywnych poleceń używa tych samych list dozwolonych/zasad Discord co zwykła obsługa wiadomości.
- Polecenia mogą nadal być widoczne w interfejsie Discord dla użytkowników bez uprawnień; wykonanie nadal wymusza uwierzytelnianie 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ślne)firstallbatched
off wyłącza niejawne wątkowanie odpowiedzi. Jawne tagi [[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
tura przychodząca była odroczoną partią wielu wiadomości. Jest to przydatne,
gdy chcesz używać natywnych odpowiedzi głównie przy niejednoznacznych, gwałtownych seriach czatu, a nie przy każdej
pojedynczej turze wiadomości.ID wiadomości są ujawniane 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 podgląd strumieniowy (off|partial|block|progress, domyślnie:off).- Domyślnie pozostaje
off, ponieważ edycje podglądu w Discord mogą szybko natrafić na limity szybkości, zwłaszcza gdy wiele botów lub bram współdzieli to samo konto lub ruch serwera. progressjest akceptowane dla spójności międzykanałowej i w Discord mapuje się napartial.channels.discord.streamModeto starszy alias i jest automatycznie migrowany.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).
block (ograniczane 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ą routowane 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 uruchomienia i stan powiązań/session idle <duration|off>sprawdź/zaktualizuj automatyczne odwiązywanie 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 domyślne ustawienia globalne.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 kierowanie przyszłych wiadomości do tej samej sesji ACP.- Nadal może to oznaczać „uruchom świeżą 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 wykonawczego, a nie wątkiem Discord. - Wiadomości wątków mogą dziedziczyć powiązanie ACP kanału nadrzędnego.
- 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ślne)allallowlist(używaguilds.<id>.users)
Reakcje potwierdzające
Reakcje potwierdzające
ackReaction wysyła emoji potwierdzenia, gdy OpenClaw przetwarza wiadomość przychodzącą.Kolejność rozwiązywania:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- fallback 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 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 według nazwy/slugu 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, wiadomości proxy 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; gdy to możliwe, 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 wywnioskuje zatwierdzających exec z kanałowego allowFrom, starszego dm.allowFrom ani z 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, monit o zatwierdzenie jest widoczny w kanale. Tylko rozwiązani zatwierdzający mogą używać przycisków; inni użytkownicy otrzymują efemeryczną odmowę. Monity o zatwierdzenie zawierają tekst polecenia, dlatego dostarczanie do kanału włączaj tylko na zaufanych kanałach. Jeśli nie można wyprowadzić ID kanału z klucza sesji, OpenClaw wraca do dostarczania przez DM.Discord renderuje również współdzielone przyciski zatwierdzania używane przez inne kanały czatu. Natywny adapter Discord głównie dodaje routing DM zatwierdzających i rozsyłanie do kanału.
Gdy te przyciski są obecne, są one podstawowym UX zatwierdzania; OpenClaw
powinien dołączać ręczne polecenie /approve tylko wtedy, gdy wynik narzędzia mówi,
że zatwierdzenia na czacie są niedostępne albo ręczne zatwierdzenie jest jedyną drogą.Uwierzytelnianie bramy dla tego modułu obsługi używa tego samego współdzielonego kontraktu rozwiązywania poświadczeń co inni klienci Gateway:- najpierw lokalne uwierzytelnianie z env (
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD, a następniegateway.auth.*) - w trybie lokalnym
gateway.remote.*może być używane jako fallback tylko wtedy, gdygateway.auth.*nie jest ustawione; skonfigurowane, ale nierozwiązane lokalne SecretRef kończą się bezpieczną odmową - 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ń z env
- ID z prefiksem
plugin:są rozwiązywane przezplugin.approval.resolve. - Pozostałe ID są rozwiązywane przez
exec.approval.resolve. - Discord nie wykonuje tutaj dodatkowego przejścia fallback exec-to-plugin; prefiks ID decyduje, którą metodę bramy wywoła.
Narzędzia i bramki działań
Działania wiadomości Discord obejmują wiadomości, administrację kanałami, moderację, obecność i działania na metadanych. Podstawowe przykłady:- wiadomości:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - reakcje:
react,reactions,emojiList - moderacja:
timeout,kick,ban - obecność:
setPresence
event-create akceptuje opcjonalny parametr image (URL lub lokalna ścieżka pliku), aby ustawić obraz okładki zaplanowanego wydarzenia.
Bramki działań znajdują się w 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 wiadomości Discord mogą również przyjmowaćcomponents dla niestandardowego 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).- Ustawienie per konto:
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, aby prowadzić rozmowy w czasie rzeczywistym i ciągłe. To osobna funkcja, niezależna od załączników z wiadomościami głosowymi. Wymagania:- Włącz polecenia natywne (
commands.nativelubchannels.discord.commands.native). - Skonfiguruj
channels.discord.voice. - Bot potrzebuje uprawnień Connect + Speak w docelowym kanale głosowym.
/vc join|leave|status, aby kontrolować sesje. Polecenie używa domyślnego agenta konta i podlega tym samym zasadom listy dozwolonych oraz group policy co pozostałe polecenia Discord.
Przykład automatycznego dołączania:
voice.ttsnadpisujemessages.ttstylko dla odtwarzania głosowego.- Tury transkrypcji głosowej wyprowadzają status właściciela z Discord
allowFrom(lubdm.allowFrom); mówcy niebędący właścicielami nie mogą uzyskiwać 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 bezpośrednio do opcji dołączania@discordjs/voice.- Domyślne wartości
@discordjs/voicetodaveEncryption=trueidecryptionFailureTolerance=24, jeśli nie są ustawione. - OpenClaw obserwuje również błędy deszyfrowania podczas odbioru i automatycznie odzyskuje połączenie, opuszczając i ponownie dołączając do kanału głosowego po powtarzających się błędach 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 automatycznie, ale potrzebuje dostępnychffmpeg i ffprobe na hoście bramy, aby analizować i konwertować pliki audio.
Wymagania i ograniczenia:
- Podaj lokalną ścieżkę pliku (adresy URL są odrzucane).
- Pomiń treść tekstową (Discord nie pozwala na tekst i wiadomość głosową w tym samym ładunku).
- Akceptowany jest dowolny format audio; OpenClaw w razie potrzeby konwertuje go do OGG/Opus.
Rozwiązywanie problemów
Użyto niedozwolonych intencji lub bot nie widzi wiadomości z serwera
Użyto niedozwolonych intencji lub bot nie widzi wiadomości z serwera
- włącz Message Content Intent
- włącz Server Members Intent, jeśli polegasz na rozwiązywaniu użytkowników/członków
- uruchom ponownie bramę po zmianie intencji
Wiadomości z serwera są nieoczekiwanie blokowane
Wiadomości z serwera są nieoczekiwanie blokowane
- sprawdź
groupPolicy - sprawdź listę dozwolonych serwerów w
channels.discord.guilds - jeśli istnieje mapa
channelsdla serwera, dozwolone są tylko wymienione kanały - sprawdź zachowanie
requireMentioni wzorce wzmianek
Require mention ustawione na false, ale nadal jest blokowane
Require mention ustawione na false, ale nadal jest blokowane
groupPolicy="allowlist"bez pasującej listy dozwolonych serwera/kanałurequireMentionskonfigurowane w niewłaściwym miejscu (musi znajdować się wchannels.discord.guildslub we wpisie kanału)- nadawca zablokowany przez listę dozwolonych
usersdla serwera/kanału
Długotrwale działające handlery kończą się timeoutem lub duplikują odpowiedzi
Długotrwale działające handlery kończą się timeoutem 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 powolnej konfiguracji listenera, a inboundWorker.runTimeoutMs
tylko wtedy, gdy chcesz oddzielny bezpiecznik dla kolejkowanych tur agenta.Niezgodności w audycie uprawnień
Niezgodności w audycie uprawnień
channels status --probe działają tylko dla numerycznych ID kanałów.Jeśli używasz kluczy 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żyj ścisłych reguł wzmianki i listy dozwolonych, aby uniknąć zapętlenia.
Preferuj channels.discord.allowBots="mentions", aby akceptować tylko wiadomości botów, które wspominają bota.Głosowe STT gubi dane z DecryptionFailed(...)
Głosowe STT gubi dane z DecryptionFailed(...)
- utrzymuj OpenClaw w aktualnej wersji (
openclaw update), aby logika odzyskiwania odbioru głosu Discord była obecna - potwierdź
channels.discord.voice.daveEncryption=true(domyślne) - 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 błędy utrzymują się po automatycznym ponownym dołączeniu, zbierz logi i porównaj je z discord.js #11419
Wskaźniki dokumentacji konfiguracji
Główna dokumentacja: Kluczowe 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 - worker przychodzący:
inboundWorker.runTimeoutMs - odpowiedzi/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łanie do Discord (domyślnie:100MB)
- 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 botów jako sekrety (w środowiskach nadzorowanych preferowane
DISCORD_BOT_TOKEN). - Przyznawaj minimalne niezbędne uprawnienia Discord.
- Jeśli wdrożenie poleceń lub ich stan są nieaktualne, uruchom ponownie bramę i sprawdź ponownie za pomocą
openclaw channels status --probe.