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 (اختياري)
فعّل وضع المطور واجمع معرّفاتك
- انقر 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 + 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 ويعيد “غير مخوّل”.
ephemeral: true
تفاصيل الميزات
وسوم الردود والردود الأصلية
وسوم الردود والردود الأصلية
[[reply_to_current]][[reply_to:<id>]]
channels.discord.replyToMode:off(افتراضي)firstallbatched
off إلى تعطيل سلاسل الردود الضمنية. ولا تزال وسوم [[reply_to_*]] الصريحة محترمة.
يقوم first دائمًا بإرفاق مرجع الرد الأصلي الضمني بأول رسالة Discord صادرة في الدورة.
يقوم batched بإرفاق مرجع الرد الأصلي الضمني في Discord فقط عندما
تكون الدورة الواردة دفعة مؤجلة من عدة رسائل. ويكون هذا مفيدًا
عندما تريد الردود الأصلية أساسًا للمحادثات المتدفقة والغامضة، وليس لكل
دورة رسالة مفردة.تظهر معرّفات الرسائل في السياق/السجل حتى تتمكن الوكلاء من استهداف رسائل محددة.معاينة البث المباشر
معاينة البث المباشر
- يتحكم
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 (عندما تكون ميزات الأوامر مفعلة).التعطيل:وكيل البوابة
وكيل البوابة
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 (يستخدم نص النشاط كحالة الحالة؛ والرمز التعبيري اختياري)
- 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 معتمدي التنفيذ من allowFrom الخاص بالقناة أو dm.allowFrom القديم أو defaultTo للرسائل المباشرة. اضبط enabled: false لتعطيل Discord كعميل موافقات أصلي صراحةً.عندما تكون target هي channel أو both، تكون مطالبة الموافقة مرئية في القناة. ويمكن فقط للمعتمدين الذين تم تحليلهم استخدام الأزرار؛ أما المستخدمون الآخرون فيتلقون رفضًا مؤقتًا. تتضمن مطالبات الموافقة نص الأمر، لذا فعّل التسليم إلى القناة فقط في القنوات الموثوقة. وإذا تعذر اشتقاق معرّف القناة من مفتاح الجلسة، يعود OpenClaw إلى التسليم عبر الرسائل الخاصة.يعرض Discord أيضًا أزرار الموافقة المشتركة المستخدمة من قِبل قنوات الدردشة الأخرى. يضيف محول Discord الأصلي أساسًا توجيه الرسائل الخاصة للمعتمدين والتوزيع إلى القناة.
وعندما تكون هذه الأزرار موجودة، فإنها تكون تجربة الموافقة الأساسية؛ لذا
يجب على OpenClaw أن يتضمن أمر /approve يدويًا فقط عندما تشير نتيجة الأداة إلى
أن موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد.تستخدم مصادقة البوابة لهذا المعالج نفس عقد تحليل بيانات الاعتماد المشترك مثل عملاء البوابة الآخرين:- مصادقة محلية تبدأ من env (
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORDثمgateway.auth.*) - في الوضع المحلي، يمكن استخدام
gateway.remote.*كبديل فقط عندما لا يكونgateway.auth.*مضبوطًا؛ أما SecretRefs المحلية المضبوطة ولكن غير المحلولة فتفشل بشكل مغلق - دعم الوضع البعيد عبر
gateway.remote.*عند الاقتضاء - تجاوزات URL آمنة للتجاوز: تجاوزات CLI لا تعيد استخدام بيانات الاعتماد الضمنية، وتجاوزات env تستخدم بيانات اعتماد env فقط
- يتم تحليل المعرّفات التي تبدأ بـ
plugin:عبرplugin.approval.resolve. - يتم تحليل المعرّفات الأخرى عبر
exec.approval.resolve. - لا يجري Discord هنا قفزة بديلة إضافية من exec إلى plugin؛ إذ يحدد بادئة المعرّف طريقة البوابة التي يستدعيها.
الأدوات وبوابات الإجراءات
تتضمن إجراءات رسائل Discord المراسلة وإدارة القنوات والإشراف والحالة وإجراءات البيانات الوصفية. أمثلة أساسية:- المراسلة:
sendMessageوreadMessagesوeditMessageوdeleteMessageوthreadReply - التفاعلات:
reactوreactionsوemojiList - الإشراف:
timeoutوkickوban - الحالة:
setPresence
event-create معامل image اختياريًا (URL أو مسار ملف محلي) لتعيين صورة غلاف الحدث المجدول.
توجد بوابات الإجراءات تحت channels.discord.actions.*.
السلوك الافتراضي للبوابات:
| Action group | Default |
|---|---|
| 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 لموافقات التنفيذ وعلامات السياق المتقاطع. ويمكن أيضًا لإجراءات رسائل Discord قبولcomponents لواجهة مستخدم مخصصة (متقدم؛ يتطلب إنشاء حمولة مكونات عبر أداة discord)، بينما لا تزال embeds القديمة متاحة لكنها غير موصى بها.
- يضبط
channels.discord.ui.components.accentColorلون التمييز المستخدم بواسطة حاويات مكونات Discord (ست عشري). - اضبطه لكل حساب باستخدام
channels.discord.accounts.<id>.ui.components.accentColor. - يتم تجاهل
embedsعندما تكون مكونات 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 (الافتراضي:100MB)
- يحدد
- الإجراءات:
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.