Pairing
Slash commands
Channel troubleshooting
त्वरित सेटअप
आपको बॉट के साथ एक नया एप्लिकेशन बनाना होगा, बॉट को अपने सर्वर में जोड़ना होगा, और उसे OpenClaw से पेयर करना होगा। हम आपका बॉट अपने निजी सर्वर में जोड़ने की सलाह देते हैं। अगर आपके पास अभी सर्वर नहीं है, तो पहले एक बनाएं (Create My Own > For me and my friends चुनें)।Create a Discord application and bot
Enable privileged intents
- Message Content Intent (आवश्यक)
- Server Members Intent (अनुशंसित; भूमिका अनुमति-सूचियों और नाम-से-ID मिलान के लिए आवश्यक)
- Presence Intent (वैकल्पिक; केवल उपस्थिति अपडेट के लिए आवश्यक)
Copy your bot token
Generate an invite URL and add the bot to your server
botapplications.commands
- चैनल देखें टेक्स्ट अनुमतियां
- संदेश भेजें
- संदेश इतिहास पढ़ें
- लिंक एम्बेड करें
- फ़ाइलें अटैच करें
- प्रतिक्रियाएं जोड़ें (वैकल्पिक)
Enable Developer Mode and collect your IDs
- User Settings (अपने अवतार के पास गियर आइकन) पर क्लिक करें → साइडबार में Developer तक स्क्रॉल करें → Developer Mode चालू करें (नोट: Discord मोबाइल ऐप में, Developer Mode App Settings → Advanced के अंतर्गत है)
- साइडबार में अपने सर्वर आइकन पर राइट-क्लिक करें → Copy Server ID
- अपने स्वयं के अवतार पर राइट-क्लिक करें → Copy User ID
Allow DMs from server members
Set your bot token securely (do not send it in chat)
openclaw gateway run प्रक्रिया को रोककर और फिर से शुरू करके रीस्टार्ट करें।
प्रबंधित सेवा इंस्टॉल के लिए, ऐसे shell से openclaw gateway install चलाएं जहां DISCORD_BOT_TOKEN मौजूद हो, या वैरिएबल को ~/.openclaw/.env में स्टोर करें, ताकि सेवा रीस्टार्ट के बाद env SecretRef को रिज़ॉल्व कर सके।
अगर आपका होस्ट Discord के स्टार्टअप एप्लिकेशन लुकअप से ब्लॉक या rate-limit हो रहा है, तो Developer Portal से Discord एप्लिकेशन/client ID सेट करें ताकि स्टार्टअप उस REST कॉल को छोड़ सके। डिफ़ॉल्ट अकाउंट के लिए channels.discord.applicationId का उपयोग करें, या जब आप कई Discord बॉट चलाते हैं तो channels.discord.accounts.<accountId>.applicationId का उपयोग करें।Configure OpenClaw and pair
- Ask your agent
- CLI / config
“मैंने अपना Discord बॉट टोकन पहले ही config में सेट कर दिया है। कृपया User ID<user_id>और Server ID<server_id>के साथ Discord सेटअप पूरा करें।”
Approve first DM pairing
- Ask your agent
- CLI
“इस Discord पेयरिंग कोड को मंज़ूर करें: <CODE>”
DISCORD_BOT_TOKEN केवल डिफ़ॉल्ट अकाउंट के लिए उपयोग होता है।
अगर दो सक्षम Discord अकाउंट एक ही बॉट टोकन पर रिज़ॉल्व होते हैं, तो OpenClaw उस टोकन के लिए केवल एक Gateway मॉनिटर शुरू करता है। config-sourced टोकन डिफ़ॉल्ट env fallback पर प्राथमिकता पाता है; अन्यथा पहला सक्षम अकाउंट प्राथमिकता पाता है और डुप्लिकेट अकाउंट disabled के रूप में रिपोर्ट होता है।
उन्नत outbound calls (message tool/channel actions) के लिए, स्पष्ट per-call token उस कॉल के लिए उपयोग होता है। यह send और read/probe-style actions पर लागू होता है (उदाहरण के लिए read/search/fetch/thread/pins/permissions)। अकाउंट नीति/retry सेटिंग्स अब भी सक्रिय runtime snapshot में चुने गए अकाउंट से आती हैं।अनुशंसित: गिल्ड workspace सेट करें
DMs काम करने लगें, तो आप अपने Discord सर्वर को पूर्ण workspace के रूप में सेट कर सकते हैं, जहां प्रत्येक चैनल को अपने context के साथ अपना एजेंट session मिलता है। यह उन निजी सर्वरों के लिए अनुशंसित है जहां केवल आप और आपका बॉट हैं।Add your server to the guild allowlist
- Ask your agent
- Config
“मेरे Discord Server ID <server_id> को guild allowlist में जोड़ें”
Allow responses without @mention
messages.groupChat.visibleReplies: "message_tool" में opt in करें ताकि एजेंट lurk कर सके और केवल तभी पोस्ट करे जब वह तय करे कि चैनल reply उपयोगी है। यह GPT 5.5 जैसे latest-generation, tool-reliable models के साथ सबसे अच्छा काम करता है। Ambient room events शांत रहते हैं जब तक tool न भेजे। पूर्ण lurk-mode config के लिए Ambient room events देखें।अगर Discord typing दिखाता है और logs में token usage दिखता है लेकिन कोई posted message नहीं है, तो जांचें कि turn ambient room event के रूप में configured था या message-tool visible replies में opt in किया गया था।- Ask your agent
- Config
“मेरे एजेंट को इस सर्वर पर @mentioned होने की ज़रूरत के बिना जवाब देने दें”
Plan for memory in guild channels
- Ask your agent
- Manual
“जब मैं Discord channels में प्रश्न पूछूं, तो अगर आपको MEMORY.md से long-term context चाहिए तो memory_search या memory_get का उपयोग करें।”
#coding, #home, #research, या अपने workflow के अनुकूल कुछ भी सेट कर सकते हैं।
Runtime model
- Gateway Discord कनेक्शन का स्वामी है।
- उत्तर रूटिंग निर्धारक है: Discord से आने वाले उत्तर वापस Discord पर जाते हैं।
- Discord guild/channel मेटाडेटा को मॉडल प्रॉम्प्ट में अविश्वसनीय संदर्भ के रूप में जोड़ा जाता है, न कि उपयोगकर्ता को दिखने वाले उत्तर प्रीफिक्स के रूप में। यदि कोई मॉडल उस एनवलप को वापस कॉपी करता है, तो OpenClaw आउटबाउंड उत्तरों और भविष्य के रीप्ले संदर्भ से कॉपी किया गया मेटाडेटा हटा देता है।
- डिफ़ॉल्ट रूप से (
session.dmScope=main), सीधे चैट एजेंट मुख्य सत्र (agent:main:main) साझा करते हैं। - Guild चैनल अलग-थलग सत्र कुंजियां हैं (
agent:<agentId>:discord:channel:<channelId>)। - Group DMs डिफ़ॉल्ट रूप से अनदेखे किए जाते हैं (
channels.discord.dm.groupEnabled=false)। - नेटिव slash commands अलग-थलग कमांड सत्रों (
agent:<agentId>:discord:slash:<userId>) में चलते हैं, जबकि रूट की गई बातचीत के सत्र तकCommandTargetSessionKeyअब भी ले जाते हैं। - Discord को टेक्स्ट-केवल cron/heartbeat घोषणा डिलीवरी अंतिम assistant-visible उत्तर का एक बार उपयोग करती है। Media और संरचित component payloads तब बहु-संदेश बने रहते हैं जब एजेंट कई deliverable payloads उत्सर्जित करता है।
Forum चैनल
Discord forum और media चैनल केवल thread posts स्वीकार करते हैं। OpenClaw उन्हें बनाने के दो तरीकों का समर्थन करता है:- thread को अपने-आप बनाने के लिए forum parent (
channel:<forumId>) को संदेश भेजें। thread title आपके संदेश की पहली गैर-खाली पंक्ति का उपयोग करता है। - thread सीधे बनाने के लिए
openclaw message thread createका उपयोग करें। forum चैनलों के लिए--message-idपास न करें।
channel:<threadId>)।
Interactive components
OpenClaw एजेंट संदेशों के लिए Discord components v2 containers का समर्थन करता है।components payload के साथ message tool का उपयोग करें। Interaction परिणाम सामान्य inbound messages के रूप में एजेंट को वापस रूट किए जाते हैं और मौजूदा Discord replyToMode सेटिंग्स का पालन करते हैं।
समर्थित blocks:
text,section,separator,actions,media-gallery,file- Action rows 5 buttons तक या एक single select menu की अनुमति देते हैं
- Select types:
string,user,role,mentionable,channel
components.reusable=true सेट करें।
कौन button क्लिक कर सकता है इसे सीमित करने के लिए, उस button पर allowedUsers सेट करें (Discord user IDs, tags, या *)। कॉन्फ़िगर होने पर, मेल न खाने वाले उपयोगकर्ताओं को ephemeral denial मिलता है।
Component callbacks डिफ़ॉल्ट रूप से 30 मिनट बाद समाप्त हो जाते हैं। डिफ़ॉल्ट Discord account के लिए उस callback registry lifetime को बदलने के लिए channels.discord.agentComponents.ttlMs सेट करें, या multi-account setup में एक account को override करने के लिए channels.discord.accounts.<accountId>.agentComponents.ttlMs सेट करें। मान milliseconds में है, positive integer होना चाहिए, और 86400000 (24 घंटे) पर capped है। Longer TTLs review या approval workflows के लिए उपयोगी हैं जिन्हें buttons को usable बनाए रखना होता है, लेकिन वे उस window को भी बढ़ाते हैं जहां पुराना Discord message अभी भी action trigger कर सकता है। workflow के अनुकूल सबसे छोटा TTL प्राथमिकता दें, और जब stale callbacks चौंकाने वाले हों तब default बनाए रखें।
/model और /models slash commands provider, model, और compatible runtime dropdowns plus Submit step के साथ interactive model picker खोलते हैं। /models add deprecated है और अब chat से models register करने के बजाय deprecation message लौटाता है। picker reply ephemeral है और केवल invoke करने वाला user इसका उपयोग कर सकता है। Discord select menus 25 options तक सीमित हैं, इसलिए जब आप picker में dynamically discovered models केवल चुने गए providers जैसे openai या vllm के लिए दिखाना चाहते हैं, तो agents.defaults.models में provider/* entries जोड़ें।
File attachments:
fileblocks को attachment reference (attachment://<filename>) की ओर संकेत करना चाहिए- attachment
media/path/filePath(single file) के माध्यम से दें; multiple files के लिएmedia-galleryका उपयोग करें - जब upload name attachment reference से match करना चाहिए, तो उसे override करने के लिए
filenameका उपयोग करें
- 5 fields तक के साथ
components.modalजोड़ें - Field types:
text,checkbox,radio,select,role-select,user-select - OpenClaw trigger button अपने-आप जोड़ता है
Access control और routing
- DM policy
- Access groups
- Guild policy
- Mentions and group DMs
channels.discord.dmPolicy DM access को नियंत्रित करता है। channels.discord.allowFrom canonical DM allowlist है।pairing(default)allowlistopen(channels.discord.allowFromमें"*"शामिल होना आवश्यक है)disabled
pairing mode में pairing के लिए prompt किए जाते हैं)।Multi-account precedence:channels.discord.accounts.default.allowFromकेवलdefaultaccount पर लागू होता है।- एक account के लिए,
allowFromlegacydm.allowFromपर precedence लेता है। - Named accounts
channels.discord.allowFrominherit करते हैं जब उनका अपनाallowFromऔर legacydm.allowFromunset हो। - Named accounts
channels.discord.accounts.default.allowFrominherit नहीं करते।
channels.discord.dm.policy और channels.discord.dm.allowFrom अभी भी compatibility के लिए read होते हैं। openclaw doctor --fix उन्हें dmPolicy और allowFrom में migrate करता है जब वह access बदले बिना ऐसा कर सकता है।delivery के लिए DM target format:user:<id><@id>mention
allowFrom में listed IDs compatibility के लिए user DM targets के रूप में treat किए जाते हैं।Role-based agent routing
Discord guild सदस्यों को role ID के आधार पर अलग-अलग एजेंटों तक रूट करने के लिएbindings[].match.roles का उपयोग करें। भूमिका-आधारित bindings केवल role IDs स्वीकार करते हैं और peer या parent-peer bindings के बाद तथा guild-only bindings से पहले मूल्यांकित होते हैं। यदि कोई binding अन्य match फ़ील्ड भी सेट करती है (उदाहरण के लिए peer + guildId + roles), तो सभी कॉन्फ़िगर किए गए फ़ील्ड का मिलना ज़रूरी है।
मूल commands और command auth
commands.nativeका डिफ़ॉल्ट"auto"है और यह Discord के लिए सक्षम है।- प्रति-channel override:
channels.discord.commands.native। commands.native=falsestartup के दौरान Discord slash-command registration और cleanup को छोड़ देता है। पहले से registered commands Discord में तब तक दिखाई दे सकते हैं जब तक आप उन्हें Discord app से हटा नहीं देते।- मूल command auth सामान्य message handling जैसी ही Discord allowlists/policies का उपयोग करता है।
- Commands उन उपयोगकर्ताओं के लिए भी Discord UI में दिखाई दे सकते हैं जो authorized नहीं हैं; execution फिर भी OpenClaw auth लागू करता है और “अधिकृत नहीं” लौटाता है।
ephemeral: true
सुविधा विवरण
Reply tags and native replies
Reply tags and native replies
Link previews
Link previews
channels.discord.accounts.<id>.suppressEmbeds सेट करें। Agent message-tool sends किसी single message के लिए suppressEmbeds: false भी pass कर सकते हैं। Explicit Discord embeds payloads डिफ़ॉल्ट link-preview setting से suppressed नहीं होते।Live stream preview
Live stream preview
channels.discord.streaming off | partial | block | progress (डिफ़ॉल्ट) लेता है। progress एक editable status draft रखता है और final delivery तक उसे tool progress से update करता है; shared starter label एक rolling line है, इसलिए पर्याप्त काम दिखाई देने पर यह बाकी के साथ scroll away हो जाता है। streamMode legacy runtime alias है। persisted config को canonical key में rewrite करने के लिए openclaw doctor --fix चलाएँ।Discord preview edits अक्षम करने के लिए channels.discord.streaming.mode को off पर सेट करें। यदि Discord block streaming explicitly enabled है, तो OpenClaw double-streaming से बचने के लिए preview stream छोड़ देता है।partialtokens आने पर एक single preview message को edit करता है।blockdraft-sized chunks emit करता है (size और breakpoints tune करने के लिएdraftChunkउपयोग करें,textChunkLimitतक clamped)।- Media, error, और explicit-reply finals pending preview edits cancel करते हैं।
streaming.preview.toolProgress(डिफ़ॉल्टtrue) नियंत्रित करता है कि tool/progress updates preview message reuse करते हैं या नहीं।- Tool/progress rows उपलब्ध होने पर compact emoji + title + detail के रूप में render होते हैं, उदाहरण के लिए
🛠️ Bash: run testsया🔎 Web Search: for "query"। streaming.progress.commentary(डिफ़ॉल्टfalse) temporary progress draft में assistant commentary/preamble text के लिए opt in करता है। Commentary display से पहले clean की जाती है, transient रहती है, और final answer delivery नहीं बदलती।streaming.progress.maxLineCharsper-line progress preview budget नियंत्रित करता है। Prose word boundaries पर shortened होता है; command और path details उपयोगी suffixes रखते हैं।streaming.preview.commandText/streaming.progress.commandTextcompact progress lines में command/exec detail नियंत्रित करता है:raw(डिफ़ॉल्ट) याstatus(केवल tool label)।
block streaming explicitly enabled हो, तो OpenClaw double-streaming से बचने के लिए preview stream छोड़ देता है।History, context, and thread behavior
History, context, and thread behavior
channels.discord.historyLimitडिफ़ॉल्ट20- fallback:
messages.groupChat.historyLimit 0अक्षम करता है
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord threads channel sessions के रूप में route होते हैं और override न होने पर parent channel config inherit करते हैं।
- Thread sessions parent channel के session-level
/modelselection को model-only fallback के रूप में inherit करते हैं; thread-local/modelselections फिर भी precedence लेते हैं और transcript inheritance enabled न हो तो parent transcript history copy नहीं होती। channels.discord.thread.inheritParent(डिफ़ॉल्टfalse) नए auto-threads को parent transcript से seeding के लिए opt in करता है। Per-account overrideschannels.discord.accounts.<id>.thread.inheritParentके अंतर्गत होते हैं।- Message-tool reactions
user:<id>DM targets resolve कर सकते हैं। guilds.<guild>.channels.<channel>.requireMention: falsereply-stage activation fallback के दौरान preserved रहता है।
Thread-bound sessions for subagents
Thread-bound sessions for subagents
/focus <target>current/new thread को subagent/session target से bind करें/unfocuscurrent thread binding हटाएँ/agentsactive runs और binding state दिखाएँ/session idle <duration|off>focused bindings के लिए inactivity auto-unfocus inspect/update करें/session max-age <duration|off>focused bindings के लिए hard max age inspect/update करें
session.threadBindings.*global defaults सेट करता है।channels.discord.threadBindings.*Discord behavior override करता है।spawnSessionssessions_spawn({ thread: true })और ACP thread spawns के लिए auto-create/bind threads नियंत्रित करता है। डिफ़ॉल्ट:true।defaultSpawnContextthread-bound spawns के लिए native subagent context नियंत्रित करता है। डिफ़ॉल्ट:"fork"।- Deprecated
spawnSubagentSessions/spawnAcpSessionskeysopenclaw doctor --fixद्वारा migrate की जाती हैं। - यदि किसी account के लिए thread bindings disabled हैं, तो
/focusऔर related thread binding operations unavailable होते हैं।
Persistent ACP channel bindings
Persistent ACP channel bindings
bindings[]withtype: "acp"andmatch.channel: "discord"
/acp spawn codex --bind herecurrent channel या thread को वहीं bind करता है और future messages को उसी ACP session पर रखता है। Thread messages parent channel binding inherit करते हैं।- Bound channel या thread में,
/newऔर/resetउसी ACP session को वहीं reset करते हैं। Temporary thread bindings active रहते समय target resolution override कर सकते हैं। spawnSessions--thread auto|hereके जरिए child thread creation/binding gate करता है।
Reaction notifications
Reaction notifications
offown(डिफ़ॉल्ट)allallowlist(guilds.<id>.usersका उपयोग करता है)
Ack reactions
Ack reactions
ackReaction OpenClaw द्वारा inbound message process करते समय acknowledgement emoji भेजता है।Resolution order:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- agent identity emoji fallback (
agents.list[].identity.emoji, अन्यथा ”👀”)
- Discord unicode emoji या custom emoji names स्वीकार करता है।
- किसी channel या account के लिए reaction disable करने के लिए
""उपयोग करें।
Config writes
Config writes
/config set|unset flows को प्रभावित करता है (जब command features enabled हों)।Disable:Gateway proxy
Gateway proxy
channels.discord.proxy के साथ HTTP(S) proxy के माध्यम से route करें।PluralKit support
PluralKit support
- अनुमति-सूचियाँ
pk:<memberId>का उपयोग कर सकती हैं - सदस्य प्रदर्शन नामों का मिलान नाम/स्लग से केवल तब किया जाता है जब
channels.discord.dangerouslyAllowNameMatching: trueहो - लुकअप मूल संदेश ID का उपयोग करते हैं और समय-सीमा से बाधित होते हैं
- यदि लुकअप विफल होता है, तो प्रॉक्सीड संदेशों को बॉट संदेश माना जाता है और
allowBots=trueन होने पर छोड़ दिया जाता है
Outbound mention aliases
Outbound mention aliases
mentionAliases का उपयोग करें। कुंजियाँ अग्रणी @ के बिना हैंडल होती हैं; मान Discord उपयोगकर्ता ID होते हैं। अज्ञात हैंडल, @everyone, @here, और Markdown कोड स्पैन के अंदर मेंशन अपरिवर्तित छोड़े जाते हैं।Presence configuration
Presence configuration
- 0: चल रहा है
- 1: स्ट्रीमिंग (
activityUrlआवश्यक) - 2: सुन रहा है
- 3: देख रहा है
- 4: कस्टम (गतिविधि टेक्स्ट को स्थिति अवस्था के रूप में उपयोग करता है; इमोजी वैकल्पिक है)
- 5: प्रतिस्पर्धा कर रहा है
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText({reason}प्लेसहोल्डर का समर्थन करता है)
Approvals in Discord
Approvals in Discord
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(वैकल्पिक; संभव होने परcommands.ownerAllowFromपर वापस जाता है)channels.discord.execApprovals.target(dm|channel|both, डिफ़ॉल्ट:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled सेट नहीं है या "auto" है और कम से कम एक अनुमोदक को हल किया जा सकता है, चाहे execApprovals.approvers से या commands.ownerAllowFrom से, Discord स्थानीय exec अनुमोदनों को स्वतः सक्षम करता है। Discord चैनल allowFrom, पुराने dm.allowFrom, या direct-message defaultTo से exec अनुमोदकों का अनुमान नहीं लगाता। Discord को स्थानीय अनुमोदन क्लाइंट के रूप में स्पष्ट रूप से अक्षम करने के लिए enabled: false सेट करें।/diagnostics और /export-trajectory जैसे संवेदनशील स्वामी-केवल समूह कमांडों के लिए, OpenClaw अनुमोदन प्रॉम्प्ट और अंतिम परिणाम निजी रूप से भेजता है। जब आह्वान करने वाले स्वामी के पास Discord स्वामी रूट होता है, तो यह पहले Discord DM का प्रयास करता है; यदि वह उपलब्ध नहीं है, तो यह commands.ownerAllowFrom से पहले उपलब्ध स्वामी रूट, जैसे Telegram, पर वापस जाता है।जब target channel या both होता है, तो अनुमोदन प्रॉम्प्ट चैनल में दिखाई देता है। केवल हल किए गए अनुमोदक ही बटनों का उपयोग कर सकते हैं; अन्य उपयोगकर्ताओं को क्षणिक अस्वीकृति मिलती है। अनुमोदन प्रॉम्प्ट में कमांड टेक्स्ट शामिल होता है, इसलिए चैनल डिलीवरी केवल विश्वसनीय चैनलों में सक्षम करें। यदि चैनल ID को सत्र कुंजी से निकाला नहीं जा सकता, तो OpenClaw DM डिलीवरी पर वापस जाता है।Discord अन्य चैट चैनलों द्वारा उपयोग किए गए साझा अनुमोदन बटनों को भी रेंडर करता है। स्थानीय Discord अडैप्टर मुख्य रूप से अनुमोदक DM रूटिंग और चैनल फैनआउट जोड़ता है।
जब वे बटन मौजूद हों, तो वे प्राथमिक अनुमोदन UX होते हैं; OpenClaw
को मैन्युअल /approve कमांड केवल तब शामिल करना चाहिए जब टूल परिणाम कहे
कि चैट अनुमोदन उपलब्ध नहीं हैं या मैन्युअल अनुमोदन ही एकमात्र पथ है।
यदि Discord स्थानीय अनुमोदन रनटाइम सक्रिय नहीं है, तो OpenClaw
स्थानीय निर्धारक /approve <id> <decision> प्रॉम्प्ट को दृश्यमान रखता है। यदि
रनटाइम सक्रिय है लेकिन किसी भी लक्ष्य को स्थानीय कार्ड डिलीवर नहीं किया जा सकता,
तो OpenClaw लंबित अनुमोदन से सटीक /approve
कमांड के साथ उसी-चैट फ़ॉलबैक सूचना भेजता है।Gateway प्रमाणीकरण और अनुमोदन समाधान साझा Gateway क्लाइंट अनुबंध का पालन करते हैं (plugin: ID plugin.approval.resolve के माध्यम से हल होते हैं; अन्य ID exec.approval.resolve के माध्यम से)। अनुमोदन डिफ़ॉल्ट रूप से 30 मिनट बाद समाप्त हो जाते हैं।Exec अनुमोदन देखें।टूल और क्रिया गेट
Discord संदेश क्रियाओं में मैसेजिंग, चैनल प्रशासन, मॉडरेशन, उपस्थिति, और मेटाडेटा क्रियाएँ शामिल हैं। मुख्य उदाहरण:- मैसेजिंग:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - प्रतिक्रियाएँ:
react,reactions,emojiList - मॉडरेशन:
timeout,kick,ban - उपस्थिति:
setPresence
event-create क्रिया निर्धारित इवेंट की कवर छवि सेट करने के लिए एक वैकल्पिक image पैरामीटर (URL या स्थानीय फ़ाइल पथ) स्वीकार करती है।
क्रिया गेट channels.discord.actions.* के अंतर्गत रहते हैं।
डिफ़ॉल्ट गेट व्यवहार:
| क्रिया समूह | डिफ़ॉल्ट |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | सक्षम |
| roles | अक्षम |
| moderation | अक्षम |
| presence | अक्षम |
Components v2 UI
OpenClaw exec अनुमोदनों और cross-context मार्करों के लिए Discord components v2 का उपयोग करता है। Discord संदेश क्रियाएँ कस्टम UI के लिएcomponents भी स्वीकार कर सकती हैं (उन्नत; discord टूल के माध्यम से component payload बनाना आवश्यक), जबकि पुराने embeds उपलब्ध रहते हैं लेकिन अनुशंसित नहीं हैं।
channels.discord.ui.components.accentColorDiscord component कंटेनरों द्वारा उपयोग किया जाने वाला accent color सेट करता है (hex)।- प्रति अकाउंट
channels.discord.accounts.<id>.ui.components.accentColorसे सेट करें। channels.discord.agentComponents.ttlMsनियंत्रित करता है कि भेजे गए Discord component callbacks कितनी देर तक पंजीकृत रहें (डिफ़ॉल्ट1800000, अधिकतम86400000)। प्रति अकाउंटchannels.discord.accounts.<id>.agentComponents.ttlMsसे सेट करें।- जब components v2 मौजूद हों, तो
embedsअनदेखे किए जाते हैं। - सादे URL previews डिफ़ॉल्ट रूप से दबा दिए जाते हैं। जब एक अकेला outbound link expand होना चाहिए, तो message action पर
suppressEmbeds: falseसेट करें।
वॉइस
Discord में दो अलग-अलग वॉइस सतहें हैं: realtime voice channels (लगातार बातचीत) और voice message attachments (waveform preview format)। Gateway दोनों का समर्थन करता है।वॉइस चैनल
सेटअप चेकलिस्ट:- Discord Developer Portal में Message Content Intent सक्षम करें।
- जब role/user allowlists उपयोग की जाती हैं, तो Server Members Intent सक्षम करें।
- बॉट को
botऔरapplications.commandsscopes के साथ आमंत्रित करें। - लक्ष्य voice channel में Connect, Speak, Send Messages, और Read Message History प्रदान करें।
- स्थानीय कमांड सक्षम करें (
commands.nativeयाchannels.discord.commands.native)। channels.discord.voiceकॉन्फ़िगर करें।
/vc join|leave|status का उपयोग करें। कमांड अकाउंट डिफ़ॉल्ट एजेंट का उपयोग करता है और अन्य Discord कमांडों जैसे ही allowlist और group policy नियमों का पालन करता है।
voice.tts, केवलstt-ttsवॉइस प्लेबैक के लिएmessages.ttsको ओवरराइड करता है। रीयलटाइम मोडvoice.realtime.speakerVoiceका उपयोग करते हैं।voice.modeबातचीत पथ को नियंत्रित करता है। डिफ़ॉल्टagent-proxyहै: एक रीयलटाइम वॉइस फ्रंट एंड टर्न टाइमिंग, इंटरप्शन और प्लेबैक संभालता है,openclaw_agent_consultके माध्यम से रूट किए गए OpenClaw एजेंट को सार्थक काम सौंपता है, और परिणाम को उस स्पीकर से आए टाइप किए गए Discord प्रॉम्प्ट जैसा मानता है।stt-ttsपुराना बैच STT प्लस TTS फ़्लो बनाए रखता है।bidiरीयलटाइम मॉडल को सीधे बातचीत करने देता है, जबकि OpenClaw ब्रेन के लिएopenclaw_agent_consultउपलब्ध कराता है।voice.agentSessionनियंत्रित करता है कि कौन-सी OpenClaw बातचीत वॉइस टर्न प्राप्त करती है। वॉइस चैनल के अपने सेशन के लिए इसे अनसेट छोड़ें, या वॉइस चैनल को#maintainersजैसे मौजूदा Discord टेक्स्ट चैनल सेशन के माइक्रोफ़ोन/स्पीकर एक्सटेंशन के रूप में काम कराने के लिए{ mode: "target", target: "channel:<text-channel-id>" }सेट करें।voice.model, Discord वॉइस प्रतिक्रियाओं और रीयलटाइम कंसल्ट के लिए OpenClaw एजेंट ब्रेन को ओवरराइड करता है। रूट किए गए एजेंट मॉडल को इनहेरिट करने के लिए इसे अनसेट छोड़ें। यहvoice.realtime.modelसे अलग है।voice.followUsersबॉट को चुने हुए उपयोगकर्ताओं के साथ Discord वॉइस में जुड़ने, स्थानांतरित होने और छोड़ने देता है। व्यवहार नियमों और उदाहरणों के लिए वॉइस में उपयोगकर्ताओं का अनुसरण करें देखें।agent-proxyस्पीच कोdiscord-voiceके माध्यम से रूट करता है, जो स्पीकर और लक्ष्य सेशन के लिए सामान्य owner/tool प्राधिकरण को सुरक्षित रखता है, लेकिन एजेंटttsटूल को छिपाता है क्योंकि Discord वॉइस प्लेबैक का स्वामी है। डिफ़ॉल्ट रूप से,agent-proxyowner स्पीकर्स के लिए कंसल्ट को पूर्ण owner-समतुल्य टूल एक्सेस देता है (voice.realtime.toolPolicy: "owner") और सार्थक उत्तरों से पहले OpenClaw एजेंट से कंसल्ट करने को मज़बूती से प्राथमिकता देता है (voice.realtime.consultPolicy: "always")। उस डिफ़ॉल्टalwaysमोड में, रीयलटाइम लेयर कंसल्ट उत्तर से पहले अपने-आप फिलर नहीं बोलती; यह स्पीच कैप्चर और ट्रांसक्राइब करती है, फिर रूट किया गया OpenClaw उत्तर बोलती है। यदि कई बाध्य कंसल्ट उत्तर तब पूरे होते हैं जब Discord अभी भी पहला उत्तर चला रहा हो, तो बाद के exact-speech उत्तरों को बीच वाक्य में स्पीच बदलने के बजाय प्लेबैक निष्क्रिय होने तक कतार में रखा जाता है।stt-ttsमोड में, STTtools.media.audioका उपयोग करता है;voice.modelट्रांसक्रिप्शन को प्रभावित नहीं करता।- रीयलटाइम मोड में,
voice.realtime.provider,voice.realtime.model, औरvoice.realtime.speakerVoiceरीयलटाइम ऑडियो सेशन को कॉन्फ़िगर करते हैं। OpenAI Realtime 2 प्लस Codex ब्रेन के लिए,voice.realtime.model: "gpt-realtime-2"औरvoice.model: "openai/gpt-5.5"का उपयोग करें। - रीयलटाइम वॉइस मोड डिफ़ॉल्ट रूप से रीयलटाइम प्रदाता निर्देशों में छोटे
IDENTITY.md,USER.md, औरSOUL.mdप्रोफ़ाइल फ़ाइलें शामिल करते हैं, ताकि तेज़ सीधे टर्न वही पहचान, उपयोगकर्ता आधार और व्यक्तित्व बनाए रखें जो रूट किए गए OpenClaw एजेंट में है। इसे अनुकूलित करने के लिएvoice.realtime.bootstrapContextFilesको किसी उपसमुच्चय पर सेट करें, या इसे अक्षम करने के लिए[]सेट करें। समर्थित रीयलटाइम बूटस्ट्रैप फ़ाइलें केवल उन्हीं प्रोफ़ाइल फ़ाइलों तक सीमित हैं;AGENTS.mdसामान्य एजेंट संदर्भ में रहता है। इंजेक्ट किया गया प्रोफ़ाइल संदर्भ workspace कार्य, वर्तमान तथ्यों, मेमोरी लुकअप, या टूल-समर्थित क्रियाओं के लिएopenclaw_agent_consultको प्रतिस्थापित नहीं करता। - OpenAI
agent-proxyरीयलटाइम मोड में, Discord रीयलटाइम वॉइस को तब तक मौन रखने के लिएvoice.realtime.requireWakeName: trueसेट करें जब तक कोई ट्रांसक्रिप्ट wake name से शुरू या समाप्त न हो। कॉन्फ़िगर किए गए wake names एक या दो शब्दों के होने चाहिए। यदिvoice.realtime.wakeNamesअनसेट है, तो OpenClaw रूट किए गए एजेंटnameप्लसOpenClawका उपयोग करता है, और fallback में एजेंट id प्लसOpenClawका उपयोग करता है। Wake-name gating रीयलटाइम प्रदाता auto-response को अक्षम करता है, स्वीकृत टर्न को OpenClaw एजेंट कंसल्ट पथ से रूट करता है, और अंतिम ट्रांसक्रिप्ट आने से पहले आंशिक ट्रांसक्रिप्शन से अग्रणी wake name पहचाने जाने पर छोटा बोला गया acknowledgement देता है। - OpenAI रीयलटाइम प्रदाता वर्तमान Realtime 2 event names और आउटपुट ऑडियो तथा ट्रांसक्रिप्ट इवेंट्स के लिए legacy Codex-compatible aliases स्वीकार करता है, ताकि संगत प्रदाता snapshots assistant audio गिराए बिना बदल सकें।
voice.realtime.bargeInनियंत्रित करता है कि Discord speaker-start events सक्रिय रीयलटाइम प्लेबैक को interrupt करते हैं या नहीं। यदि अनसेट है, तो यह रीयलटाइम प्रदाता की input-audio interruption setting का पालन करता है।voice.realtime.minBargeInAudioEndMsOpenAI रीयलटाइम barge-in द्वारा ऑडियो truncate करने से पहले न्यूनतम assistant playback duration नियंत्रित करता है। डिफ़ॉल्ट:250। low-echo rooms में तुरंत interruption के लिए0सेट करें, या echo-heavy speaker setups के लिए इसे बढ़ाएं।- Discord प्लेबैक पर OpenAI वॉइस के लिए,
voice.tts.provider: "openai"सेट करें औरvoice.tts.providers.openai.speakerVoiceके तहत Text-to-speech वॉइस चुनें।cedarवर्तमान OpenAI TTS मॉडल पर अच्छा masculine-sounding विकल्प है। - प्रति-चैनल Discord
systemPromptओवरराइड उस वॉइस चैनल के वॉइस ट्रांसक्रिप्ट टर्न पर लागू होते हैं। - वॉइस ट्रांसक्रिप्ट टर्न owner-gated commands और channel actions के लिए Discord
allowFrom(याdm.allowFrom) से owner status निकालते हैं। एजेंट टूल दृश्यता रूट किए गए सेशन के लिए कॉन्फ़िगर की गई tool policy का पालन करती है। - Discord वॉइस text-only configs के लिए opt-in है;
/vcकमांड, वॉइस रनटाइम, औरGuildVoiceStatesGateway intent सक्षम करने के लिएchannels.discord.voice.enabled=trueसेट करें (या मौजूदाchannels.discord.voiceब्लॉक बनाए रखें)। channels.discord.intents.voiceStatesvoice-state intent subscription को स्पष्ट रूप से ओवरराइड कर सकता है। intent को effective voice enablement का पालन करने देने के लिए इसे अनसेट छोड़ें।- यदि
voice.autoJoinमें एक ही guild के लिए कई entries हैं, तो OpenClaw उस guild के लिए आख़िरी कॉन्फ़िगर किए गए channel में जुड़ता है। voice.allowedChannelsएक वैकल्पिक residency allowlist है।/vc joinको किसी भी अधिकृत Discord वॉइस चैनल में अनुमति देने के लिए इसे अनसेट छोड़ें। सेट होने पर,/vc join, startup auto-join, और bot voice-state moves सूचीबद्ध{ guildId, channelId }entries तक सीमित रहते हैं। सभी Discord वॉइस joins अस्वीकार करने के लिए इसे खाली array पर सेट करें। यदि Discord बॉट को allowlist से बाहर ले जाता है, तो OpenClaw वह channel छोड़ देता है और उपलब्ध होने पर कॉन्फ़िगर किए गए auto-join target में फिर जुड़ता है।voice.daveEncryptionऔरvoice.decryptionFailureTolerance,@discordjs/voicejoin options तक पास होते हैं।@discordjs/voicedefaults अनसेट होने परdaveEncryption=trueऔरdecryptionFailureTolerance=24हैं।- OpenClaw Discord voice receive और realtime raw PCM playback के लिए bundled
libopus-wasmcodec का उपयोग करता है। यह pinned libopus WebAssembly build के साथ आता है और native opus addons की आवश्यकता नहीं होती। voice.connectTimeoutMs,/vc joinऔर auto-join attempts के लिए प्रारंभिक@discordjs/voiceReady wait नियंत्रित करता है। डिफ़ॉल्ट:30000।voice.reconnectGraceMsनियंत्रित करता है कि disconnected voice session को नष्ट करने से पहले OpenClaw उसके reconnecting शुरू करने के लिए कितनी देर प्रतीक्षा करता है। डिफ़ॉल्ट:15000।stt-ttsमोड में, वॉइस प्लेबैक केवल इसलिए नहीं रुकता कि कोई दूसरा उपयोगकर्ता बोलना शुरू करता है। feedback loops से बचने के लिए, TTS चलने के दौरान OpenClaw नया voice capture अनदेखा करता है; अगले टर्न के लिए playback समाप्त होने के बाद बोलें। रीयलटाइम मोड speaker starts को barge-in signals के रूप में रीयलटाइम प्रदाता को forward करते हैं।- रीयलटाइम मोड में, speakers से open mic में आने वाली echo barge-in जैसी दिख सकती है और playback interrupt कर सकती है। echo-heavy Discord rooms के लिए, OpenAI को input audio पर auto-interrupting से रोकने के लिए
voice.realtime.providers.openai.interruptResponseOnInputAudio: falseसेट करें। यदि आप फिर भी Discord speaker-start events से active playback interrupt कराना चाहते हैं, तोvoice.realtime.bargeIn: trueजोड़ें। OpenAI realtime bridgevoice.realtime.minBargeInAudioEndMsसे छोटी playback truncations को संभावित echo/noise मानकर अनदेखा करता है और Discord playback साफ़ करने के बजाय उन्हें skipped के रूप में लॉग करता है। voice.captureSilenceGraceMsनियंत्रित करता है कि Discord द्वारा speaker के रुकने की सूचना देने के बाद OpenClaw STT के लिए उस audio segment को finalizing करने से पहले कितनी देर प्रतीक्षा करता है। डिफ़ॉल्ट:2000; यदि Discord सामान्य pauses को choppy partial transcripts में बांटता है, तो इसे बढ़ाएं।- जब ElevenLabs चुना गया TTS provider होता है, Discord voice playback streaming TTS का उपयोग करता है और provider response stream से शुरू होता है। streaming support के बिना providers synthesized temp-file path पर fallback करते हैं।
- OpenClaw receive decrypt failures पर भी नज़र रखता है और छोटी window में repeated failures के बाद voice channel छोड़कर/फिर जुड़कर auto-recovers करता है।
- यदि अपडेट करने के बाद receive logs बार-बार
DecryptionFailed(UnencryptedWhenPassthroughDisabled)दिखाते हैं, तो dependency report और logs इकट्ठा करें। bundled@discordjs/voiceline में discord.js PR #11449 से upstream padding fix शामिल है, जिसने discord.js issue #11419 को बंद किया। The operation was abortedreceive events अपेक्षित हैं जब OpenClaw captured speaker segment को finalizes करता है; ये verbose diagnostics हैं, warnings नहीं।- Verbose Discord voice logs प्रत्येक accepted speaker segment के लिए bounded one-line STT transcript preview शामिल करते हैं, ताकि debugging unbounded transcript text dump किए बिना user side और agent reply side दोनों दिखाए।
agent-proxyमोड में, forced consult fallback संभावित incomplete transcript fragments जैसे...पर समाप्त होने वाला text याandजैसा trailing connector, साथ ही “be right back” या “bye” जैसे स्पष्ट non-actionable closings को छोड़ देता है। जब यह stale queued answer को रोकता है, तो logsforced agent consult skipped reason=...दिखाते हैं।
वॉइस में उपयोगकर्ताओं का अनुसरण करें
जब आप चाहते हैं कि Discord वॉइस बॉट startup पर fixed channel में जुड़ने या/vc join की प्रतीक्षा करने के बजाय एक या अधिक ज्ञात Discord users के साथ बना रहे, तो voice.followUsers का उपयोग करें।
followUsersraw Discord user IDs औरdiscord:<id>values स्वीकार करता है। OpenClaw voice-state events से मिलान करने से पहले दोनों forms को normalize करता है।followUsersEnabled,followUsersconfigured होने पर डिफ़ॉल्ट रूप सेtrueहोता है। saved list बनाए रखते हुए automatic voice following रोकने के लिए इसेfalseपर सेट करें।- जब followed user किसी allowed voice channel में जुड़ता है, OpenClaw उस channel में जुड़ता है। जब user move करता है, OpenClaw उनके साथ move करता है। जब active followed user disconnects करता है, OpenClaw छोड़ देता है।
- यदि एक ही guild में multiple followed users हैं और active followed user छोड़ देता है, तो OpenClaw guild छोड़ने से पहले किसी दूसरे tracked followed user’s channel में move करता है। यदि कई followed users एक साथ move करते हैं, तो latest observed voice-state event जीतता है।
allowedChannelsफिर भी लागू होता है। disallowed channel में followed user को अनदेखा किया जाता है, और follow-owned session किसी दूसरे followed user पर move करता है या छोड़ देता है।- OpenClaw startup पर और bounded interval पर missed voice-state events को reconcile करता है। Reconciliation configured guilds को sample करता है और per run REST lookups cap करता है, इसलिए बहुत बड़ी
followUserslists को converge होने में एक से अधिक interval लग सकते हैं। - यदि Discord या कोई admin user को follow करते समय bot को move करता है, तो OpenClaw voice session rebuild करता है और destination allowed होने पर follow ownership सुरक्षित रखता है। यदि bot को
allowedChannelsसे बाहर move किया जाता है, तो OpenClaw छोड़ देता है और कोई configured target मौजूद होने पर फिर जुड़ता है। - DAVE receive recovery repeated decrypt failures के बाद वही channel छोड़कर फिर जुड़ सकती है। Follow-owned sessions उस recovery path में अपनी follow ownership बनाए रखते हैं, इसलिए बाद में followed-user disconnect होने पर channel फिर भी छूटता है।
- personal या operator setups के लिए
followUsersका उपयोग करें, जहाँ bot को आपके voice में होने पर अपने-आप voice में होना चाहिए। - fixed-room bots के लिए
autoJoinका उपयोग करें, जिन्हें voice में कोई tracked user न होने पर भी मौजूद रहना चाहिए। - one-off joins या ऐसे rooms के लिए
/vc joinका उपयोग करें जहाँ automatic voice presence चौंकाने वाली होगी।
- Voice प्राप्ति लॉग
discord voice: opus decoder: libopus-wasmदिखाते हैं। - Realtime प्लेबैक पैकेटों को
@discordjs/voiceको सौंपने से पहले उसी बंडल किए गएlibopus-wasmपैकेज के साथ raw 48 kHz stereo PCM को Opus में एन्कोड करता है। - फ़ाइल और प्रदाता-स्ट्रीम प्लेबैक ffmpeg के साथ raw 48 kHz stereo PCM में ट्रांसकोड करता है, फिर Discord को भेजी जाने वाली Opus पैकेट स्ट्रीम के लिए
libopus-wasmका उपयोग करता है।
- Discord PCM कैप्चर को WAV अस्थायी फ़ाइल में बदला जाता है।
tools.media.audioSTT संभालता है, उदाहरण के लिएopenai/gpt-4o-mini-transcribe।- ट्रांसक्रिप्ट Discord इनग्रेस और रूटिंग से होकर भेजी जाती है, जबकि प्रतिक्रिया LLM एक voice-output नीति के साथ चलता है जो एजेंट
ttsटूल को छिपाती है और लौटाया गया पाठ मांगती है, क्योंकि Discord voice अंतिम TTS प्लेबैक का स्वामी है। voice.model, सेट होने पर, इस voice-channel turn के लिए केवल प्रतिक्रिया LLM को ओवरराइड करता है।voice.ttsकोmessages.ttsके ऊपर मर्ज किया जाता है; स्ट्रीमिंग-सक्षम प्रदाता सीधे प्लेयर को फ़ीड करते हैं, अन्यथा परिणामी ऑडियो फ़ाइल जुड़े हुए चैनल में चलाई जाती है।
voice.agentSession ब्लॉक न होने पर, हर voice channel को अपना रूट किया गया OpenClaw सत्र मिलता है। उदाहरण के लिए, /vc join channel:234567890123456789 उस Discord voice channel के सत्र से बात करता है। realtime मॉडल केवल voice front end है; महत्वपूर्ण अनुरोध कॉन्फ़िगर किए गए OpenClaw एजेंट को सौंपे जाते हैं। यदि realtime मॉडल consult टूल को कॉल किए बिना अंतिम ट्रांसक्रिप्ट बनाता है, तो OpenClaw fallback के रूप में consult को बाध्य करता है ताकि डिफ़ॉल्ट अभी भी एजेंट से बात करने जैसा व्यवहार करे।
Legacy STT और TTS उदाहरण:
agent-proxy मोड में bot कॉन्फ़िगर किए गए voice channel से जुड़ता है, लेकिन OpenClaw एजेंट turns लक्ष्य चैनल के सामान्य रूट किए गए सत्र और एजेंट का उपयोग करते हैं। realtime voice सत्र लौटाए गए परिणाम को voice channel में बोलकर सुनाता है। supervisor agent अपनी tool policy के अनुसार अभी भी सामान्य message tools का उपयोग कर सकता है, जिसमें सही कार्रवाई होने पर अलग Discord संदेश भेजना भी शामिल है।
जब कोई प्रत्यायोजित OpenClaw रन सक्रिय होता है, नए Discord voice transcripts को दूसरा agent turn शुरू करने से पहले live run control माना जाता है। “status”, “cancel that”, “use the smaller fix”, या “when you’re done also check tests” जैसे वाक्यांशों को सक्रिय सत्र के लिए status, cancel, steering, या follow-up input के रूप में वर्गीकृत किया जाता है। Status, cancel, स्वीकार की गई steering, और follow-up परिणामों को voice channel में बोलकर सुनाया जाता है ताकि कॉल करने वाले को पता रहे कि OpenClaw ने अनुरोध संभाला या नहीं।
उपयोगी target रूप:
target: "channel:123456789012345678"Discord text channel सत्र के माध्यम से रूट करता है।target: "123456789012345678"को channel target माना जाता है।target: "dm:123456789012345678"याtarget: "user:123456789012345678"उस direct-message सत्र के माध्यम से रूट करता है।
bargeIn: true Discord speaker-start events और पहले से सक्रिय speaker audio को अगले captured turn के OpenAI तक पहुंचने से पहले सक्रिय realtime responses रद्द करने देता है। minBargeInAudioEndMs से कम audioEndMs वाले बहुत शुरुआती barge-in signals को संभावित echo/noise माना जाता है और अनदेखा किया जाता है ताकि मॉडल पहले playback frame पर कट न जाए।
अपेक्षित voice logs:
- Join पर:
discord voice: joining ... voiceSession=... supervisorSession=... agentSessionMode=... voiceModel=... realtimeModel=... - Realtime start पर:
discord voice: realtime bridge starting ... autoRespond=false interruptResponse=false bargeIn=false minBargeInAudioEndMs=... - Speaker audio पर:
discord voice: realtime speaker turn opened ...,discord voice: realtime input audio started ... outputAudioMs=... outputActive=..., औरdiscord voice: realtime speaker turn closed ... chunks=... discordBytes=... realtimeBytes=... interruptedPlayback=... - छोड़े गए stale speech पर:
discord voice: realtime forced agent consult skipped reason=incomplete-transcript ...याreason=non-actionable-closing ... - Realtime response completion पर:
discord voice: realtime audio playback finishing reason=response.done ... audioMs=... chunks=... - Playback stop/reset पर:
discord voice: realtime audio playback stopped reason=... audioMs=... elapsedMs=... chunks=... - Realtime consult पर:
discord voice: realtime consult requested ... voiceSession=... supervisorSession=... question=... - Agent answer पर:
discord voice: agent turn answer ... - Queued exact speech पर:
discord voice: realtime exact speech queued ... queued=... outputAudioMs=... outputActive=..., इसके बादdiscord voice: realtime exact speech dequeued reason=player-idle ... - Barge-in detection पर:
discord voice: realtime barge-in detected source=speaker-start ...याdiscord voice: realtime barge-in detected source=active-speaker-audio ..., इसके बादdiscord voice: realtime barge-in requested reason=... outputAudioMs=... outputActive=... - Realtime interruption पर:
discord voice: realtime model interrupt requested client:response.cancel reason=barge-in, इसके बाद या तोdiscord voice: realtime model audio truncated client:conversation.item.truncate reason=barge-in audioEndMs=...याdiscord voice: realtime model interrupt confirmed server:response.done status=cancelled ... - अनदेखा किए गए echo/noise पर:
discord voice: realtime model interrupt ignored client:conversation.item.truncate.skipped reason=barge-in audioEndMs=0 minAudioEndMs=250 - Disabled barge-in पर:
discord voice: realtime capture ignored during playback (barge-in disabled) ... - Idle playback पर:
discord voice: realtime barge-in ignored reason=... outputActive=false ... playbackChunks=0
realtime audio playback startedका मतलब है कि Discord ने assistant audio चलाना शुरू कर दिया है। bridge इस बिंदु से assistant output chunks, Discord PCM bytes, provider realtime bytes, और synthesized audio duration गिनना शुरू करता है।realtime speaker turn openedDiscord speaker के सक्रिय होने को चिह्नित करता है। यदि playback पहले से सक्रिय है औरbargeInसक्षम है, तो इसके बादbarge-in detected source=speaker-startआ सकता है।realtime input audio startedउस speaker turn के लिए प्राप्त पहले वास्तविक audio frame को चिह्नित करता है। यहांoutputActive=trueया nonzerooutputAudioMsका मतलब है कि mic input भेज रहा है जबकि assistant playback अभी भी सक्रिय है।barge-in detected source=active-speaker-audioका मतलब है कि OpenClaw ने assistant playback सक्रिय रहते हुए live speaker audio देखा। यह बिना उपयोगी audio वाले Discord speaker-start event से वास्तविक interruption को अलग करने में उपयोगी है।barge-in requested reason=...का मतलब है कि OpenClaw ने realtime provider से सक्रिय response को cancel या truncate करने को कहा। इसमेंoutputAudioMs,outputActive, औरplaybackChunksशामिल हैं ताकि आप देख सकें कि interruption से पहले कितना assistant audio वास्तव में चल चुका था।realtime audio playback stopped reason=...local Discord playback reset point है। reason बताता है कि playback किसने रोका:barge-in,player-idle,provider-clear-audio,forced-agent-consult,stream-close, याsession-close।realtime speaker turn closedcaptured input turn का सारांश देता है।chunks=0याhasAudio=falseका मतलब है कि speaker turn खुला लेकिन कोई उपयोगी audio realtime bridge तक नहीं पहुंचा।interruptedPlayback=trueका मतलब है कि वह input turn assistant output से overlap हुआ और barge-in logic trigger हुआ।
outputAudioMs: log line से पहले realtime provider द्वारा generated assistant audio duration।audioMs: playback रुकने से पहले OpenClaw द्वारा counted assistant audio duration।elapsedMs: playback stream या speaker turn खोलने और बंद करने के बीच wall-clock time।discordBytes: Discord voice को भेजे गए या उससे प्राप्त 48 kHz stereo PCM bytes।realtimeBytes: realtime provider को भेजे गए या उससे प्राप्त provider-format PCM bytes।playbackChunks: active response के लिए Discord को forwarded assistant audio chunks।sinceLastAudioMs: आखिरी captured speaker audio frame और speaker turn closing के बीच gap।
source=active-speaker-audio, छोटेoutputAudioMs, और पास में वही user के साथ immediate cut-off आमतौर पर speaker echo के mic में प्रवेश की ओर इशारा करता है।voice.realtime.minBargeInAudioEndMsबढ़ाएं, speaker volume घटाएं, headphones उपयोग करें, याvoice.realtime.providers.openai.interruptResponseOnInputAudio: falseसेट करें।source=speaker-startके बादspeaker turn closed ... hasAudio=falseका मतलब है कि Discord ने speaker start report किया लेकिन कोई audio OpenClaw तक नहीं पहुंचा। यह transient Discord voice event, noise gate behavior, या client का briefly mic key करना हो सकता है।- पास में barge-in या
provider-clear-audioके बिनाaudio playback stopped reason=stream-closeका मतलब है कि local Discord playback stream अनपेक्षित रूप से समाप्त हो गई। पिछले provider और Discord player logs जांचें। capture ignored during playback (barge-in disabled)का मतलब है कि OpenClaw ने assistant audio सक्रिय रहते हुए input को जानबूझकर drop किया। यदि आप चाहते हैं कि speech playback को interrupt करे, तोvoice.realtime.bargeInसक्षम करें।barge-in ignored ... outputActive=falseका मतलब है कि Discord या provider VAD ने speech report किया, लेकिन OpenClaw के पास interrupt करने के लिए कोई active playback नहीं था। इससे audio cut off नहीं होना चाहिए।
voice.model के लिए LLM route auth, tools.media.audio के लिए STT auth, messages.tts/voice.tts के लिए TTS auth, और voice.realtime.providers या provider के सामान्य auth config के लिए realtime provider auth।
Voice messages
Discord voice messages waveform preview दिखाते हैं और OGG/Opus audio की आवश्यकता होती है। OpenClaw waveform अपने आप generate करता है, लेकिन inspect और convert करने के लिए gateway host परffmpeg और ffprobe चाहिए।
- स्थानीय फ़ाइल पथ दें (URL अस्वीकार किए जाते हैं).
- टेक्स्ट सामग्री छोड़ दें (Discord एक ही payload में टेक्स्ट + वॉइस संदेश अस्वीकार करता है).
- कोई भी ऑडियो प्रारूप स्वीकार्य है; OpenClaw आवश्यकता अनुसार OGG/Opus में बदल देता है.
समस्या निवारण
अस्वीकृत intents उपयोग किए गए या bot को guild संदेश नहीं दिखते
अस्वीकृत intents उपयोग किए गए या bot को guild संदेश नहीं दिखते
- Message Content Intent सक्षम करें
- जब आप user/member resolution पर निर्भर हों, Server Members Intent सक्षम करें
- intents बदलने के बाद gateway पुनः शुरू करें
Guild संदेश अप्रत्याशित रूप से अवरुद्ध
Guild संदेश अप्रत्याशित रूप से अवरुद्ध
groupPolicyसत्यापित करेंchannels.discord.guildsके अंतर्गत guild allowlist सत्यापित करें- यदि guild
channelsmap मौजूद है, तो केवल सूचीबद्ध channels की अनुमति है requireMentionव्यवहार और mention patterns सत्यापित करें
Require mention false है लेकिन फिर भी अवरुद्ध
Require mention false है लेकिन फिर भी अवरुद्ध
- मेल खाती guild/channel allowlist के बिना
groupPolicy="allowlist" requireMentionगलत जगह कॉन्फ़िगर किया गया है (channels.discord.guildsया channel entry के अंतर्गत होना चाहिए)- sender guild/channel
usersallowlist द्वारा अवरुद्ध है
लंबे समय तक चलने वाले Discord turns या duplicate replies
लंबे समय तक चलने वाले Discord turns या duplicate replies
Slow listener detected ...stuck session: sessionKey=agent:...:discord:... state=processing ...
- single-account:
channels.discord.eventQueue.listenerTimeout - multi-account:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout - यह केवल Discord gateway listener work को नियंत्रित करता है, agent turn lifetime को नहीं
Gateway metadata lookup timeout warnings
Gateway metadata lookup timeout warnings
/gateway/bot metadata fetch करता है. अस्थायी failures Discord के default gateway URL पर fall back करते हैं और logs में rate-limited होते हैं.Metadata timeout knobs:- single-account:
channels.discord.gatewayInfoTimeoutMs - multi-account:
channels.discord.accounts.<accountId>.gatewayInfoTimeoutMs - config unset होने पर env fallback:
OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS - default:
30000(30 seconds), max:120000
Gateway READY timeout restarts
Gateway READY timeout restarts
READY event की प्रतीक्षा करता है. Startup staggering वाले multi-account setups को default से लंबी startup READY window की आवश्यकता हो सकती है.READY timeout knobs:- startup single-account:
channels.discord.gatewayReadyTimeoutMs - startup multi-account:
channels.discord.accounts.<accountId>.gatewayReadyTimeoutMs - config unset होने पर startup env fallback:
OPENCLAW_DISCORD_READY_TIMEOUT_MS - startup default:
15000(15 seconds), max:120000 - runtime single-account:
channels.discord.gatewayRuntimeReadyTimeoutMs - runtime multi-account:
channels.discord.accounts.<accountId>.gatewayRuntimeReadyTimeoutMs - config unset होने पर runtime env fallback:
OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS - runtime default:
30000(30 seconds), max:120000
Permissions audit mismatches
Permissions audit mismatches
channels status --probe permission checks केवल numeric channel IDs के लिए काम करते हैं.यदि आप slug keys उपयोग करते हैं, तो runtime matching अब भी काम कर सकती है, लेकिन probe permissions को पूरी तरह verify नहीं कर सकता.DM और pairing issues
DM और pairing issues
- DM disabled:
channels.discord.dm.enabled=false - DM policy disabled:
channels.discord.dmPolicy="disabled"(legacy:channels.discord.dm.policy) pairingmode में pairing approval की प्रतीक्षा
Bot to bot loops
Bot to bot loops
channels.discord.allowBots=true सेट करते हैं, तो loop behavior से बचने के लिए strict mention और allowlist rules उपयोग करें.
केवल उन bot messages को स्वीकार करने के लिए channels.discord.allowBots="mentions" को प्राथमिकता दें जो bot को mention करते हैं.OpenClaw shared bot loop protection भी ship करता है. जब भी allowBots bot-authored messages को dispatch तक पहुंचने देता है, Discord inbound event को (account, channel, bot pair) facts पर map करता है और generic pair guard configured event budget पार होने के बाद pair को suppress करता है. यह guard runaway two-bot loops को रोकता है, जिन्हें पहले Discord rate limits द्वारा रोकना पड़ता था; यह single-bot deployments या budget के भीतर रहने वाले one-shot bot replies को प्रभावित नहीं करता.Default settings (allowBots सेट होने पर active):maxEventsPerWindow: 20— bot pair sliding window के भीतर 20 messages exchange कर सकता हैwindowSeconds: 60— sliding window lengthcooldownSeconds: 60— budget trip होने के बाद, किसी भी direction में हर additional bot-to-bot message एक minute के लिए drop किया जाता है
channels.defaults.botLoopProtection के अंतर्गत configure करें, फिर जब किसी legitimate workflow को अधिक headroom चाहिए हो तो Discord को override करें. Precedence है:channels.discord.accounts.<account>.botLoopProtectionchannels.discord.botLoopProtectionchannels.defaults.botLoopProtection- built-in defaults
maxEventsPerWindow, windowSeconds, और cooldownSeconds keys उपयोग करता है.DecryptionFailed(...) के साथ Voice STT drops
DecryptionFailed(...) के साथ Voice STT drops
- OpenClaw को current रखें (
openclaw update) ताकि Discord voice receive recovery logic मौजूद रहे - पुष्टि करें कि
channels.discord.voice.daveEncryption=trueहै (default) channels.discord.voice.decryptionFailureTolerance=24(upstream default) से शुरू करें और केवल आवश्यकता होने पर tune करें- इन logs पर नजर रखें:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- यदि automatic rejoin के बाद failures जारी रहते हैं, तो logs collect करें और discord.js #11419 और discord.js #11449 में upstream DAVE receive history से तुलना करें
Configuration reference
Primary reference: Configuration reference - Discord.High-signal Discord fields
High-signal Discord fields
- startup/auth:
enabled,token,accounts.*,allowBots - policy:
groupPolicy,dm.*,guilds.*,guilds.*.channels.* - command:
commands.native,commands.useAccessGroups,configWrites,slashCommand.* - event queue:
eventQueue.listenerTimeout(listener budget),eventQueue.maxQueueSize,eventQueue.maxConcurrency - gateway:
gatewayInfoTimeoutMs,gatewayReadyTimeoutMs,gatewayRuntimeReadyTimeoutMs - reply/history:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - delivery:
textChunkLimit,chunkMode,maxLinesPerMessage - streaming:
streaming(legacy alias:streamMode),streaming.preview.toolProgress,draftChunk,blockStreaming,blockStreamingCoalesce - media/retry:
mediaMaxMb(outbound Discord uploads को cap करता है, default100MB),retry - actions:
actions.* - presence:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - features:
threadBindings, top-levelbindings[](type: "acp"),pluralkit,execApprovals,intents,agentComponents.enabled,agentComponents.ttlMs,heartbeat,responsePrefix
Safety and operations
- bot tokens को secrets की तरह मानें (supervised environments में
DISCORD_BOT_TOKENpreferred). - least-privilege Discord permissions दें.
- यदि command deploy/state stale है, gateway restart करें और
openclaw channels status --probeसे फिर check करें.