Discord (Bot API)
الحالة: جاهز للرسائل المباشرة (DM) وقنوات نصّ الخوادم (guild) عبر بوابة بوت Discord الرسمية.إعداد سريع (للمبتدئين)
- أنشئ بوت Discord وانسخ رمز البوت (bot token).
- في إعدادات تطبيق Discord، فعّل Message Content Intent (و Server Members Intent إذا كنت تخطط لاستخدام قوائم السماح أو البحث عن الأسماء).
- عيّن الرمز المميّز لـ OpenClaw:
- متغير البيئة:
DISCORD_BOT_TOKEN=... - أو في التهيئة:
channels.discord.token: "...". - إذا تم تعيينهما معًا، تكون أولوية التهيئة أعلى (الرجوع إلى متغير البيئة يكون فقط للحساب الافتراضي).
- متغير البيئة:
- ادعُ البوت إلى خادمك مع أذونات الرسائل (أنشئ خادمًا خاصًا إذا كنت تريد الرسائل المباشرة فقط).
- شغّل الـ Gateway.
- الوصول عبر الرسائل المباشرة يكون بالاقتران افتراضيًا؛ وافق على رمز الاقتران عند أول تواصل.
الأهداف
- التحدث إلى OpenClaw عبر الرسائل المباشرة في Discord أو قنوات الخوادم.
- المحادثات المباشرة تُدمج في الجلسة الرئيسية للوكيل (الافتراضي
agent:main:main)؛ بينما تبقى قنوات الخوادم معزولة كـagent:<agentId>:discord:channel:<channelId>(تستخدم أسماء العرضdiscord:<guildSlug>#<channelSlug>). - تُتجاهل الرسائل المباشرة الجماعية افتراضيًا؛ يمكن تمكينها عبر
channels.discord.dm.groupEnabledوتقييدها اختياريًا عبرchannels.discord.dm.groupChannels. - الحفاظ على توجيه حتمي: الردود تعود دائمًا إلى القناة التي وصلت منها.
كيف يعمل
- أنشئ تطبيق Discord → Bot، وفعّل المقاصد التي تحتاجها (الرسائل المباشرة + رسائل الخوادم + محتوى الرسائل)، ثم انسخ رمز البوت.
- ادعُ البوت إلى خادمك مع الأذونات اللازمة لقراءة/إرسال الرسائل حيث تريد استخدامه.
- هيّئ OpenClaw باستخدام
channels.discord.token(أوDISCORD_BOT_TOKENكخيار احتياطي). - شغّل الـ Gateway؛ سيبدأ قناة Discord تلقائيًا عند توفر الرمز (الأولوية للتهيئة ثم متغير البيئة) وعندما لا يكون
channels.discord.enabledهوfalse.- إذا فضّلت متغيرات البيئة، عيّن
DISCORD_BOT_TOKEN(كتلة التهيئة اختيارية).
- إذا فضّلت متغيرات البيئة، عيّن
- المحادثات المباشرة: استخدم
user:<id>(أو إشارة<@id>) عند التسليم؛ جميع الأدوار تُسجَّل في جلسةmainالمشتركة. المعرفات الرقمية المجردة ملتبسة ومرفوضة. - قنوات الخوادم: استخدم
channel:<channelId>للتسليم. الإشارات مطلوبة افتراضيًا ويمكن تعيينها لكل خادم أو لكل قناة. - المحادثات المباشرة: آمنة افتراضيًا عبر
channels.discord.dm.policy(الافتراضي:"pairing"). يحصل المرسلون غير المعروفين على رمز اقتران (ينتهي بعد ساعة)؛ وافق عبرopenclaw pairing approve discord <code>.- للحفاظ على السلوك القديم «مفتوح للجميع»: عيّن
channels.discord.dm.policy="open"وchannels.discord.dm.allowFrom=["*"]. - لقائمة سماح صارمة: عيّن
channels.discord.dm.policy="allowlist"وأدرج المرسلين فيchannels.discord.dm.allowFrom. - لتجاهل جميع الرسائل المباشرة: عيّن
channels.discord.dm.enabled=falseأوchannels.discord.dm.policy="disabled".
- للحفاظ على السلوك القديم «مفتوح للجميع»: عيّن
- الرسائل المباشرة الجماعية تُتجاهل افتراضيًا؛ فعّلها عبر
channels.discord.dm.groupEnabledوقيّدها اختياريًا عبرchannels.discord.dm.groupChannels. - قواعد الخوادم الاختيارية: عيّن
channels.discord.guildsباستخدام معرّف الخادم (المفضّل) أو الاسم المختصر، مع قواعد لكل قناة. - الأوامر الأصلية الاختيارية: القيمة الافتراضية لـ
commands.nativeهي"auto"(مفعّل لـ Discord/Telegram، ومعطّل لـ Slack). يمكن التجاوز عبرchannels.discord.commands.native: true|false|"auto"؛ ويقومfalseبمسح الأوامر المسجّلة سابقًا. تتحكمcommands.textفي الأوامر النصية ويجب إرسالها كرسائل مستقلة/.... استخدمcommands.useAccessGroups: falseلتجاوز فحوصات مجموعات الوصول للأوامر.- قائمة الأوامر الكاملة + التهيئة: Slash commands
- سجل سياق الخادم الاختياري: عيّن
channels.discord.historyLimit(الافتراضي 20، ويرجع إلىmessages.groupChat.historyLimit) لتضمين آخر N رسائل خادم كسياق عند الرد على إشارة. عيّن0لتعطيله. - التفاعلات: يمكن للوكيل إطلاق التفاعلات عبر أداة
discord(مقيّدة بواسطةchannels.discord.actions.*).- دلالات إزالة التفاعلات: انظر /tools/reactions.
- لا تُعرَض أداة
discordإلا عندما تكون القناة الحالية Discord.
- تستخدم الأوامر الأصلية مفاتيح جلسات معزولة (
agent:<agentId>:discord:slash:<userId>) بدل الجلسة المشتركةmain.
<@id>.
ملاحظة: الأسماء المختصرة تكون بحروف صغيرة مع استبدال المسافات بـ -. تُختصر أسماء القنوات دون البادئة #.
ملاحظة: تتضمن أسطر سياق الخادم [from:] كلاً من author.tag + id لتسهيل الردود الجاهزة للإشارة.
كتابات التهيئة
افتراضيًا، يُسمح لـ Discord بكتابة تحديثات التهيئة التي يطلقها/config set|unset (يتطلب commands.config: true).
للتعطيل:
كيفية إنشاء بوتك الخاص
هذا إعداد «Discord Developer Portal» لتشغيل OpenClaw في قناة خادم (guild) مثل#help.
1. إنشاء تطبيق Discord + مستخدم البوت
- Discord Developer Portal → Applications → New Application
- داخل تطبيقك:
- Bot → Add Bot
- انسخ Bot Token (وهو ما تضعه في
DISCORD_BOT_TOKEN)
2) تمكين مقاصد البوابة التي يحتاجها OpenClaw
تحظر Discord «المقاصد المميّزة» ما لم تُمكَّن صراحةً. في Bot → Privileged Gateway Intents، فعّل:- Message Content Intent (مطلوب لقراءة نص الرسائل في معظم الخوادم؛ بدونه سترى «Used disallowed intents» أو سيتصل البوت دون أن يتفاعل مع الرسائل)
- Server Members Intent (موصى به؛ مطلوب لبعض عمليات البحث عن الأعضاء/المستخدمين ومطابقة قوائم السماح في الخوادم)
setPresence) يستخدم OP3 للبوابة ولا يتطلب هذا المقصد؛ يلزم فقط إذا أردت تلقي تحديثات الحضور لأعضاء خادم آخرين.
3. إنشاء رابط دعوة (مولّد OAuth2)
في تطبيقك: OAuth2 → URL Generator Scopes- ✅
bot - ✅
applications.commands(مطلوب للأوامر الأصلية)
- ✅ View Channels
- ✅ Send Messages
- ✅ Read Message History
- ✅ Embed Links
- ✅ Attach Files
- ✅ Add Reactions (اختياري لكنه موصى به)
- ✅ Use External Emojis / Stickers (اختياري؛ فقط إذا رغبت بها)
4. الحصول على المعرّفات (الخادم/المستخدم/القناة)
تستخدم Discord معرّفات رقمية في كل مكان؛ وتفضّل تهيئة OpenClaw المعرّفات.- Discord (سطح المكتب/الويب) → User Settings → Advanced → فعّل Developer Mode
- انقر بزر الفأرة الأيمن:
- اسم الخادم → Copy Server ID (معرّف الخادم)
- القناة (مثل
#help) → Copy Channel ID - المستخدم الخاص بك → Copy User ID
5) تهيئة OpenClaw
الرمز
تعيين رمز البوت عن طريق var (موصى به على الخوادم):DISCORD_BOT_TOKEN=...
channels.discord.accounts مع رموز لكل حساب و name اختياريًا. انظر gateway/configuration للنمط المشترك.
قائمة السماح + توجيه القنوات
مثال «خادم واحد، السماح لي فقط، السماح لقناة #help فقط»:- تعني
requireMention: trueأن البوت يرد فقط عند الإشارة إليه (موصى به للقنوات المشتركة). - تُعد
agents.list[].groupChat.mentionPatterns(أوmessages.groupChat.mentionPatterns) أيضًا إشارات لرسائل الخوادم. - تجاوز متعدد الوكلاء: عيّن أنماطًا لكل وكيل على
agents.list[].groupChat.mentionPatterns. - إذا وُجد
channels، تُرفَض أي قناة غير مُدرجة افتراضيًا. - استخدم إدخال قناة
"*"لتطبيق الإعدادات الافتراضية عبر جميع القنوات؛ وتغلّب الإدخالات الصريحة على الرمز العام. - ترث المواضيع (threads) إعدادات القناة الأم (قائمة السماح،
requireMention، المهارات، المطالبات، إلخ) ما لم تُضِف معرّف قناة الموضوع صراحةً. إلا إذا قمت بإضافة معرف قناة الموضوع صراحة. - تلميح المالك: عندما تطابق قائمة سماح
usersعلى مستوى الخادم أو القناة المرسل، يعامل OpenClaw هذا المرسل كمالك في مطالبة النظام. لمالك عام عبر القنوات، عيّنcommands.ownerAllowFrom. - تُتجاهل رسائل البوت افتراضيًا؛ عيّن
channels.discord.allowBots=trueللسماح بها (تبقى رسائل البوت نفسه مُصفّاة). - تحذير: إذا سمحت بالرد على بوتات أخرى (
channels.discord.allowBots=true)، فامنع حلقات الرد بين البوتات عبر قوائم السماحrequireMentionوchannels.discord.guilds.*.channels.<id>.users، و/أو إزالة الحواجز فيAGENTS.mdوSOUL.md.
6. التحقق من العمل
- شغّل الـ Gateway.
- في قناة الخادم، أرسل:
@Krill hello(أو أي اسم بوتك). - إذا لم يحدث شيء: تحقّق من استكشاف الأخطاء وإصلاحها أدناه.
استكشاف الأخطاء وإصلاحها
- أولًا: شغّل
openclaw doctorوopenclaw channels status --probe(تحذيرات قابلة للتنفيذ + تدقيقات سريعة). - «Used disallowed intents»: فعّل Message Content Intent (وربما Server Members Intent) في بوابة المطوّرين، ثم أعد تشغيل الـ Gateway.
- يتصل البوت لكنه لا يرد أبدًا في قناة خادم:
- نقص Message Content Intent، أو
- يفتقر البوت لأذونات القناة (View/Send/Read History)، أو
- يتطلب إعدادك ذكر ولم تذكر ذلك، أو
- قائمة السماح للخادم/القناة ترفض القناة/المستخدم.
requireMention: falseلكن لا تزال بلا ردود:- القيمة الافتراضية لـ
channels.discord.groupPolicyهي allowlist؛ عيّنها إلى"open"أو أضِف إدخال خادم تحتchannels.discord.guilds(واختياريًا أدرج القنوات تحتchannels.discord.guilds.<id>.channelsللتقييد).- إذا عيّنت فقط
DISCORD_BOT_TOKENولم تُنشئ قسمchannels.discord، فإن وقت التشغيل يعيّنgroupPolicyافتراضيًا إلىopen. أضِفchannels.discord.groupPolicy،channels.defaults.groupPolicy، أو قائمة سماح خادم/قناة لتقييده.
- إذا عيّنت فقط
- يجب أن يكون
requireMentionتحتchannels.discord.guilds(أو قناة محددة). تجاهَلchannels.discord.requireMentionعلى المستوى الأعلى. - تدقيق الأذونات (
channels status --probe) يتحقق فقط من معرّفات القنوات الرقمية. إذا استخدمت أسماء مختصرة/أسماء كـ مفاتيحchannels.discord.guilds.*.channels، فلا يمكن للتدقيق التحقق من الأذونات. - الرسائل المباشرة لا تعمل:
channels.discord.dm.enabled=false، أوchannels.discord.dm.policy="disabled"، أو لم تتم الموافقة عليك بعد (channels.discord.dm.policy="pairing"). - موافقات التنفيذ في Discord: يدعم Discord واجهة أزرار لموافقات التنفيذ في الرسائل المباشرة (السماح مرة / السماح دائمًا / الرفض). إن
/approve <id> ...مخصص فقط للموافقات المُعاد توجيهها ولن يحل مطالبات الأزرار في Discord. إذا رأيت❌ Failed to submit approval: Error: unknown approval idأو لم تظهر الواجهة، فتحقق من:channels.discord.execApprovals.enabled: trueفي تهيئتك.- إدراج معرّف مستخدم Discord الخاص بك في
channels.discord.execApprovals.approvers(تُرسَل الواجهة فقط للموافقين). - استخدام الأزرار في رسالة DM (Allow once، Always allow، Deny).
- راجع Exec approvals و Slash commands لتدفق الموافقات والأوامر الأوسع.
القدرات والحدود
- الرسائل المباشرة وقنوات النص في الخوادم (تُعامل المواضيع كقنوات منفصلة؛ الصوت غير مدعوم).
- تُرسل مؤشرات الكتابة بأفضل جهد؛ ويستخدم تقسيم الرسائل
channels.discord.textChunkLimit(الافتراضي 2000) ويقسّم الردود الطويلة حسب عدد الأسطر (channels.discord.maxLinesPerMessage، الافتراضي 17). - تقسيم اختياري حسب الأسطر الجديدة: عيّن
channels.discord.chunkMode="newline"للتقسيم عند الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول. - دعم رفع الملفات حتى الحد المهيّأ
channels.discord.mediaMaxMb(الافتراضي 8 ميغابايت). - ردود الخوادم مقيّدة بالإشارة افتراضيًا لتجنب الضوضاء.
- يُحقن سياق الرد عند الإشارة إلى رسالة أخرى (المحتوى المقتبس + المعرّفات).
- ترابط الردود الأصلي معطّل افتراضيًا؛ فعّله عبر
channels.discord.replyToModeوعلامات الرد.
سياسة إعادة المحاولة
تعيد مكالمات Discord API الصادرة المحاولة عند حدود المعدل (429) باستخدامretry_after الخاص بـ Discord عندما يتوفر، مع تراجع أُسّي وتذبذب. تُهيّأ عبر channels.discord.retry. انظر Retry policy.
التهيئة
messages.ackReaction +
messages.ackReactionScope. استخدم messages.removeAckAfterReply لمسح
تفاعل الإقرار بعد رد البوت.
dm.enabled: عيّنfalseلتجاهل جميع الرسائل المباشرة (الافتراضيtrue).dm.policy: التحكم في وصول الرسائل المباشرة (pairingموصى به). يتطلب"open"وجودdm.allowFrom=["*"].dm.allowFrom: قائمة سماح الرسائل المباشرة (معرّفات المستخدمين أو الأسماء). تُستخدم بواسطةdm.policy="allowlist"وللتحققdm.policy="open". يقبل المعالج أسماء المستخدمين ويحلّها إلى معرّفات عندما يستطيع البوت البحث عن الأعضاء.dm.groupEnabled: تمكين الرسائل المباشرة الجماعية (الافتراضيfalse).dm.groupChannels: قائمة سماح اختيارية لمعرّفات/أسماء مختصرة لقنوات الرسائل المباشرة الجماعية.groupPolicy: يتحكم في التعامل مع قنوات الخوادم (open|disabled|allowlist)؛ يتطلبallowlistقوائم سماح للقنوات.guilds: قواعد لكل خادم بمفتاح معرّف الخادم (المفضّل) أو الاسم المختصر.guilds."*": إعدادات افتراضية لكل خادم تُطبَّق عند عدم وجود إدخال صريح.guilds.<id>.slug: اسم مختصر ودّي اختياري يُستخدم لأسماء العرض.guilds.<id>.users: قائمة سماح اختيارية لمستخدمي الخادم (معرّفات أو أسماء).guilds.<id>.tools: تجاوزات سياسة الأدوات على مستوى الخادم (allow/deny/alsoAllow) تُستخدم عند غياب تجاوز القناة.guilds.<id>.toolsBySender: تجاوزات سياسة الأدوات لكل مُرسِل على مستوى الخادم (تُطبَّق عند غياب تجاوز القناة؛ يدعم الرمز العام"*").guilds.<id>.channels.<channel>.allow: السماح/المنع للقناة عندماgroupPolicy="allowlist".guilds.<id>.channels.<channel>.requireMention: تقييد الإشارة للقناة.guilds.<id>.channels.<channel>.tools: تجاوزات سياسة الأدوات لكل قناة (allow/deny/alsoAllow).guilds.<id>.channels.<channel>.toolsBySender: تجاوزات سياسة الأدوات لكل مُرسِل داخل القناة (يدعم الرمز العام"*").guilds.<id>.channels.<channel>.users: قائمة سماح مستخدمين اختيارية لكل قناة.guilds.<id>.channels.<channel>.skills: مُرشّح المهارات (الحذف = كل المهارات، الفارغ = لا شيء).guilds.<id>.channels.<channel>.systemPrompt: مطالبة نظام إضافية للقناة. تُحقن مواضيع قنوات Discord كسياق غير موثوق (ليس مطالبة نظام).guilds.<id>.channels.<channel>.enabled: عيّنfalseلتعطيل القناة.guilds.<id>.channels: قواعد القنوات (المفاتيح هي الأسماء المختصرة أو المعرّفات).guilds.<id>.requireMention: متطلب الإشارة على مستوى الخادم (قابل للتجاوز لكل قناة).guilds.<id>.reactionNotifications: وضع أحداث نظام التفاعلات (off،own،all،allowlist).textChunkLimit: حجم تجزئة النص الصادر (محارف). الافتراضي: 2000.chunkMode: يقومlength(الافتراضي) بالتقسيم فقط عند تجاوزtextChunkLimit؛ بينما يقومnewlineبالتقسيم عند الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول.maxLinesPerMessage: الحد الأقصى المرن لعدد الأسطر لكل رسالة. الافتراضي: 17.mediaMaxMb: تقييد الوسائط الواردة المحفوظة على القرص.historyLimit: عدد رسائل الخادم الأخيرة المُضمَّنة كسياق عند الرد على إشارة (الافتراضي 20؛ يرجع إلىmessages.groupChat.historyLimit؛ يُعطَّل عبر0).dmHistoryLimit: حد سجل الرسائل المباشرة بوحدات أدوار المستخدم. تجاوزات لكل مستخدم:dms["<user_id>"].historyLimit.retry: سياسة إعادة المحاولة لمكالمات Discord API الصادرة (المحاولات، minDelayMs، maxDelayMs، jitter).pluralkit: حل رسائل PluralKit المُفوَّضة بحيث تظهر أعضاء النظام كمرسلين مميّزين.actions: بوابات الأدوات لكل إجراء؛ الحذف للسماح بالجميع (عيّنfalseللتعطيل).reactions(يشمل react + قراءة التفاعلات)stickers،emojiUploads،stickerUploads،polls،permissions،messages،threads،pins،searchmemberInfo،roleInfo،channelInfo،voiceStatus،eventschannels(إنشاء/تحرير/حذف القنوات + الفئات + الأذونات)roles(إضافة/إزالة الأدوار، الافتراضيfalse)moderation(إسكات/طرد/حظر، الافتراضيfalse)presence(حالة/نشاط البوت، الافتراضيfalse)
execApprovals: موافقات تنفيذ خاصة بـ Discord عبر الرسائل المباشرة (واجهة أزرار). يدعمenabled،approvers،agentFilter،sessionFilter.
guilds.<id>.reactionNotifications:
off: بلا أحداث تفاعل.own: التفاعلات على رسائل البوت نفسه (الافتراضي).all: كل التفاعلات على جميع الرسائل.allowlist: التفاعلات منguilds.<id>.usersعلى جميع الرسائل (قائمة فارغة تعطل).
دعم PluralKit (PK)
فعّل عمليات بحث PK بحيث تُحل الرسائل المُفوَّضة إلى النظام + العضو الأساسي. عند التمكين، يستخدم OpenClaw هوية العضو لقوائم السماح ويُسمّي المرسلMember (PK:System) لتجنب الإشارات غير المقصودة في Discord.
- استخدم
pk:<memberId>فيdm.allowFrom،guilds.<id>.users، أوusersلكل قناة. - تُطابق أسماء العرض للأعضاء أيضًا بالاسم/الاسم المختصر.
- تستخدم عمليات البحث معرّف رسالة Discord الأصلي (قبل التفويض)، لذا لا يحل API الخاص بـ PK إلا ضمن نافذة 30 دقيقة.
- إذا فشلت عمليات بحث PK (مثل نظام خاص دون رمز)، تُعامل الرسائل المُفوَّضة كرسائل بوت وتُسقَط ما لم يكن
channels.discord.allowBots=true.
القيم الافتراضية لإجراءات الأدوات
| مجموعة الإجراءات | الافتراضي | الملاحظات |
|---|---|---|
| reactions | مفعّل | التفاعل + سرد التفاعلات + emojiList |
| stickers | مفعّل | إرسال الملصقات |
| emojiUploads | مفعّل | تحميل الرموز التعبيرية |
| stickerUploads | مفعّل | رفع الملصقات |
| polls | مفعّل | إنشاء استطلاعات |
| permissions | مفعّل | لقطة أذونات القناة |
| messages | مفعّل | قراءة/إرسال/تحرير/حذف |
| threads | مفعّل | إنشاء/سرد/رد |
| pins | مفعّل | تثبيت/إلغاء التثبيت/القائمة |
| search | مفعّل | البحث في الرسائل (ميزة تجريبية) |
| memberInfo | مفعّل | معلومات الأعضاء |
| roleInfo | مفعّل | قائمة الأدوار |
| channelInfo | مفعّل | معلومات القناة + السرد |
| channels | مفعّل | إدارة القنوات/الفئات |
| voiceStatus | مفعّل | الاستعلام عن حالة الصوت |
| events | مفعّل | سرد/إنشاء أحداث مجدولة |
| الأدوار | معطل | إضافة/إزالة الأدوار |
| الإشراف | معطل | إسكات/طرد/حظر |
| التواجد | معطل | حالة/نشاط البوت (setPresence) |
replyToMode:off(الافتراضي)،first، أوall. يُطبَّق فقط عندما يتضمن النموذج وسم رد.
وسوم الرد
لطلب رد مترابط، يمكن للنموذج تضمين وسم واحد في مخرجاته:[[reply_to_current]]— الرد على رسالة Discord المُحفِّزة.[[reply_to:<id>]]— الرد على معرّف رسالة محدد من السياق/السجل. تُلحَق معرّفات الرسائل الحالية بالمطالبات كـ[message_id: …]؛ وتتضمن إدخالات السجل المعرّفات بالفعل.
channels.discord.replyToMode:
off: تجاهل الوسوم.first: يكون الجزء/المرفق الصادر الأول فقط ردًا.all: يكون كل جزء/مرفق صادر ردًا.
- تقبل
allowFrom/users/groupChannelsالمعرّفات، والأسماء، والوسوم، أو الإشارات مثل<@id>. - تُدعَم البوادئ مثل
discord:/user:(للمستخدمين) وchannel:(للرسائل المباشرة الجماعية). - استخدم
*للسماح لأي مرسل/قناة. - عند وجود
guilds.<id>.channels، تُرفَض القنوات غير المدرجة افتراضيًا. - عند حذف
guilds.<id>.channels، تُسمَح جميع القنوات في الخادم المدرج. - للسماح بعدم وجود قنوات، عيّن
channels.discord.groupPolicy: "disabled"(أو أبقِ قائمة السماح فارغة). - يقبل معالج التهيئة أسماء
Guild/Channel(العامة + الخاصة) ويحلّها إلى معرّفات عند الإمكان. - عند بدء التشغيل، يحل OpenClaw أسماء القنوات/المستخدمين في قوائم السماح إلى معرّفات (عندما يستطيع البوت البحث عن الأعضاء) ويسجّل الربط؛ وتُحفَظ الإدخالات غير المحلولة كما كُتبت.
- تعكس الأوامر المسجّلة أوامر الدردشة في OpenClaw.
- تلتزم الأوامر الأصلية بقوائم السماح نفسها الخاصة بالرسائل المباشرة/رسائل الخوادم (
channels.discord.dm.allowFrom،channels.discord.guilds، قواعد لكل قناة). - قد تبقى أوامر Slash مرئية في واجهة Discord لمستخدمين غير مُدرجين؛ يفرض OpenClaw قوائم السماح عند التنفيذ ويرد «غير مخوّل».
إجراءات الأدوات
يمكن للوكيل استدعاءdiscord بإجراءات مثل:
react/reactions(إضافة أو سرد التفاعلات)sticker،poll،permissionsreadMessages،sendMessage،editMessage،deleteMessage- تتضمن حمولات أدوات القراءة/البحث/التثبيت
timestampMsالمُوحَّد (UTC epoch ms) وtimestampUtcإلى جانبtimestampالخام من Discord. threadCreate،threadList،threadReplypinMessage،unpinMessage،listPinssearchMessages،memberInfo،roleInfo،roleAdd،roleRemove،emojiListchannelInfo،channelList،voiceStatus،eventList،eventCreatetimeout،kick،bansetPresence(نشاط البوت وحالة الاتصال)
[discord message id: …] وأسطر السجل) حتى يتمكن الوكيل من استهدافها.
يمكن أن تكون الإيموجي Unicode (مثل ✅) أو بصيغة إيموجي مخصّصة مثل <:party_blob:1234567890>.
السلامة والتشغيل
- تعامل مع رمز البوت ككلمة مرور؛ فضّل متغير البيئة
DISCORD_BOT_TOKENعلى المضيفين الخاضعين للإشراف أو شدّد أذونات ملف التهيئة. - امنح البوت فقط الأذونات التي يحتاجها (عادةً قراءة/إرسال الرسائل).
- إذا علِق البوت أو وصل إلى حدود المعدل، أعد تشغيل الـ Gateway (
openclaw gateway --force) بعد التأكد من عدم وجود عمليات أخرى تمتلك جلسة Discord.