Developer and self-hosted

IRC

برای استفاده از OpenClaw در کانال‌های کلاسیک (#room) و پیام‌های مستقیم، از IRC استفاده کنید. Plugin رسمی IRC را نصب کنید، سپس آن را در channels.irc پیکربندی کنید.

شروع سریع

  1. Plugin را نصب کنید:
bash
openclaw plugins install @openclaw/irc
  1. دست‌کم میزبان، نام مستعار و کانال‌هایی را که باید به آن‌ها بپیوندد، در ~/.openclaw/openclaw.json تنظیم کنید:
json5
{  channels: {    irc: {      enabled: true,      host: "irc.example.com",      port: 6697,      tls: true,      nick: "openclaw-bot",      channels: ["#openclaw"],    },  },}
  1. Gateway را راه‌اندازی یا بازراه‌اندازی کنید:
bash
openclaw gateway run

برای هماهنگی ربات‌ها، یک سرور خصوصی IRC را ترجیح دهید. اگر آگاهانه از یک شبکه عمومی IRC استفاده می‌کنید، گزینه‌های رایج شامل Libera.Chat، OFTC و Snoonet هستند. برای ترافیک کانال پشتی ربات یا ازدحام ربات‌ها، از کانال‌های عمومی با نام‌های قابل پیش‌بینی پرهیز کنید.

تنظیمات اتصال

کلید پیش‌فرض توضیحات
host هیچ‌کدام (الزامی) نام میزبان سرور IRC
port 6697 با TLS، 6667 بدون رمزنگاری ۱ تا ۶۵۵۳۵
tls true فقط برای استفاده آگاهانه از متن ساده، آن را روی false تنظیم کنید
nick هیچ‌کدام (الزامی) نام مستعار ربات
username نام مستعار، وگرنه openclaw نام کاربری IRC
realname OpenClaw فیلد نام واقعی/GECOS
password / passwordFile هیچ‌کدام گذرواژه سرور؛ فایل باید یک فایل معمولی باشد
channels هیچ‌کدام کانال‌هایی که باید به آن‌ها پیوست (["#openclaw"])
accounts / defaultAccount هیچ‌کدام پیکربندی چندحسابی؛ متغیرهای محیطی فقط حساب پیش‌فرض را تکمیل می‌کنند

پیش‌فرض‌های امنیتی

  • IRC از سوکت‌های خام TCP/TLS خارج از مسیریابی پراکسی روبه‌جلوی تحت مدیریت اپراتور OpenClaw استفاده می‌کند. در استقرارهایی که تمام ترافیک خروجی باید از آن پراکسی روبه‌جلو عبور کند، مگر اینکه خروجی مستقیم IRC صراحتاً تأیید شده باشد، channels.irc.enabled=false را تنظیم کنید.
  • مقدار پیش‌فرض channels.irc.dmPolicy برابر "pairing" است: فرستندگان ناشناس پیام مستقیم، یک کد جفت‌سازی دریافت می‌کنند که با openclaw pairing approve irc <code> تأییدش می‌کنید.
  • مقدار پیش‌فرض channels.irc.groupPolicy برابر "allowlist" است.
  • با groupPolicy="allowlist"، برای تعریف کانال‌های مجاز channels.irc.groups را تنظیم کنید.
  • مگر اینکه آگاهانه انتقال متن ساده را پذیرفته باشید، از TLS (channels.irc.tls=true) استفاده کنید.

کنترل دسترسی

برای کانال‌های IRC دو «دروازه» جداگانه وجود دارد:

  1. دسترسی کانال (groupPolicy + groups): آیا ربات اساساً پیام‌های یک کانال را می‌پذیرد یا نه.
  2. دسترسی فرستنده (groupAllowFrom / مقدار کانال‌محور groups["#channel"].allowFrom): چه کسی درون آن کانال مجاز است ربات را فعال کند.

کلیدهای پیکربندی:

  • فهرست مجاز پیام مستقیم (دسترسی فرستنده پیام مستقیم): channels.irc.allowFrom
  • فهرست مجاز فرستندگان گروه (دسترسی فرستنده کانال): channels.irc.groupAllowFrom
  • کنترل‌های هر کانال (قواعد کانال، فرستنده و اشاره): channels.irc.groups["#channel"] همراه با requireMention، allowFrom، enabled، tools، toolsBySender، skills و systemPrompt
  • 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

نمونه (اجازه به همه افراد حاضر در #openclaw برای گفتگو با ربات):

json5
{  channels: {    irc: {      groupPolicy: "allowlist",      groups: {        "#openclaw": { allowFrom: ["*"] },      },    },  },}

فعال‌سازی پاسخ (اشاره‌ها)

حتی اگر کانالی مجاز باشد (از طریق groupPolicy + groups) و فرستنده نیز مجاز باشد، OpenClaw در محیط‌های گروهی به‌طور پیش‌فرض پاسخ را به اشاره مشروط می‌کند. وقتی پیام حاوی نام مستعار متصل‌شده ربات باشد یا با الگوهای اشاره پیکربندی‌شده شما مطابقت داشته باشد، ربات اشاره‌شده محسوب می‌شود.

این یعنی ممکن است گزارش‌هایی مانند drop channel … (missing-mention) ببینید، مگر اینکه پیام شامل الگویی برای اشاره باشد که با ربات مطابقت دارد.

برای اینکه ربات در یک کانال IRC بدون نیاز به اشاره پاسخ دهد، الزام اشاره را برای آن کانال غیرفعال کنید:

json5
{  channels: {    irc: {      groupPolicy: "allowlist",      groups: {        "#openclaw": {          requireMention: false,          allowFrom: ["*"],        },      },    },  },}

یا برای مجاز کردن همه کانال‌های IRC (بدون فهرست مجاز برای هر کانال) و همچنان پاسخ‌گویی بدون اشاره:

json5
{  channels: {    irc: {      groupPolicy: "open",      groups: {        "*": { requireMention: false, allowFrom: ["*"] },      },    },  },}

نکته امنیتی (توصیه‌شده برای کانال‌های عمومی)

اگر در یک کانال عمومی allowFrom: ["*"] را مجاز کنید، هر کسی می‌تواند به ربات فرمان بدهد. برای کاهش خطر، ابزارهای آن کانال را محدود کنید.

ابزارهای یکسان برای همه افراد کانال

json5
{  channels: {    irc: {      groups: {        "#openclaw": {          allowFrom: ["*"],          tools: {            deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],          },        },      },    },  },}

ابزارهای متفاوت برای هر فرستنده (مالک اختیار بیشتری دارد)

از toolsBySender استفاده کنید تا برای "*" سیاست سخت‌گیرانه‌تر و برای نام مستعار خودتان سیاست آسان‌گیرانه‌تری اعمال شود:

json5
{  channels: {    irc: {      groups: {        "#openclaw": {          allowFrom: ["*"],          toolsBySender: {            "*": {              deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],            },            "id:alice": {              deny: ["gateway", "nodes", "cron"],            },          },        },      },    },  },}

