Discord (Bot API)
الحالة: جاهز للرسائل الخاصة والقنوات داخل الخوادم عبر بوابة Discord الرسمية.الاقتران
أوامر الشرطة المائلة
استكشاف أخطاء القنوات وإصلاحها
إعداد سريع
ستحتاج إلى إنشاء تطبيق جديد مع بوت، وإضافة البوت إلى خادمك، ثم إقرانه مع OpenClaw. نوصي بإضافة البوت إلى خادمك الخاص. إذا لم يكن لديك خادم بعد، فأنشئ واحدًا أولًا (اختر Create My Own > For me and my friends).إنشاء تطبيق Discord وبوت
تمكين الأذونات المميّزة
- Message Content Intent (مطلوب)
- Server Members Intent (موصى به؛ ومطلوب لقوائم السماح المستندة إلى الأدوار ولمطابقة الاسم بالمعرّف)
- Presence Intent (اختياري؛ مطلوب فقط لتحديثات الحالة)
نسخ رمز البوت المميز
إنشاء رابط دعوة وإضافة البوت إلى خادمك
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (اختياري)
تمكين Developer Mode وجمع المعرّفات الخاصة بك
- انقر على User Settings (أيقونة الترس بجوار صورتك الرمزية) → Advanced → فعّل Developer Mode
- انقر بزر الفأرة الأيمن على أيقونة الخادم في الشريط الجانبي → Copy Server ID
- انقر بزر الفأرة الأيمن على صورتك الرمزية → Copy User ID
السماح بالرسائل الخاصة من أعضاء الخادم
تعيين رمز البوت المميز بأمان (لا ترسله في الدردشة)
openclaw gateway run وتشغيلها مجددًا.إعداد OpenClaw والاقتران
- اسأل وكيلك
- CLI / config
“لقد قمت بالفعل بتعيين رمز بوت Discord المميز في الإعدادات. يُرجى إكمال إعداد Discord باستخدام User ID<user_id>وServer ID<server_id>.”
الموافقة على أول اقتران عبر الرسائل الخاصة
- اسأل وكيلك
- CLI
“وافق على رمز اقتران Discord هذا: <CODE>”
DISCORD_BOT_TOKEN إلا للحساب الافتراضي.
بالنسبة إلى الاستدعاءات الصادرة المتقدمة (أداة الرسائل/إجراءات القناة)، يتم استخدام token صريح لكل استدعاء لتلك العملية. ينطبق هذا على إجراءات الإرسال وإجراءات القراءة/الفحص من النمط نفسه (مثل read/search/fetch/thread/pins/permissions). تظل إعدادات سياسة الحساب/إعادة المحاولة تأتي من الحساب المحدد في اللقطة النشطة لوقت التشغيل.موصى به: إعداد مساحة عمل للخادم
بمجرد أن تعمل الرسائل الخاصة، يمكنك إعداد خادم Discord الخاص بك كمساحة عمل كاملة بحيث تحصل كل قناة على جلسة وكيل خاصة بها وسياقها الخاص. يوصى بذلك للخوادم الخاصة التي تكون لك ولبوتك فقط.إضافة خادمك إلى قائمة السماح الخاصة بالخوادم
- اسأل وكيلك
- الإعدادات
“أضف Server ID الخاص بخادم Discord <server_id> إلى قائمة السماح الخاصة بالخوادم”
السماح بالردود دون @mention
- اسأل وكيلك
- الإعدادات
“اسمح لوكيلي بالرد على هذا الخادم من دون الحاجة إلى الإشارة إليه باستخدام @mention”
#coding و#home و#research أو أي شيء يناسب سير عملك.
نموذج وقت التشغيل
- تتولى البوابة اتصال Discord.
- يكون توجيه الردود حتميًا: تدخل الردود الواردة من Discord وتعود إلى Discord.
- افتراضيًا (
session.dmScope=main)، تشارك المحادثات المباشرة الجلسة الرئيسية للوكيل (agent:main:main). - قنوات الخادم عبارة عن مفاتيح جلسات معزولة (
agent:<agentId>:discord:channel:<channelId>). - يتم تجاهل الرسائل الخاصة الجماعية افتراضيًا (
channels.discord.dm.groupEnabled=false). - تعمل أوامر الشرطة المائلة الأصلية في جلسات أوامر معزولة (
agent:<agentId>:discord:slash:<userId>)، مع الاستمرار في حملCommandTargetSessionKeyإلى جلسة المحادثة الموجَّهة.
قنوات المنتدى
لا تقبل قنوات المنتدى والوسائط في Discord إلا المشاركات ضمن سلاسل. يدعم OpenClaw طريقتين لإنشائها:- أرسل رسالة إلى أصل المنتدى (
channel:<forumId>) لإنشاء سلسلة تلقائيًا. يستخدم عنوان السلسلة أول سطر غير فارغ من رسالتك. - استخدم
openclaw message thread createلإنشاء سلسلة مباشرة. لا تمرر--message-idلقنوات المنتدى.
channel:<threadId>).
المكونات التفاعلية
يدعم OpenClaw حاويات Discord components v2 لرسائل الوكيل. استخدم أداة الرسائل مع حمولةcomponents. تُوجَّه نتائج التفاعل مرة أخرى إلى الوكيل باعتبارها رسائل واردة عادية، وتتبع إعدادات Discord replyToMode الحالية.
الكتل المدعومة:
textوsectionوseparatorوactionsوmedia-galleryوfile- تسمح صفوف الإجراءات بما يصل إلى 5 أزرار أو قائمة تحديد واحدة
- أنواع التحديد:
stringوuserوroleوmentionableوchannel
components.reusable=true للسماح باستخدام الأزرار وعناصر التحديد والنماذج عدة مرات حتى تنتهي صلاحيتها.
لتقييد من يمكنه النقر على زر، اضبط allowedUsers على ذلك الزر (معرّفات مستخدمي Discord أو الوسوم أو *). عند الإعداد، يتلقى المستخدمون غير المطابقين رفضًا مؤقتًا.
تفتح أوامر الشرطة المائلة /model و/models منتقي نماذج تفاعليًا مع قوائم منسدلة لموفر الخدمة والنموذج إضافة إلى خطوة Submit. يكون رد المنتقي مؤقتًا ويمكن فقط للمستخدم الذي استدعاه استخدامه.
مرفقات الملفات:
- يجب أن تشير كتل
fileإلى مرجع مرفق (attachment://<filename>) - قدّم المرفق عبر
media/path/filePath(ملف واحد)؛ استخدمmedia-galleryلعدة ملفات - استخدم
filenameلتجاوز اسم الرفع عندما يجب أن يطابق مرجع المرفق
- أضف
components.modalبما يصل إلى 5 حقول - أنواع الحقول:
textوcheckboxوradioوselectوrole-selectوuser-select - يضيف OpenClaw زر تشغيل تلقائيًا
التحكم في الوصول والتوجيه
- سياسة الرسائل الخاصة
- سياسة الخوادم
- الإشارات والرسائل الخاصة الجماعية
channels.discord.dmPolicy في الوصول إلى الرسائل الخاصة (الاسم القديم: channels.discord.dm.policy):pairing(الافتراضي)allowlistopen(يتطلب أن يحتويchannels.discord.allowFromعلى"*"؛ الاسم القديم:channels.discord.dm.allowFrom)disabled
pairing).أسبقية الحسابات المتعددة:- ينطبق
channels.discord.accounts.default.allowFromعلى الحسابdefaultفقط. - ترث الحسابات المسماة
channels.discord.allowFromعندما لا يتم تعيينallowFromالخاص بها. - لا ترث الحسابات المسماة
channels.discord.accounts.default.allowFrom.
user:<id>- إشارة
<@id>
توجيه الوكلاء المستند إلى الأدوار
استخدمbindings[].match.roles لتوجيه أعضاء خوادم Discord إلى وكلاء مختلفين بحسب معرّف الدور. تقبل عمليات الربط المستندة إلى الأدوار معرّفات الأدوار فقط، ويتم تقييمها بعد عمليات الربط peer أو parent-peer وقبل عمليات الربط الخاصة بالخادم فقط. إذا كانت عملية الربط تضبط أيضًا حقول مطابقة أخرى (مثل peer + guildId + roles)، فيجب أن تتطابق جميع الحقول المهيأة.
إعداد Developer Portal
إنشاء التطبيق والبوت
إنشاء التطبيق والبوت
- Discord Developer Portal -> Applications -> New Application
- Bot -> Add Bot
- انسخ رمز البوت المميز
الأذونات المميّزة
الأذونات المميّزة
- Message Content Intent
- Server Members Intent (موصى به)
setPresence) تمكين تحديثات الحالة للأعضاء.نطاقات OAuth والأذونات الأساسية
نطاقات OAuth والأذونات الأساسية
- النطاقات:
botوapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (اختياري)
Administrator ما لم تكن هناك حاجة صريحة إليه.نسخ المعرّفات
نسخ المعرّفات
- معرّف الخادم
- معرّف القناة
- معرّف المستخدم
الأوامر الأصلية ومصادقة الأوامر
- الإعداد الافتراضي لـ
commands.nativeهو"auto"وهو مفعّل لـ Discord. - التجاوز لكل قناة:
channels.discord.commands.native. - يؤدي
commands.native=falseإلى مسح أوامر Discord الأصلية المسجلة سابقًا صراحةً. - تستخدم مصادقة الأوامر الأصلية قوائم السماح/السياسات نفسها في Discord كما في معالجة الرسائل العادية.
- قد تظل الأوامر مرئية في واجهة Discord للمستخدمين غير المصرح لهم؛ لكن التنفيذ يظل يفرض مصادقة OpenClaw ويعيد “not authorized”.
ephemeral: true
تفاصيل الميزات
وسوم الردود والردود الأصلية
وسوم الردود والردود الأصلية
[[reply_to_current]][[reply_to:<id>]]
channels.discord.replyToMode:off(الافتراضي)firstall
off إلى تعطيل التسلسل الضمني للردود. لكن لا يزال يتم احترام وسوم [[reply_to_*]] الصريحة.يتم إظهار معرّفات الرسائل في السياق/السجل بحيث يمكن للوكلاء استهداف رسائل محددة.معاينة البث المباشر
معاينة البث المباشر
- يتحكم
channels.discord.streamingفي بث المعاينة (off|partial|block|progress، الافتراضي:off). - يظل الافتراضي
offلأن تعديلات معاينة Discord قد تصطدم بسرعة بحدود المعدل، خاصة عندما تشترك عدة بوتات أو بوابات في الحساب نفسه أو حركة مرور الخادم نفسها. - يتم قبول
progressلتحقيق الاتساق بين القنوات ويتم تعيينه إلىpartialعلى Discord. channels.discord.streamModeاسم قديم بديل ويتم ترحيله تلقائيًا.- يقوم
partialبتحرير رسالة معاينة واحدة مع وصول الرموز. - يخرج
blockأجزاء بحجم المسودة (استخدمdraftChunkلضبط الحجم ونقاط الفصل).
block (مقيدة بـ channels.discord.textChunkLimit):السجل والسياق وسلوك السلاسل
السجل والسياق وسلوك السلاسل
channels.discord.historyLimitالافتراضي20- الرجوع:
messages.groupChat.historyLimit - القيمة
0تعني التعطيل
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- يتم توجيه سلاسل Discord كجلسات قنوات
- يمكن استخدام بيانات تعريف السلسلة الأصلية لربط الجلسة بالأصل
- يرث إعداد السلسلة إعداد القناة الأصلية ما لم توجد إدخالة خاصة بالسلسلة
جلسات مرتبطة بالسلاسل للوكلاء الفرعيين
جلسات مرتبطة بالسلاسل للوكلاء الفرعيين
/focus <target>لربط السلسلة الحالية/الجديدة بهدف وكيل فرعي/جلسة/unfocusلإزالة ربط السلسلة الحالية/agentsلعرض عمليات التشغيل النشطة وحالة الربط/session idle <duration|off>لفحص/تحديث إلغاء التركيز التلقائي بعد عدم النشاط للروابط المركزة/session max-age <duration|off>لفحص/تحديث الحد الأقصى الصلب للعمر للروابط المركزة
- يضبط
session.threadBindings.*الإعدادات الافتراضية العامة. - يتجاوز
channels.discord.threadBindings.*سلوك Discord. - يجب أن تكون
spawnSubagentSessionsمساوية لـ true لإنشاء/ربط السلاسل تلقائيًا لـsessions_spawn({ thread: true }). - يجب أن تكون
spawnAcpSessionsمساوية لـ true لإنشاء/ربط السلاسل تلقائيًا لـ ACP (/acp spawn ... --thread ...أوsessions_spawn({ runtime: "acp", thread: true })). - إذا كانت روابط السلاسل معطلة لحساب ما، فلن تكون
/focusوعمليات ربط السلاسل ذات الصلة متاحة.
عمليات ربط قنوات ACP المستمرة
عمليات ربط قنوات ACP المستمرة
bindings[]معtype: "acp"وmatch.channel: "discord"
- يقوم
/acp spawn codex --bind hereبربط قناة Discord الحالية أو السلسلة الحالية في مكانها ويحافظ على توجيه الرسائل المستقبلية إلى جلسة ACP نفسها. - قد يعني ذلك أيضًا “بدء جلسة Codex ACP جديدة”، لكنه لا ينشئ سلسلة Discord جديدة بحد ذاته. تظل القناة الحالية هي سطح الدردشة.
- قد يستمر Codex بالعمل ضمن
cwdالخاص به أو ضمن مساحة عمل الخلفية الخاصة به على القرص. مساحة العمل هذه هي حالة وقت تشغيل وليست سلسلة Discord. - يمكن أن ترث رسائل السلاسل ربط ACP للقناة الأصلية.
- في قناة أو سلسلة مرتبطة، يعيد
/newو/resetتعيين جلسة ACP نفسها في مكانها. - لا تزال روابط السلاسل المؤقتة تعمل ويمكنها تجاوز حل الهدف أثناء نشاطها.
- لا تكون
spawnAcpSessionsمطلوبة إلا عندما يحتاج OpenClaw إلى إنشاء/ربط سلسلة فرعية عبر--thread auto|here. وهي غير مطلوبة لـ/acp spawn ... --bind hereفي القناة الحالية.
إشعارات التفاعلات
إشعارات التفاعلات
offown(الافتراضي)allallowlist(يستخدمguilds.<id>.users)
تفاعلات الإقرار
تفاعلات الإقرار
ackReaction رمزًا تعبيريًا للإقرار بينما يعالج OpenClaw رسالة واردة.ترتيب الحل:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- الرجوع إلى الرمز التعبيري لهوية الوكيل (
agents.list[].identity.emoji، وإلا ”👀”)
- يقبل Discord الرموز التعبيرية الموحدة أو أسماء الرموز التعبيرية المخصصة.
- استخدم
""لتعطيل التفاعل لقناة أو حساب.
عمليات الكتابة في الإعدادات
عمليات الكتابة في الإعدادات
/config set|unset (عندما تكون ميزات الأوامر مفعلة).التعطيل:وكيل Gateway
وكيل Gateway
channels.discord.proxy.دعم PluralKit
دعم PluralKit
- يمكن لقوائم السماح استخدام
pk:<memberId> - تتم مطابقة أسماء عرض الأعضاء بالاسم/slug فقط عندما تكون
channels.discord.dangerouslyAllowNameMatching: true - تستخدم عمليات البحث معرّف الرسالة الأصلي وتكون مقيدة بنافذة زمنية
- إذا فشل البحث، تُعامل الرسائل الممررة كرسائل بوت ويتم إسقاطها ما لم يكن
allowBots=true
إعداد الحالة
إعداد الحالة
- 0: Playing
- 1: Streaming (يتطلب
activityUrl) - 2: Listening
- 3: Watching
- 4: Custom (يستخدم نص النشاط باعتباره حالة status؛ والرمز التعبيري اختياري)
- 5: Competing
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(يدعم العنصر النائب{reason})
الموافقات في Discord
الموافقات في 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 من allowFrom الخاصة بالقناة أو الاسم القديم dm.allowFrom أو defaultTo الخاصة بالرسائل المباشرة. اضبط enabled: false لتعطيل Discord كعميل موافقة أصلي بشكل صريح.عندما تكون target مساوية لـ channel أو both، تكون مطالبة الموافقة مرئية في القناة. لا يمكن إلا للمعتمدين الذين تم حلهم استخدام الأزرار؛ ويتلقى المستخدمون الآخرون رفضًا مؤقتًا. تتضمن مطالبات الموافقة نص الأمر، لذا فعّل التسليم إلى القناة فقط في القنوات الموثوقة. إذا تعذر اشتقاق معرّف القناة من مفتاح الجلسة، يعود OpenClaw إلى التسليم عبر الرسائل الخاصة.يعرض Discord أيضًا أزرار الموافقة المشتركة التي تستخدمها قنوات دردشة أخرى. يضيف مكيّف Discord الأصلي أساسًا توجيه الرسائل الخاصة للمعتمدين والتوزيع على القنوات.
عندما تكون هذه الأزرار موجودة، تكون هي تجربة الموافقة الأساسية؛ ويجب على OpenClaw
تضمين أمر /approve يدوي فقط عندما تشير نتيجة الأداة إلى أن
موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد.تستخدم مصادقة Gateway لهذا المعالج عقد حل بيانات الاعتماد المشتركة نفسه الذي تستخدمه عملاء Gateway الآخرون:- مصادقة محلية مع أولوية env (
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORDثمgateway.auth.*) - في الوضع المحلي، يمكن استخدام
gateway.remote.*كرجوع فقط عندما لا يكونgateway.auth.*معيّنًا؛ تفشل SecretRef المحلية المهيأة ولكن غير المحلولة بشكل مغلق - دعم الوضع البعيد عبر
gateway.remote.*عند الاقتضاء - تكون تجاوزات URL آمنة ضد التجاوز: لا تعيد تجاوزات CLI استخدام بيانات اعتماد ضمنية، وتستخدم تجاوزات env بيانات اعتماد env فقط
- يتم حل المعرّفات التي تبدأ بـ
plugin:عبرplugin.approval.resolve. - يتم حل المعرّفات الأخرى عبر
exec.approval.resolve. - لا يجري Discord هنا خطوة رجوع إضافية من exec إلى plugin؛ فبادئة المعرّف هي التي تحدد أي طريقة gateway يستدعيها.
الأدوات وبوابات الإجراءات
تتضمن إجراءات رسائل Discord الرسائل، وإدارة القنوات، والإشراف، والحضور، وإجراءات البيانات الوصفية. أمثلة أساسية:- المراسلة:
sendMessageوreadMessagesوeditMessageوdeleteMessageوthreadReply - التفاعلات:
reactوreactionsوemojiList - الإشراف:
timeoutوkickوban - الحضور:
setPresence
channels.discord.actions.*.
سلوك البوابة الافتراضي:
| مجموعة الإجراءات | الافتراضي |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | مفعّل |
| roles | معطّل |
| moderation | معطّل |
| presence | معطّل |
واجهة Components v2
يستخدم OpenClaw Discord components v2 لموافقات exec وعلامات السياق المتقاطع. يمكن لإجراءات رسائل Discord أيضًا قبولcomponents لواجهة مستخدم مخصصة (متقدم؛ ويتطلب إنشاء حمولة مكونات عبر أداة discord)، بينما تظل embeds القديمة متاحة ولكن لا يُنصح بها.
- يضبط
channels.discord.ui.components.accentColorلون التمييز المستخدم من قبل حاويات مكونات Discord (hex). - اضبطه لكل حساب باستخدام
channels.discord.accounts.<id>.ui.components.accentColor. - يتم تجاهل
embedsعند وجود components v2.
القنوات الصوتية
يمكن لـ OpenClaw الانضمام إلى قنوات Discord الصوتية لإجراء محادثات آنية ومستمرة. هذا منفصل عن مرفقات الرسائل الصوتية. المتطلبات:- فعّل الأوامر الأصلية (
commands.nativeأوchannels.discord.commands.native). - اضبط
channels.discord.voice. - يحتاج البوت إلى أذونات Connect + Speak في القناة الصوتية المستهدفة.
/vc join|leave|status للتحكم في الجلسات. يستخدم الأمر الوكيل الافتراضي للحساب ويتبع قواعد قائمة السماح وسياسة المجموعات نفسها كما في أوامر Discord الأخرى.
مثال على الانضمام التلقائي:
- يتجاوز
voice.ttsالقيمةmessages.ttsلتشغيل الصوت فقط. - تستمد أدوار النسخ الصوتي حالة المالك من
allowFromفي Discord (أوdm.allowFrom)؛ لا يمكن للمتحدثين غير المالكين الوصول إلى الأدوات المخصصة للمالك فقط (مثلgatewayوcron). - يكون الصوت مفعّلًا افتراضيًا؛ اضبط
channels.discord.voice.enabled=falseلتعطيله. - يمرر
voice.daveEncryptionوvoice.decryptionFailureToleranceإلى خيارات الانضمام في@discordjs/voice. - القيم الافتراضية لـ
@discordjs/voiceهيdaveEncryption=trueوdecryptionFailureTolerance=24إذا لم يتم تعيينها. - يراقب OpenClaw أيضًا فشل فك التشفير عند الاستقبال ويتعافى تلقائيًا عبر مغادرة القناة الصوتية ثم إعادة الانضمام بعد فشل متكرر خلال نافذة قصيرة.
- إذا كانت سجلات الاستقبال تعرض مرارًا
DecryptionFailed(UnencryptedWhenPassthroughDisabled)، فقد يكون هذا هو خطأ الاستقبال في@discordjs/voiceالمتتبع في discord.js #11419.
الرسائل الصوتية
تعرض الرسائل الصوتية في Discord معاينة للموجة الصوتية وتتطلب صوت OGG/Opus مع بيانات وصفية. ينشئ OpenClaw الموجة الصوتية تلقائيًا، لكنه يحتاج إلى توفرffmpeg وffprobe على مضيف البوابة لفحص الملفات الصوتية وتحويلها.
المتطلبات والقيود:
- قدّم مسار ملف محلي (يتم رفض عناوين URL).
- احذف المحتوى النصي (لا يسمح Discord بالنص + رسالة صوتية في الحمولة نفسها).
- يُقبل أي تنسيق صوتي؛ ويحوّله OpenClaw إلى OGG/Opus عند الحاجة.
استكشاف الأخطاء وإصلاحها
تم استخدام أذونات غير مسموح بها أو أن البوت لا يرى رسائل الخادم
تم استخدام أذونات غير مسموح بها أو أن البوت لا يرى رسائل الخادم
- فعّل Message Content Intent
- فعّل Server Members Intent عندما تعتمد على حل المستخدم/العضو
- أعد تشغيل البوابة بعد تغيير الأذونات
يتم حظر رسائل الخادم بشكل غير متوقع
يتم حظر رسائل الخادم بشكل غير متوقع
- تحقق من
groupPolicy - تحقق من قائمة سماح الخادم ضمن
channels.discord.guilds - إذا كانت خريطة
channelsالخاصة بالخادم موجودة، فلا يُسمح إلا بالقنوات المدرجة - تحقق من سلوك
requireMentionوأنماط الإشارة
تم تعيين require mention إلى false لكنه لا يزال محظورًا
تم تعيين require mention إلى false لكنه لا يزال محظورًا
groupPolicy="allowlist"من دون قائمة سماح مطابقة للخادم/القناة- تم إعداد
requireMentionفي المكان الخاطئ (يجب أن يكون ضمنchannels.discord.guildsأو إدخال القناة) - تم حظر المرسل بواسطة قائمة السماح
usersللخادم/القناة
تنتهي مهلة المعالجات طويلة التشغيل أو تتكرر الردود
تنتهي مهلة المعالجات طويلة التشغيل أو تتكرر الردود
Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATESlow listener detected ...discord inbound worker timed out after ...
- حساب واحد:
channels.discord.eventQueue.listenerTimeout - حسابات متعددة:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout
- حساب واحد:
channels.discord.inboundWorker.runTimeoutMs - حسابات متعددة:
channels.discord.accounts.<accountId>.inboundWorker.runTimeoutMs - الافتراضي:
1800000(30 دقيقة)؛ اضبطه إلى0للتعطيل
eventQueue.listenerTimeout لإعداد المستمع البطيء وinboundWorker.runTimeoutMs
فقط إذا كنت تريد صمام أمان منفصلًا لأدوار الوكيل الموضوعة في قائمة الانتظار.عدم تطابق تدقيق الأذونات
عدم تطابق تدقيق الأذونات
channels status --probe إلا مع معرّفات القنوات الرقمية.إذا كنت تستخدم مفاتيح slug، فقد يظل التطابق في وقت التشغيل يعمل، لكن الفحص لا يمكنه التحقق بالكامل من الأذونات.مشكلات الرسائل الخاصة والاقتران
مشكلات الرسائل الخاصة والاقتران
- الرسائل الخاصة معطلة:
channels.discord.dm.enabled=false - سياسة الرسائل الخاصة معطلة:
channels.discord.dmPolicy="disabled"(الاسم القديم:channels.discord.dm.policy) - بانتظار الموافقة على الاقتران في وضع
pairing
حلقات بوت إلى بوت
حلقات بوت إلى بوت
channels.discord.allowBots=true، فاستخدم قواعد صارمة للإشارة وقائمة السماح لتجنب سلوك الحلقات.
ويفضّل استخدام channels.discord.allowBots="mentions" لقبول رسائل البوت التي تشير إلى البوت فقط.انقطاع STT الصوتي مع DecryptionFailed(...)
انقطاع STT الصوتي مع DecryptionFailed(...)
- حافظ على تحديث OpenClaw (
openclaw update) حتى يكون منطق التعافي من استقبال Discord الصوتي موجودًا - أكّد أن
channels.discord.voice.daveEncryption=true(الافتراضي) - ابدأ من
channels.discord.voice.decryptionFailureTolerance=24(الافتراضي upstream) واضبط فقط عند الحاجة - راقب السجلات بحثًا عن:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- إذا استمرت الأعطال بعد إعادة الانضمام التلقائية، فاجمع السجلات وقارنها مع discord.js #11419
مؤشرات مرجع الإعدادات
المرجع الأساسي: حقول Discord عالية الأهمية:- بدء التشغيل/المصادقة:
enabledوtokenوaccounts.*وallowBots - السياسة:
groupPolicyوdm.*وguilds.*وguilds.*.channels.* - الأوامر:
commands.nativeوcommands.useAccessGroupsوconfigWritesوslashCommand.* - قائمة انتظار الأحداث:
eventQueue.listenerTimeout(ميزانية المستمع) وeventQueue.maxQueueSizeوeventQueue.maxConcurrency - العامل الوارد:
inboundWorker.runTimeoutMs - الرد/السجل:
replyToModeوhistoryLimitوdmHistoryLimitوdms.*.historyLimit - التسليم:
textChunkLimitوchunkModeوmaxLinesPerMessage - البث:
streaming(الاسم القديم البديل:streamMode) وdraftChunkوblockStreamingوblockStreamingCoalesce - الوسائط/إعادة المحاولة:
mediaMaxMbوretry- يحدد
mediaMaxMbالحد الأقصى للتحميلات الصادرة إلى Discord (الافتراضي:8MB)
- يحدد
- الإجراءات:
actions.* - الحالة:
activityوstatusوactivityTypeوactivityUrl - واجهة المستخدم:
ui.components.accentColor - الميزات:
threadBindingsوbindings[]على المستوى الأعلى (type: "acp") وpluralkitوexecApprovalsوintentsوagentComponentsوheartbeatوresponsePrefix
السلامة والعمليات
- تعامل مع رموز البوت المميزة على أنها أسرار (ويُفضّل
DISCORD_BOT_TOKENفي البيئات المُدارة). - امنح أقل قدر لازم من أذونات Discord.
- إذا كانت حالة نشر/حالة الأوامر قديمة، فأعد تشغيل البوابة وأعد التحقق باستخدام
openclaw channels status --probe.