Developer and self-hosted
IRC
استخدم IRC عندما تريد تشغيل OpenClaw في القنوات التقليدية (#room) والرسائل المباشرة.
ثبّت Plugin IRC الرسمي، ثم اضبطه ضمن channels.irc.
البدء السريع
- ثبّت Plugin:
openclaw plugins install @openclaw/irc- فعّل إعدادات IRC في
~/.openclaw/openclaw.json. - اضبط على الأقل:
{ channels: { irc: { enabled: true, host: "irc.example.com", port: 6697, tls: true, nick: "openclaw-bot", channels: ["#openclaw"], }, },}فضّل خادم IRC خاصًا لتنسيق البوتات. إذا كنت تستخدم شبكة IRC عامة عن قصد، فمن الخيارات الشائعة Libera.Chat وOFTC وSnoonet. تجنّب القنوات العامة سهلة التوقع لحركة البوت أو قناة الاتصال الخلفية للسرب.
- ابدأ/أعد تشغيل Gateway:
openclaw gateway runالإعدادات الأمنية الافتراضية
- يستخدم IRC مآخذ TCP/TLS خامًا خارج توجيه وكيل التمرير الأمامي المُدار بواسطة مشغّل OpenClaw. في عمليات النشر التي تتطلب مرور كل الخروج عبر وكيل التمرير الأمامي هذا، اضبط
channels.irc.enabled=falseما لم تتم الموافقة صراحةً على خروج IRC المباشر. - القيمة الافتراضية لـ
channels.irc.dmPolicyهي"pairing". - القيمة الافتراضية لـ
channels.irc.groupPolicyهي"allowlist". - مع
groupPolicy="allowlist"، اضبطchannels.irc.groupsلتعريف القنوات المسموح بها. - استخدم TLS (
channels.irc.tls=true) ما لم تكن تقبل النقل بنص صريح عن قصد.
التحكم في الوصول
توجد «بوابتان» منفصلتان لقنوات IRC:
- الوصول إلى القناة (
groupPolicy+groups): ما إذا كان البوت يقبل الرسائل من قناة أصلًا. - وصول المرسل (
groupAllowFrom/ لكل قناةgroups["#channel"].allowFrom): من يُسمح له بتشغيل البوت داخل تلك القناة.
مفاتيح الإعدادات:
- قائمة السماح للرسائل المباشرة (وصول مرسل الرسائل المباشرة):
channels.irc.allowFrom - قائمة السماح لمرسلي المجموعة (وصول مرسل القناة):
channels.irc.groupAllowFrom - عناصر التحكم لكل قناة (قواعد القناة + المرسل + الإشارة):
channels.irc.groups["#channel"] - يسمح
channels.irc.groupPolicy="open"بالقنوات غير المضبوطة (مع استمرار اشتراط الإشارة افتراضيًا)
يجب أن تستخدم إدخالات قائمة السماح هويات مرسلين مستقرة (nick!user@host).
مطابقة الاسم المستعار وحده قابلة للتغير ولا تُفعّل إلا عند channels.irc.dangerouslyAllowNameMatching: true.
خطأ شائع: allowFrom مخصص للرسائل المباشرة، وليس للقنوات
إذا رأيت سجلات مثل:
irc: drop group sender alice!ident@host (policy=allowlist)
...فهذا يعني أن المرسل لم يكن مسموحًا له برسائل المجموعة/القناة. أصلح ذلك عبر أحد الخيارين:
- ضبط
channels.irc.groupAllowFrom(عام لكل القنوات)، أو - ضبط قوائم السماح للمرسلين لكل قناة:
channels.irc.groups["#channel"].allowFrom
مثال (السماح لأي شخص في #tuirc-dev بالتحدث إلى البوت):
{ channels: { irc: { groupPolicy: "allowlist", groups: { "#tuirc-dev": { allowFrom: ["*"] }, }, }, },}تشغيل الردود (الإشارات)
حتى إذا كانت القناة مسموحًا بها (عبر groupPolicy + groups) وكان المرسل مسموحًا له، يعتمد OpenClaw افتراضيًا على بوابة الإشارة في سياقات المجموعات.
يعني ذلك أنك قد ترى سجلات مثل drop channel … (missing-mention) ما لم تتضمن الرسالة نمط إشارة يطابق البوت.
لجعل البوت يرد في قناة IRC دون الحاجة إلى إشارة، عطّل بوابة الإشارة لتلك القناة:
{ channels: { irc: { groupPolicy: "allowlist", groups: { "#tuirc-dev": { requireMention: false, allowFrom: ["*"], }, }, }, },}أو للسماح بكل قنوات IRC (دون قائمة سماح لكل قناة) مع الاستمرار في الرد دون إشارات:
{ channels: { irc: { groupPolicy: "open", groups: { "*": { requireMention: false, allowFrom: ["*"] }, }, }, },}ملاحظة أمنية (موصى بها للقنوات العامة)
إذا سمحت بـ allowFrom: ["*"] في قناة عامة، يمكن لأي شخص توجيه مطالبات إلى البوت.
لتقليل المخاطر، قيّد الأدوات لتلك القناة.
الأدوات نفسها لكل شخص في القناة
{ channels: { irc: { groups: { "#tuirc-dev": { allowFrom: ["*"], tools: { deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"], }, }, }, }, },}أدوات مختلفة لكل مرسل (يحصل المالك على صلاحيات أكبر)
استخدم toolsBySender لتطبيق سياسة أكثر صرامة على "*" وسياسة أخف على اسمك المستعار:
{ channels: { irc: { groups: { "#tuirc-dev": { allowFrom: ["*"], toolsBySender: { "*": { deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"], }, "id:eigen": { deny: ["gateway", "nodes", "cron"], }, }, }, }, }, },}ملاحظات:
- يجب أن تستخدم مفاتيح
toolsBySenderالبادئةid:لقيم هوية مرسل IRC:id:eigenأوid:eigen!~eigen@174.127.248.171لمطابقة أقوى. - لا تزال المفاتيح القديمة دون بادئة مقبولة وتُطابق على أنها
id:فقط. - أول سياسة مرسل مطابقة هي التي تفوز؛ ويمثل
"*"خيار الرجوع الشامل.
لمزيد من المعلومات حول وصول المجموعات مقابل بوابة الإشارة (وكيفية تفاعلهما)، راجع: /channels/groups.
NickServ
للتعريف عبر NickServ بعد الاتصال:
{ channels: { irc: { nickserv: { enabled: true, service: "NickServ", password: "your-nickserv-password", }, }, },}تسجيل اختياري لمرة واحدة عند الاتصال:
{ channels: { irc: { nickserv: { register: true, registerEmail: "bot@example.com", }, }, },}عطّل register بعد تسجيل الاسم المستعار لتجنّب محاولات REGISTER المتكررة.
متغيرات البيئة
يدعم الحساب الافتراضي:
IRC_HOSTIRC_PORTIRC_TLSIRC_NICKIRC_USERNAMEIRC_REALNAMEIRC_PASSWORDIRC_CHANNELS(مفصولة بفواصل)IRC_NICKSERV_PASSWORDIRC_NICKSERV_REGISTER_EMAIL
لا يمكن ضبط IRC_HOST من ملف .env في مساحة العمل؛ راجع ملفات .env لمساحة العمل.
استكشاف الأخطاء وإصلاحها
- إذا اتصل البوت لكنه لا يرد أبدًا في القنوات، فتحقق من
channels.irc.groupsوكذلك مما إذا كانت بوابة الإشارة تُسقط الرسائل (missing-mention). إذا كنت تريده أن يرد دون تنبيهات، فاضبطrequireMention:falseللقناة. - إذا فشل تسجيل الدخول، فتحقق من توفر الاسم المستعار وكلمة مرور الخادم.
- إذا فشل TLS على شبكة مخصصة، فتحقق من المضيف/المنفذ وإعداد الشهادة.
ذو صلة
- نظرة عامة على القنوات — كل القنوات المدعومة
- الاقتران — مصادقة الرسائل المباشرة وتدفق الاقتران
- المجموعات — سلوك دردشة المجموعات وبوابة الإشارة
- توجيه القنوات — توجيه الجلسات للرسائل
- الأمان — نموذج الوصول والتقوية