| soju(1) | General Commands Manual | soju(1) |
نام (NAME)
soju - باونسر IRC
خلاصه دستور (SYNOPSIS)
soju [options...]
توضیحات (DESCRIPTION)
دستور soju یک باونسر (bouncer) کاربرپسند برای IRC است. این برنامه از طرف کاربر به سرورهای بالادستی IRC متصل میشود تا امکانات بیشتری را فراهم کند.
- اشتراکگذاری همزمان یک باونسر توسط چندین کاربر مجزا، که هر کدام سرورهای بالادستی خود را دارند
- ارسال تاریخچه پیامهای پیشین (پیامهای دریافتی هنگام قطع بودن اتصال کاربر از باونسر)، با بافرهای مجزا به ازای هر کلاینت
برای اتصال به باونسر، از نام کاربری و گذرواژه باونسر استفاده کنید. جهت استفاده از کلاینتی که از افزونه IRC با نام soju.im/bouncer-networks پشتیبانی نمیکند، برای هر سرور پیکربندیشده در soju یک اتصال برقرار کرده و نام شبکه را در نام کاربری به صورت "<username>/<network>" مشخص کنید. سپس میتوانید به کانالها ملحق شده یا از آنها خارج شوید، درست مانند اینکه مستقیماً به سرور بالادستی متصل هستید.
برای فعال بودن تاریخچه پیامها به ازای هر کلاینت در کلاینتهایی که از افزونه IRCv3 با نام chathistory پشتیبانی نمیکنند، کلاینتها باید نام خود را مشخص کنند. این کار را میتوان با افزودن پسوند "@<client>" به نام کاربری انجام داد.
هنگام ملحق شدن به یک کانال، کانال ذخیره شده و در اتصال بعدی به صورت خودکار به آن ملحق میشوید. هنگام ثبتنام یا احراز هویت در NickServ، اطلاعات هویتی ذخیره شده و در صورتی که سرور از SASL پشتیبانی کند، در اتصال بعدی به صورت خودکار استفاده میشود. هنگام ترک کانال با دلیل "detach"، کانال به جای خروج کامل، جدا (detach) میشود.
اگر شبکه مشخصشده در نام کاربری وجود نداشته باشد و نام شبکه یک نام میزبان معتبر باشد، آن شبکه به صورت خودکار اضافه خواهد شد.
هنگامی که همه کلاینتها از باونسر قطع شوند، کاربر به صورت پیشفرض و خودکار به عنوان غایب (away) علامتگذاری میشود.
برنامه soju با دریافت سیگنال HUP، فایل پیکربندی، گواهی/کلید TLS و فایل MOTD را مجدداً بارگذاری خواهد کرد. گزینههای پیکربندی listen، db و log قابل بارگذاری مجدد نیستند.
مدیران سیستم میتوانند پیامی را با /notice $<hostname> <text> به همه کاربران باونسر همگانی (broadcast) کنند، یا در صورتی که اتصال مقید به شبکه خاصی نباشد از طریق /notice $* <text> اقدام کنند. همه کاربران متصل فعلی باونسر، پیام را از سرویس ویژه BouncerServ دریافت خواهند کرد.
گزینهها (OPTIONS)
-h, -help
-config <path>
-debug
-listen <uri>
فایل پیکربندی (CONFIG FILE)
فایل پیکربندی در هر خط شامل یک دستورالعمل (directive) است.
مثال:
listen ircs:// tls cert.pem key.pem hostname example.org
دستورالعملهای زیر پشتیبانی میشوند:
listen <uri>
شناسههای URI زیر پشتیبانی میشوند:
- [ircs://][host][:port] با TLS روی TCP شنود میکند (پورت پیشفرض در صورت حذف: 6697)
- irc://localhost[:port] به صورت متن ساده روی TCP شنود میکند (پورت پیشفرض در صورت حذف: 6667، میزبان باید "localhost" باشد)
- irc+insecure://[host][:port] به صورت متن ساده روی TCP شنود میکند (پورت پیشفرض در صورت حذف: 6667)
- unix://<path> روی یک سوکت دامنه یونیکس (Unix domain socket) شنود میکند
- https://[host][:port] برای اتصالات HTTPS شنود میکند (پورت پیشفرض: 443) و به درخواستهای زیر رسیدگی مینماید:
- /socket برای وبسوکت (WebSocket)
- /uploads (و زیرپوشهها) برای بارگذاری فایل
- http://localhost[:port] برای اتصالات متنی HTTP شنود میکند (پورت پیشفرض: 80، میزبان باید "localhost" باشد) و مانند https:// به درخواستها رسیدگی میکند
- http+insecure://[host][:port] برای اتصالات متنی HTTP شنود میکند (پورت پیشفرض: 80) و مانند https:// به درخواستها رسیدگی میکند
- http+unix://<path> برای اتصالات متنی HTTP روی یک سوکت دامنه یونیکس شنود میکند و مانند https:// به درخواستها رسیدگی میکند
- wss://[host][:port] برای اتصالات وبسوکت روی TLS شنود میکند (پورت پیشفرض: 443)
- ws://localhost[:port] برای اتصالات وبسوکت متنی شنود میکند (پورت پیشفرض: 80، میزبان باید "localhost" باشد)
- ws+insecure://[host][:port] برای اتصالات وبسوکت متنی شنود میکند (پورت پیشفرض: 80)
- ws+unix://<path> برای اتصالات وبسوکت متنی روی یک سوکت دامنه یونیکس شنود میکند
- ident://[host][:port] برای اتصالات ident متنی شنود میکند (پورت پیشفرض: 113)
- http+prometheus://localhost:<port> برای اتصالات متنی HTTP شنود کرده و معیارهای پرومتئوس (Prometheus) را ارائه میدهد (میزبان باید "localhost" باشد)
- http+pprof://localhost:<port> برای اتصالات متنی HTTP شنود کرده و دادههای پروفایل زمان اجرای pprof را ارائه میدهد (میزبان باید "localhost" باشد). برای اطلاعات بیشتر، ببینید: https://pkg.go.dev/net/http/pprof.
- unix+admin://[path] روی یک سوکت دامنه یونیکس برای اتصالات مدیریتی، مانند sojuctl شنود میکند (مسیر پیشفرض: /run/soju/admin)
در صورت حذف طرحواره (scheme)، مقدار "ircs" فرض میشود. در صورت مشخص شدن چندین دستورالعمل listen، برنامه soju روی تکتک آنها شنود خواهد کرد.
hostname <name>
این گزینه باید روی یک نام دامنه کاملاً معین (FQDN) تنظیم شود.
title <title>
tls <cert> <key>
db <driver> <source>
درایورهای پشتیبانیشده:
- درایور sqlite3 انتظار دارد که source مسیری به فایل SQLite باشد
- درایور postgres انتظار دارد که source فهرستی از پارامترهای key=value با جداکننده فاصله باشد، مانند db postgres "host=/run/postgresql dbname=soju". توجه داشته باشید که مقدار پیشفرض sslmode برابر با require است. برای اطلاعات بیشتر درباره رشتههای اتصال، ببینید: https://pkg.go.dev/github.com/lib/pq#hdr-Connection_String_Parameters.
message-store <driver> [source]
درایورهای پشتیبانیشده:
- درایور db پیامها را در پایگاهداده ذخیره میکند. برای افزایش سرعت پرسوجوهای جستجو، از یک نمایه جستجوی تماممتن استفاده میشود.
- درایور fs پیامها را روی دیسک، با همان فرمت ZNC ذخیره میکند. پارامتر source الزامی است و مسیر دایرکتوری ریشه برای پایگاهداده میباشد. این فرمت روی دیسک با اتلاف داده (lossy) همراه است: برخی پیامهای IRCv3 (مانند TAGMSG) و تمام برچسبهای پیام نادیده گرفته میشوند.
- درایور memory پیامها را در حافظه ذخیره میکند. برای هر کانال/کاربر، تنها ۴ هزار پیام آخر در حافظه نگه داشته شده و پیامهای قدیمیتر حذف میشوند. این درایور بسیار پایه بوده و از قابلیتهایی مانند افزونه chathistory و جستجو پشتیبانی نمیکند.
(دستورالعمل log یک نام مستعار منسوخشده برای این گزینه است.)
file-upload <driver> [source]
بارگذاری فایل نیازمند راهاندازی یک شنونده HTTP است (به شناسههای URI نوع https:// و http+insecure:// در دستورالعمل listen مراجعه کنید).
درایورهای پشتیبانیشده:
- درایور fs فایلهای بارگذاریشده را روی دیسک ذخیره میکند. مقدار source الزامی است.
- درایور http فایلهای بارگذاریشده را از طریق یک سرویس خارجی HTTP ذخیره میکند. مقدار source الزامی است و باید یک نشانی اینترنتی HTTP باشد. هنگام دریافت فایل، soju یک درخواست HTTP POST به آن نشانی ارسال میکند و فایل را همانطور که هست در بدنه درخواست HTTP میفرستد؛ همچنین نام کاربری بارگذار در soju را در هدر Soju-Username ارسال مینماید. سرور HTTP در صورت موفقیت باید با کد وضعیت HTTP 201 پاسخ دهد و هدر Location روی نشانی فایل بارگذاریشده تنظیم شده باشد.
http-origin <patterns...>
به صورت پیشفرض، فقط میزبان درخواست مجاز است. از این دستورالعمل برای فعالسازی وبسوکتهای چندمبدایی (cross-origin WebSockets) استفاده کنید.
http-ingress <url>
به صورت پیشفرض، این مقدار https://<hostname> است.
accept-proxy-ip <cidr...>
به صورت پیشفرض، تمامی نشانیهای IP رد میشوند.
max-user-networks <limit>
motd <path>
upstream-user-ip <cidr...>
این گزینه میتواند برای جلوگیری از مسدود شدن کل باونسر در یک شبکه بالادستی به دلیل فعالیت یک کاربر مخرب مفید باشد.
disable-inactive-user <duration>
کاربر زمانی غیرفعال محسوب میشود که آخرین اتصال فرودستی (downstream) او بسته شود.
مدت زمان، یک عدد اعشاری مثبت است که به دنبال آن واحد "d" (روز) میآید. برای نمونه، "30d" کاربران را ۳۰ روز پس از آخرین قطع اتصالشان از باونسر غیرفعال میکند.
enable-user-on-auth true|false
این گزینه میتواند همراه با disable-inactive-user برای غیرفعالسازی و فعالسازی مجدد و یکپارچه کاربران در دورههای طولانی عدم فعالیت استفاده شود.
هنگام استفاده از احراز هویت خارجی (مانند auth oauth2)، کاربران باونسر پس از احراز هویت موفق به صورت خودکار ایجاد میشوند.
auth <driver> ...
درایورهای پشتیبانیشده:
auth internal
سرویس IRC (IRC SERVICE)
برنامه soju یک سرویس IRC به نام BouncerServ را برای مدیریت باونسر ارائه میدهد. دستورات را میتوان از طریق پیامهای خصوصی معمولی ارسال کرد (/msg BouncerServ <command> [args...]). دستورات را میتوان به شکل کامل یا مختصر نوشت، برای نمونه network را میتوان به صورت net یا تنها n خلاصه کرد.
دستورات بر اساس قوانین شل POSIX تجزیه میشوند. بهویژه، کلمات میتوانند درون نقلقول قرار گیرند (تکی یا دوتایی) و یک بکاسلش کاراکتر بعدی را اسکیپ میکند.
help [command]
network create -addr <addr> [options...]
پارامتر addr از چندین نوع اتصال پشتیبانی میکند:
- [ircs://]<host>[:port] با استفاده از TLS روی TCP متصل میشود
- irc+insecure://<host>[:port] با استفاده از TCP متنی و بدون رمزنگاری متصل میشود
- irc+unix:///<path> به یک سوکت یونیکس متصل میشود
برای نمونه، جهت اتصال به Libera Chat:
net create -addr irc.libera.chat
سایر گزینهها عبارتند از:
-name <name>
-username <username>
-pass <pass>
-realname <realname>
-certfp <fingerprint>
برای دریافت اثرانگشت گواهی یک سرور IRC میتوان از دستور زیر استفاده کرد:
openssl s_client -connect irc.example.org:6697 -verify_quiet </dev/null | openssl x509 -fingerprint -sha512 -noout -in /dev/stdin
-nick <nickname>
-auto-away true|false
-enabled true|false
-ignore-limit true|false
-connect-command <command>
برای نمونه، جهت احراز هویت در NickServ، میتوان از دستور زیر استفاده کرد:
"PRIVMSG NickServ :IDENTIFY <password>"
این گزینه میتواند چندین بار برای ارسال چندین پیام IRC مشخص شود. برای پاک کردن همه دستورات، آن را روی رشته خالی تنظیم کنید.
network update [name] [options...]
هنگام اجرای این دستور، soju اتصال شبکه را قطع کرده و مجدداً متصل میشود.
اگر name مشخص نشود، شبکه فعلی بهروزرسانی خواهد شد.
network delete [name]
اگر name مشخص نشود، شبکه فعلی حذف خواهد شد.
network quote [name] <command>
اگر name مشخص نشود، دستور به شبکه فعلی ارسال میشود.
network status
channel status [options...]
گزینهها:
-network <name>
channel create <name> [options...]
پیوستن به یک کانال معمولاً باید با یک دستور ساده join از طرف کلاینت انجام شود، اما در صورت استفاده همراه با user run، این دستور میتواند برای وارد کردن کاربری دیگر به یک کانال استفاده شود.
گزینهها عبارتند از:
-detached true|false
یک کانال جداشده (detached) پیوسته باقی میماند اما توسط باونسر پنهان میشود. این قابلیت به عنوان نمونه برای جمعآوری گزارشها و پیامهای هایلایت در کانالهای کماهمیت یا پرتردد مفید است.
-relay-detached <mode>
حالتها عبارتند از:
message
highlight
none
default
-reattach-on <mode>
حالتها عبارتند از:
message
highlight
none
default
-detach-after <duration>
نمونه مقادیر مدت زمان: 1h30m، 30s، 2.5h.
تنظیم این مقدار روی 0 این رفتار را غیرفعال میکند، یعنی این کانال هرگز به صورت خودکار جدا نخواهد شد. این رفتار پیشفرض است.
-detach-on <mode>
حالتها عبارتند از:
message
highlight
none
default
channel update <name> [options...]
channel delete <name>
certfp generate [options...]
به صورت پیشفرض یک کلید خصوصی ۳۰۷۲ بیتی RSA تولید میکند.
توجه داشته باشید که برای استفاده از گواهی تازهتولیدشده، اتصال مجدد به شبکه بالادستی الزامی است.
گزینهها عبارتند از:
-network <name>
-key-type <type>
-bits <bits>
certfp fingerprint [options...]
گزینهها عبارتند از:
-network <name>
sasl status [options...]
گزینهها عبارتند از:
-network <name>
sasl set-plain [options...] <username> <password>
توجه داشته باشید که برای اعمال تنظیمات جدید، اتصال مجدد به شبکه بالادستی الزامی است.
گزینهها عبارتند از:
-network <name>
sasl reset [options...]
توجه داشته باشید که برای اعمال تنظیمات جدید، اتصال مجدد به شبکه بالادستی الزامی است.
گزینهها عبارتند از:
-network <name>
user status [username]
اگر username مشخص شود، آمار تنها برای این کاربر نمایش داده میشود.
user create -username <username> -password <password> [options...]
گزینهها عبارتند از:
-username <username>
-password <password>
-disable-password
-admin true|false
-nick <nick>
-realname <realname>
-enabled true|false
-max-networks <max-networks>
user update [username] [options...]
اگر username ذکر نشود، کاربر فعلی بهروزرسانی میشود. تنها مدیران میتوانند سایر کاربران را بهروزرسانی کنند.
همه فلگها در همه زمینهها معتبر نیستند:
- فلگ -username هرگز معتبر نیست؛ نامهای کاربری تغییرناپذیرند.
- فلگهای -nick و -realname تنها هنگام بهروزرسانی کاربر فعلی معتبر هستند.
- فلگهای -admin، -enabled و -max_networks تنها هنگام بهروزرسانی کاربری دیگر معتبر هستند.
user delete <username> [confirmation token]
تنها مدیران میتوانند کاربران دیگر را حذف کنند.
user run <username> <command...>
تنها مدیران میتوانند از این دستور استفاده کنند.
server status
server notice <message>
server debug <true|false>
نویسندگان (AUTHORS)
توسعه و نگهداری توسط Simon Ser <contact@emersion.fr>، با همکاری سایر مشارکتکنندگان پروژههای متنباز. برای اطلاعات بیشتر درباره توسعه soju، ببینید: https://soju.im.
همچنین ببینید (SEE ALSO)
| 2025-11-13 |