نکات:

  • کلیدهای toolsBySender باید از پیشوندهای صریح (channel:، id:، e164:، username:، name:) استفاده کنند. برای IRC از id: همراه با مقدار هویت فرستنده استفاده کنید: id:alice یا برای تطبیق قوی‌تر id:alice!~alice@203.0.113.7.
  • کلیدهای قدیمیِ بدون پیشوند همچنان پذیرفته می‌شوند، فقط به‌عنوان id: تطبیق داده می‌شوند و یک هشدار منسوخ‌شدن ایجاد می‌کنند.
  • نخستین سیاست فرستنده که مطابقت داشته باشد اعمال می‌شود؛ "*" جایگزین عمومی است.

برای اطلاعات بیشتر درباره تفاوت دسترسی گروه با الزام اشاره (و نحوه تعامل آن‌ها)، به این صفحه مراجعه کنید: /channels/groups.

NickServ

برای احراز هویت نزد NickServ پس از اتصال:

json5
{  channels: {    irc: {      nickserv: {        enabled: true,        service: "NickServ",        password: "your-nickserv-password",      },    },  },}

هرگاه گذرواژه‌ای تنظیم شده باشد، احراز هویت NickServ به‌طور پیش‌فرض اجرا می‌شود (enabled فقط برای انصراف باید false باشد). مقدار پیش‌فرض service برابر NickServ است؛ passwordFile جایگزینی برای password درون‌خطی است.

ثبت‌نام اختیاری و یک‌باره هنگام اتصال (register: true به registerEmail نیاز دارد):

json5
{  channels: {    irc: {      nickserv: {        register: true,        registerEmail: "bot@example.com",      },    },  },}

پس از ثبت نام مستعار، register را غیرفعال کنید تا از تلاش‌های مکرر REGISTER جلوگیری شود.

متغیرهای محیطی

حساب پیش‌فرض از موارد زیر پشتیبانی می‌کند:

  • IRC_HOST
  • IRC_PORT
  • IRC_TLS
  • IRC_NICK
  • IRC_USERNAME
  • IRC_REALNAME
  • IRC_PASSWORD
  • IRC_CHANNELS (جداشده با ویرگول)
  • IRC_NICKSERV_PASSWORD
  • IRC_NICKSERV_REGISTER_EMAIL

IRC_HOST را نمی‌توان از یک فایل .env فضای کاری تنظیم کرد؛ به فایل‌های .env فضای کاری مراجعه کنید.

عیب‌یابی

  • اگر ربات متصل می‌شود اما هرگز در کانال‌ها پاسخ نمی‌دهد، channels.irc.groups و اینکه آیا الزام اشاره پیام‌ها را حذف می‌کند (missing-mention) بررسی کنید. اگر می‌خواهید بدون اشاره پاسخ دهد، برای کانال requireMention:false را تنظیم کنید.
  • اگر ورود ناموفق است، در دسترس بودن نام مستعار و گذرواژه سرور را بررسی کنید.
  • اگر TLS در یک شبکه سفارشی ناموفق است، میزبان/درگاه و پیکربندی گواهی را بررسی کنید.

مطالب مرتبط

Was this useful?
On this page

On this page