پیکربندی

مرجع کامل متغیرها

۱۷۵ متغیر که در config.py، متغیرهای محیطی یا منوی /bsetting تنظیم می‌شوند. نام‌ها دقیقاً همان‌هایی هستند که ربات می‌شناسد. برای اینکه بدانید این مقدارها از کجا خوانده می‌شوند و کدام بر کدام مقدم است، نحوهٔ پیکربندی را بخوانید.

متغیرهای ضروری

بدون این متغیرها ربات اصلاً اجرا نمی‌شود یا تنظیمات و داده‌هایش را بعد از ری‌استارت از دست می‌دهد؛ پیش از اولین اجرا همه را پر کنید.

BOT_TOKEN

#

نوع: strالزامینیاز به ری‌استارتبدون Reset/bsetting › Config Variables

توکن ربات تلگرام که از @BotFather می‌گیرید.

ربات اصلی با این توکن به تلگرام وصل می‌شود و قالبش 123456789:AA... است. شناسهٔ ربات (بخش پیش از :) جاهای دیگری هم به کار می‌رود: جدا کردن داده‌های این ربات در پایگاه داده، ساختن رمزهای وب qBittorrent و SABnzbd و پین صفحهٔ انتخاب فایل.

اگر خالی باشد، ربات هنگام راه‌اندازی با خطای BOT_TOKEN variable is missing! متوقف می‌شود. اگر فایل config.py وجود داشته باشد، این مقدار باید در خود آن پر شود؛ چون بررسی خالی نبودن پیش از خواندن متغیرهای محیطی انجام می‌شود.

نکته: با عوض کردن توکن، داده‌ها در پایگاه داده زیر بخش تازه‌ای ذخیره می‌شوند؛ پس تنظیمات، کاربران و RSS ربات قبلی دیده نمی‌شوند. در /bsetting دکمهٔ Reset ندارد و بعد از تغییر باید ری‌استارت کنید.

مثال در config.py

BOT_TOKEN = "1234567890:AAExampleExampleExampleExample000"

DATABASE_URL

#

نوع: strالزامینیاز به ری‌استارتبدون Reset/bsetting › Config Variables

رشتهٔ اتصال MongoDB برای ذخیرهٔ دائمی تنظیمات و داده‌ها.

آدرس اتصال به MongoDB (مثلاً از MongoDB Atlas). ربات از پایگاه دادهٔ wzmlx استفاده می‌کند و داده‌های هر ربات را بر اساس شناسهٔ آن جدا نگه می‌دارد. README آن را ضروری می‌داند، هرچند ربات بدون آن هم اجرا می‌شود.

بدون این متغیر هیچ چیز ماندگار نیست: تغییرات /bsetting و /usetting، تامبنیل‌ها، کانفیگ‌های Rclone، کاربران و چت‌های اضافه‌شده با /authorize و /addsudo، اشتراک‌های RSS، فایل‌های خصوصی و تصاویر با ری‌استارت از بین می‌روند. همچنین /broadcast کار نمی‌کند، INC_TASK_NOTIFY و INC_TASK_RESUME اثری ندارند و لینک‌های /stream و لینک‌های مستقیم لیچ خطای ۴۰۴ می‌دهند.

وقتی پایگاه داده دارید، مقدارهای ذخیره‌شده بر config.py اولویت دارند و فقط متغیری که مقدارش را در config.py عوض کرده‌اید در راه‌اندازی بعدی جایگزین مقدار ذخیره‌شده می‌شود. اتصال با مقدار config.py یا متغیر محیطی برقرار می‌شود؛ پس برای عوض کردن پایگاه داده، همان‌جا را تغییر دهید و ری‌استارت کنید، نه /bsetting را.

مثال در config.py

DATABASE_URL = "mongodb+srv://user:pass@cluster0.example.mongodb.net/?retryWrites=true&w=majority"

OWNER_ID

#

نوع: intپیش‌فرض: 0الزامینیاز به ری‌استارتبدون Reset/bsetting › Config Variables

شناسهٔ عددی حساب تلگرام مالک ربات.

مالک ربات به همهٔ دستورها دسترسی دارد، از تأیید توکن و همهٔ محدودیت‌ها معاف است و می‌تواند کارهای کاربران دیگر را لغو کند، به‌اجبار شروع کند یا فایل‌هایش را انتخاب کند. فقط مالک می‌تواند از اجرای دستور /shell با ویرایش پیام استفاده کند.

حتماً عدد صحیح و بدون گیومه بنویسید؛ ربات شناسه را دقیقاً با عدد مقایسه می‌کند و اگر در config.py رشته باشد، مالک شناخته نمی‌شود. اگر 0 بماند، ربات با خطای OWNER_ID variable is missing! اجرا نمی‌شود. اگر فایل config.py وجود داشته باشد، این مقدار باید در خود آن پر شود؛ چون بررسی خالی نبودن پیش از خواندن متغیرهای محیطی انجام می‌شود.

مثال در config.py

OWNER_ID = 123456789

TELEGRAM_API

#

نوع: intپیش‌فرض: 0الزامینیاز به ری‌استارتبدون Reset/bsetting › Config Variables

شناسهٔ عددی API تلگرام (api_id) که از my.telegram.org می‌گیرید.

همهٔ کلاینت‌های تلگرام ربات با این شناسه ساخته می‌شوند: ربات اصلی، سشن کاربر، ربات‌ها و حساب‌های کمکی، ربات‌های استریم و سشن‌هایی که کاربران خودشان اضافه می‌کنند.

عدد صحیح است؛ در config.py آن را بدون گیومه بنویسید. اگر خالی یا 0 باشد، ربات با خطای TELEGRAM_API variable is missing! اجرا نمی‌شود. اگر فایل config.py وجود داشته باشد، این مقدار باید در خود آن پر شود؛ چون بررسی خالی نبودن پیش از خواندن متغیرهای محیطی انجام می‌شود. بعد از تغییر ری‌استارت لازم است.

مثال در config.py

TELEGRAM_API = 1234567

TELEGRAM_HASH

#

نوع: strالزامینیاز به ری‌استارتبدون Reset/bsetting › Config Variables

هش API تلگرام (api_hash) که همراه TELEGRAM_API از my.telegram.org می‌گیرید.

رشته‌ای ۳۲ نویسه‌ای که در کنار TELEGRAM_API برای ساختن همهٔ کلاینت‌های تلگرام ربات به کار می‌رود.

اگر خالی باشد، ربات با خطای TELEGRAM_HASH variable is missing! اجرا نمی‌شود. اگر فایل config.py وجود داشته باشد، این مقدار باید در خود آن پر شود؛ چون بررسی خالی نبودن پیش از خواندن متغیرهای محیطی انجام می‌شود. در /bsetting دکمهٔ Reset ندارد و بعد از تغییر باید ری‌استارت کنید.

مثال در config.py

TELEGRAM_HASH = "0123456789abcdef0123456789abcdef"

تلگرام، سشن‌ها و پروکسی

ربات‌ها و حساب‌های کمکی، استرینگ سشن کاربر، پروکسی اتصال به تلگرام و نحوهٔ ارسال فایل‌ها در پیوی.

BOT_PM

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

فرستادن فایل‌ها و لینک‌های هر کار به پیوی کاربری که آن را اجرا کرده.

برخلاف توضیح داخل ربات، منظور پیوی خود کاربر است نه مالک. وقتی روشن است، هر کاربر (حتی سودو) باید پیش از شروع کار ربات را در پیوی استارت کرده باشد، وگرنه کار رد می‌شود و دکمهٔ Start Bot Now نشان داده می‌شود. در سوپرگروه‌ها پیام شروع کار به پیوی کاربر فرستاده می‌شود، فایل‌های لیچ در پیوی کپی می‌شوند و فهرست فایل‌های لیچ و پیام پایان میرور هم به پیوی می‌رود.

وقتی این گزینه روشن باشد، کاربران نمی‌توانند آن را برای خودشان خاموش کنند. تغییر بلافاصله اعمال می‌شود.

HELPER_BOT_PROXIES

#

نوع: str/bsetting › Config Variables

پروکسی جداگانه برای هر ربات کمکی، هر خط برای یک توکن.

هر خط یک دیکشنری پایتون مثل {"scheme": "socks5", "hostname": "1.2.3.4", "port": 1080} است و خط N به توکن N در HELPER_TOKENS تعلق دارد. خط خالی، None یا مقدار نامعتبر یعنی همان TG_PROXY (نه «بدون پروکسی»)؛ برای اتصال مستقیم یک ربات، {} بنویسید. اگر خط‌ها کمتر از توکن‌ها باشند، بقیه از TG_PROXY استفاده می‌کنند.

نکته: فاصله‌ها و خط‌های خالی ابتدای مقدار حذف می‌شوند و ترتیب را به هم می‌زنند؛ برای جای خالی None یا {} بنویسید. لینک‌های پروکسی (مثل socks5://...) در این متغیر پذیرفته نمی‌شوند. فقط هنگام راه‌اندازی خوانده می‌شود؛ /bsetting یادداشت ری‌استارت نشان نمی‌دهد، اما برای اعمال تغییر باید ربات را کامل ری‌استارت کنید.

مثال در config.py

HELPER_BOT_PROXIES = {"scheme": "socks5", "hostname": "203.0.113.5", "port": 1080}
None

HELPER_STRINGS

#

نوع: str/bsetting › Config Variables

استرینگ سشن حساب‌های کاربری کمکی برای انتقال موازی فایل‌ها.

استرینگ‌های سشن Pyrogram نسخهٔ ۲ را با فاصله از هم جدا کنید. این حساب‌ها کنار USER_SESSION_STRING در HyperDL و HyperUP به‌عنوان کلاینت «کاربر» استفاده می‌شوند و بسته به TRANSMISSION_MODE بار بین ربات‌ها و کاربران تقسیم می‌شود. برای استریم یا باز کردن لینک‌های خصوصی استفاده نمی‌شوند.

حساب‌ها باید عضو چت دامپ باشند. فقط هنگام راه‌اندازی خوانده می‌شود؛ /bsetting یادداشت ری‌استارت نشان نمی‌دهد، اما برای اعمال تغییر باید ربات را کامل ری‌استارت کنید.

مثال در config.py

HELPER_STRINGS = "BQExampleSessionString1... BQExampleSessionString2..."

HELPER_TOKENS

#

نوع: str/bsetting › Config Variables

توکن ربات‌های کمکی برای انتقال موازی و سریع‌تر فایل‌های تلگرام.

توکن‌ها را با فاصله از هم جدا کنید. هر ربات کمکی هنگام راه‌اندازی اجرا می‌شود و در HyperDL (دانلود چندبخشی فایل‌های تلگرامی) و HyperUP (آپلود فایل‌های بزرگ‌تر از ۱۰ مگابایت با کم‌مشغله‌ترین کلاینت) به کار می‌رود. اگر STREAM_TOKENS خالی باشد، این ربات‌ها برای استریم هم استفاده می‌شوند و /stream بدون هیچ‌کدام از این دو کار نمی‌کند.

همهٔ این‌ها به روشن بودن USE_HYPER وابسته‌اند. HyperDL به یک چت دامپ (مقصد لیچ یا LEECH_LOG_CHAT) نیاز دارد؛ ربات‌های کمکی باید عضو آن چت و چت مقصد آپلود باشند. اگر خالی باشد، انتقال‌ها با ربات اصلی (و در صورت وجود، USER_SESSION_STRING) انجام می‌شوند.

فقط هنگام راه‌اندازی خوانده می‌شود؛ /bsetting یادداشت ری‌استارت نشان نمی‌دهد، اما برای اعمال تغییر باید ربات را کامل ری‌استارت کنید.

مثال در config.py

HELPER_TOKENS = "1111111111:AAExampleHelperOne 2222222222:AAExampleHelperTwo"

HELPER_USER_PROXIES

#

نوع: str/bsetting › Config Variables

پروکسی جداگانه برای هر حساب کمکی، هر خط برای یک استرینگ سشن.

قالب و رفتار آن دقیقاً مثل HELPER_BOT_PROXIES است، اما خط‌ها به ترتیب HELPER_STRINGS تعلق دارند. حساب USER_SESSION_STRING و سشن‌های شخصی کاربران از این متغیر استفاده نمی‌کنند و همیشه TG_PROXY را می‌گیرند.

فقط هنگام راه‌اندازی خوانده می‌شود؛ /bsetting یادداشت ری‌استارت نشان نمی‌دهد، اما برای اعمال تغییر باید ربات را کامل ری‌استارت کنید.

مثال در config.py

HELPER_USER_PROXIES = {"scheme": "socks5", "hostname": "203.0.113.6", "port": 1080, "username": "user", "password": "pass"}

STREAM_TOKENS

#

نوع: strنیاز به ری‌استارت/bsetting › Config Variables

توکن ربات‌هایی که فقط برای استریم و لینک‌های دانلود (/stream و /dl) استفاده می‌شوند.

توکن‌ها را با فاصله جدا کنید. اگر دست‌کم یکی از این ربات‌ها اجرا شود، سرور استریم فقط از آن‌ها استفاده می‌کند و بار استریم از کارهای میرور و لیچ جدا می‌ماند؛ در غیر این صورت HELPER_TOKENS به کار می‌روند. این ربات‌ها باید بتوانند چتی را که رسانه در آن است بخوانند؛ /stream اگر LEECH_LOG_CHAT تنظیم باشد فایل را اول آنجا کپی می‌کند.

پروکسی جداگانه ندارند و همیشه از TG_PROXY استفاده می‌کنند. استریم به BASE_URL و خاموش بودن DISABLE_STREAM هم نیاز دارد. بعد از تغییر ری‌استارت لازم است.

مثال در config.py

STREAM_TOKENS = "3333333333:AAExampleStreamBot"

TG_PROXY

#

نوع: dictنیاز به ری‌استارت/bsetting › Config Variables

پروکسی اتصال همهٔ کلاینت‌های ربات به تلگرام.

روی ربات اصلی، USER_SESSION_STRING، ربات‌ها و حساب‌های کمکی بدون پروکسی اختصاصی، ربات‌های استریم و سشن‌های شخصی کاربران اعمال می‌شود. خالی (None) یعنی اتصال مستقیم. ربات خودش مقدار را بررسی نمی‌کند و آن را به کتابخانهٔ تلگرام می‌دهد؛ هم دیکشنری مثل {"scheme": "socks5", "hostname": "...", "port": 1080, "username": "...", "password": "..."} و هم لینکی مثل socks5://user:pass@ip:port در توضیحات ربات آمده است.

در config.py و /bsetting شکل دیکشنری را بنویسید. در متغیر محیطی مقدار به‌صورت رشتهٔ خام می‌ماند، پس آنجا از شکل لینکی استفاده کنید. نمونهٔ داخل توضیح config_sample.py گیومه‌های غیراستاندارد (”) دارد؛ آن را عیناً کپی نکنید. بعد از تغییر ری‌استارت لازم است.

مثال در config.py

TG_PROXY = {"scheme": "socks5", "hostname": "203.0.113.5", "port": 1080, "username": "user", "password": "pass"}

TRANSMISSION_MODE

#

نوع: strپیش‌فرض: both/bsetting › Config Variables

اینکه آپلود و دانلود تلگرام با ربات، حساب کاربری یا ترکیبی از هر دو انجام شود.

مقدارهای مجاز (دقیقاً با حروف کوچک): bot، user و both. در لیچ، bot با ربات اصلی آپلود می‌کند (اما فایل بزرگ‌تر از ۲ گیگابایت را اگر سشن کاربر باشد با آن)، user همه را با USER_SESSION_STRING و both فقط فایل‌های بزرگ‌تر از ۲ گیگابایت را با حساب کاربری. در حالت bot اندازهٔ تکه‌ها از حدود ۲ گیگابایت بیشتر نمی‌شود.

اگر USER_SESSION_STRING اجرا نشده باشد، یا حساب در مقصد ادمین مناسب نباشد، یا مقصد گروه یا کانال نباشد، کار به حالت bot برمی‌گردد. برای یک کار می‌توانید با -bt (ربات)، -ut (کاربر) یا -hl (هر دو) حالت را عوض کنید. مقدار بررسی نمی‌شود، پس دقیق بنویسید.

مثال در config.py

TRANSMISSION_MODE = "both"

USER_SESSION_IDLE

#

نوع: intپیش‌فرض: 600/bsetting › Config Variables

مدت (ثانیه) بی‌کاری پیش از قطع اتصال سشن شخصی یک کاربر.

اگر کلاینت سشن شخصی یک کاربر این مدت استفاده نشود، متوقف می‌شود؛ بررسی هر ۶۰ ثانیه انجام می‌شود، پس قطع شدن ممکن است تا یک دقیقه دیرتر باشد. پیش‌فرض 600 است و 0 هم همان ۶۰۰ حساب می‌شود.

فقط اتصال قطع می‌شود؛ تا وقتی کلید (USER_SESSION_KEY_TTL) معتبر است، دوباره بدون پرسیدن عبارت عبور وصل می‌شود. تغییر بلافاصله اعمال می‌شود.

مثال در config.py

USER_SESSION_IDLE = 900

USER_SESSION_KEY_TTL

#

نوع: intپیش‌فرض: 43200/bsetting › Config Variables

مدت (ثانیه) نگه‌داری کلید رمزگشایی سشن شخصی کاربران در حافظه.

کاربران می‌توانند در /usetting ← Clone Settings ← User Session سشن شخصی رمزگذاری‌شده‌ای برای /clone بگذارند. بعد از باز کردن قفل با عبارت عبور، کلید این مدت در حافظه می‌ماند و پس از آن، /clone بعدی دوباره عبارت عبور را در پیوی می‌پرسد. پیش‌فرض 43200 (۱۲ ساعت) است و 0 هم همان ۱۲ ساعت حساب می‌شود.

کاربر می‌تواند با /lockmysession زودتر قفل کند و ری‌استارت همهٔ کلیدها را پاک می‌کند. متن راهنمای /usetting همیشه 12h می‌نویسد، صرف‌نظر از این مقدار. ربطی به USER_SESSION_STRING ندارد.

مثال در config.py

USER_SESSION_KEY_TTL = 21600

USER_SESSION_MAX_CLIENTS

#

نوع: intپیش‌فرض: 8/bsetting › Config Variables

حداکثر تعداد سشن‌های شخصی کاربران که هم‌زمان وصل‌اند.

سقف کل ربات برای کلاینت‌های سشن شخصی کاربران است (نه USER_SESSION_STRING یا حساب‌های کمکی). با رسیدن به سقف، قدیمی‌ترین کلاینت بی‌کار بسته می‌شود؛ اگر همه مشغول باشند، کاربر خطای Too many user sessions are active, try again shortly می‌گیرد. پیش‌فرض 8 است و 0 هم همان ۸ حساب می‌شود.

مثال در config.py

USER_SESSION_MAX_CLIENTS = 4

USER_SESSION_STRING

#

نوع: strنیاز به ری‌استارت/bsetting › Config Variables

استرینگ سشن یک حساب کاربری تلگرام برای کارهایی که ربات به‌تنهایی نمی‌تواند انجام دهد.

استرینگ سشن Pyrogram نسخهٔ ۲ که هنگام راه‌اندازی وصل می‌شود. با آن، لینک‌های پیام‌های خصوصی (t.me/c/... که ربات به آن‌ها دسترسی ندارد) قابل دانلودند، فایل‌های بزرگ‌تر از ۲ گیگابایت آپلود می‌شوند و در حالت‌های user و both لیچ و دانلود در سوپرگروه‌ها از طریق این حساب انجام می‌شود. خودکار به مجموعهٔ کلاینت‌های HyperDL و HyperUP هم اضافه می‌شود.

اگر حساب پریمیوم باشد، سقف اندازهٔ تکه‌ها به حدود ۴ گیگابایت می‌رسد. در مقصد لیچ، این حساب باید ادمین با اجازهٔ مدیریت و حذف پیام باشد؛ وگرنه کار به حالت bot برمی‌گردد. اگر اتصال شکست بخورد، ربات بدون آن ادامه می‌دهد.

این متغیر با User Session شخصی کاربران در /usetting ← Clone Settings فرق دارد. همیشه از TG_PROXY استفاده می‌کند و بعد از تغییر ری‌استارت لازم است.

مثال در config.py

USER_SESSION_STRING = "BQExampleUserSessionString..."

دسترسی و احراز هویت

تعیین می‌کند چه کسانی و در کدام چت‌ها اجازهٔ استفاده از ربات را دارند: چت‌های مجاز، سودوها، عضویت اجباری، رمز ورود و تأیید با توکن.

AUTHORIZED_CHATS

#

نوع: strنیاز به ری‌استارت/bsetting › Config Variables

شناسهٔ کاربران و چت‌هایی که اجازهٔ استفاده از ربات را دارند.

فهرستی از شناسه‌های عددی که با فاصله از هم جدا می‌شوند. شناسهٔ یک کاربر، آن کاربر را همه‌جا مجاز می‌کند و شناسهٔ گروه یا کانال، کل آن چت را. برای محدود کردن ربات به چند تاپیک از یک گروه انجمنی، شناسهٔ تاپیک‌ها را با | و بدون فاصله بعد از شناسهٔ چت بنویسید؛ در این حالت پیام‌های بیرون از آن تاپیک‌ها پذیرفته نمی‌شوند.

فقط عدد قبول می‌شود و نام کاربری مثل @group هنگام راه‌اندازی خطا می‌دهد. این فهرست جدا از دستور /authorize است و /unauthorize نمی‌تواند شناسه‌های این متغیر را حذف کند.

در /bsetting یادداشت نیاز به ری‌استارت نشان داده می‌شود، اما فهرست چت‌های مجاز بلافاصله به‌روز می‌شود.

مثال در config.py

AUTHORIZED_CHATS = "-1001234567890 -1009876543210|5|12 987654321"

FORCE_SUB_IDS

#

نوع: str/bsetting › Config Variables

کانال‌ها یا گروه‌هایی که کاربر برای استفاده از ربات باید عضوشان باشد.

فهرستی که با فاصله جدا می‌شود و فقط شناسه‌های -100... یا نام کاربری مثل @channel را می‌پذیرد؛ مقدارهای دیگر بی‌صدا نادیده گرفته می‌شوند. پیش از شروع کارهای میرور، لیچ، yt-dlp و کلون، عضویت کاربران عادی بررسی می‌شود و برای هر چتی که عضوش نیستند یک دکمهٔ Join نشان داده می‌شود. پیام خطا بعد از ۹۰ ثانیه پاک می‌شود.

ربات باید بتواند اعضای آن چت را ببیند (معمولاً یعنی ادمین باشد). اگر بررسی یک چت با خطای دیگری روبه‌رو شود، آن چت نادیده گرفته می‌شود. مالک و سودوها معاف‌اند.

مثال در config.py

FORCE_SUB_IDS = "-1001234567890 @examplechannel"

LOGIN_PASS

#

نوع: str/bsetting › Config Variables

رمزی که کاربر با /login وارد می‌کند تا از تأیید با توکن معاف شود.

کاربر با فرستادن /login password (حروف کوچک و بزرگ فرقی ندارد) از آن پس از سیستم توکن VERIFY_TIMEOUT معاف می‌شود. این رمز کاربر را مجاز نمی‌کند و فقط وقتی معنی دارد که VERIFY_TIMEOUT بزرگ‌تر از صفر باشد.

اگر خالی باشد، /login هیچ معافیتی ایجاد نمی‌کند. اگر رمز اشتباه باشد، ربات Wrong Password! جواب می‌دهد. با عوض کردن رمز، ورودهای قبلی باطل می‌شوند. اگر SET_COMMANDS روشن باشد، دستور login هم به منوی دستورها اضافه می‌شود. مقدار را به‌صورت رشته (داخل گیومه) بنویسید.

مثال در config.py

LOGIN_PASS = "MySecretPass"

PROTECTED_API

#

نوع: str/bsetting › Config Variables

آدرس کامل یک API کوتاه‌کنندهٔ لینک برای دکمهٔ تأیید توکن.

برخلاف توضیح داخل ربات، این مقدار یک آدرس کامل است نه فقط کلید: ربات این آدرس را با درخواست GET و پارامتر url (لینک اصلی) صدا می‌زند و پاسخ JSON به شکل {"status": "success", "url": ...} انتظار دارد. اگر تنظیم شود، بر کوتاه‌کننده‌های فایل shortener.txt اولویت دارد و بعد از ۴ تلاش ناموفق، لینک کوتاه‌نشده استفاده می‌شود.

تنها جایی که کوتاه‌کننده به کار می‌رود دکمهٔ Verify Access Token است؛ پس فقط وقتی VERIFY_TIMEOUT بزرگ‌تر از صفر باشد اثر دارد.

مثال در config.py

PROTECTED_API = "https://short.example.com/api?api=YOUR_KEY"

SUDO_USERS

#

نوع: str/bsetting › Config Variables

شناسهٔ کاربرانی که دسترسی سودو (مدیریتی) دارند.

شناسه‌های عددی کاربران را با فاصله از هم جدا کنید (ویرگول خطا می‌دهد). سودوها به دستورهای مدیریتی مثل /bsetting، /restart، /log، /users و /broadcast دسترسی دارند و از عضویت اجباری، تأیید توکن، محدودیت‌های حجمی، سقف تعداد کارها و فاصلهٔ زمانی بین کارها معاف‌اند.

/rmsudo نمی‌تواند کاربران این متغیر را حذف کند. نکته: لغو، شروع اجباری یا انتخاب فایل در کارهای کاربران دیگر فقط برای مالک و سودوهایی ممکن است که با /addsudo اضافه شده‌اند. ویرایش در /bsetting بلافاصله اعمال می‌شود.

مثال در config.py

SUDO_USERS = "123456789 987654321"

VERIFY_TIMEOUT

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

مدت اعتبار توکن دسترسی کاربران به ثانیه؛ 0 یعنی سیستم توکن خاموش است.

وقتی بزرگ‌تر از صفر باشد، کاربران عادی پیش از شروع هر کار باید توکن دسترسی معتبر داشته باشند. اگر توکن نداشته باشند یا منقضی شده باشد، ربات دکمهٔ Verify Access Token را می‌فرستد که به /start ربات می‌رود و با زدن Activate Access Token توکن فعال می‌شود. توکن بعد از گذشت این تعداد ثانیه دوباره منقضی می‌شود.

لینک دکمه در صورت تنظیم با PROTECTED_API یا فایل shortener.txt کوتاه می‌شود. مالک، سودوها و کاربرانی که با LOGIN_PASS وارد شده‌اند معاف‌اند. فقط عدد صحیح بنویسید؛ مقداری مثل 1h خطا می‌دهد.

مثال در config.py

VERIFY_TIMEOUT = 21600

تنظیمات عمومی

زبان، پسوند دستورها، منطقهٔ زمانی، پیام وضعیت و رفتارهای کلی ربات.

AUTHOR_NAME

#

نوع: strپیش‌فرض: WZML-X/bsetting › Config Variables

نام نویسنده در صفحه‌های Telegraph که ربات می‌سازد.

ربات برای نتیجه‌های /list، جست‌وجوی تورنت، فهرست فایل‌های تکراری، برخی نتیجه‌های آپلودهاست و چند افزونه صفحه‌های Telegraph می‌سازد. این نام به‌عنوان نویسندهٔ حساب و صفحه‌ها نوشته می‌شود.

حساب Telegraph یک بار و خیلی زود در راه‌اندازی ساخته می‌شود، پیش از اینکه تنظیمات پایگاه داده خوانده شود؛ پس فقط مقدار config.py یا متغیر محیطی اثر دارد و ویرایش در /bsetting اعمال نمی‌شود.

مثال در config.py

AUTHOR_NAME = "My Mirror Bot"

AUTHOR_URL

#

نوع: strپیش‌فرض: https://t.me/WZML_X/bsetting › Config Variables

لینک نویسنده در صفحه‌های Telegraph که ربات می‌سازد.

کنار AUTHOR_NAME به‌عنوان لینک نویسنده روی صفحه‌های Telegraph قرار می‌گیرد؛ معمولاً لینک کانال خودتان را می‌گذارید. برخلاف توضیح داخل ربات، دکمهٔ عضویتی از روی این لینک ساخته نمی‌شود.

مثل AUTHOR_NAME فقط مقدار config.py یا متغیر محیطی اثر دارد.

مثال در config.py

AUTHOR_URL = "https://t.me/examplechannel"

CMD_SUFFIX

#

نوع: strنیاز به ری‌استارت/bsetting › Config Variables

متنی که به انتهای همهٔ دستورهای ربات اضافه می‌شود.

مثلاً با مقدار 1، دستور /mirror به /mirror1 و /m به /m1 تبدیل می‌شود. کاربرد اصلی‌اش وقتی است که چند ربات WZML-X در یک گروه هستند و می‌خواهید هر دستور فقط به یکی برسد. دستورهای افزونه‌ها هم پسوند می‌گیرند؛ فقط /start، /login، /restartall و /statusall بدون پسوند می‌مانند.

تشخیص دستور به حروف کوچک و بزرگ حساس است. اگر SET_COMMANDS روشن است، فقط از حروف کوچک لاتین، عدد و _ استفاده کنید. بعد از تغییر باید ری‌استارت کنید.

مثال در config.py

CMD_SUFFIX = 1

DEFAULT_LANG

#

نوع: strپیش‌فرض: en/bsetting › Config Variables

کد زبان پیش‌فرض ربات.

در این نسخه فقط دو فایل زبان وجود دارد: en (انگلیسی) و bn (بنگالی). فقط متن پیام /start و دو دکمهٔ آن ترجمه می‌شوند و بقیهٔ پیام‌های ربات انگلیسی می‌مانند. زبان جداگانه برای هر کاربر وجود ندارد.

کدی که فایل زبانش وجود ندارد (مثلاً fa) باعث خطا در /start می‌شود؛ پس فعلاً یکی از همین دو مقدار را بگذارید.

مثال در config.py

DEFAULT_LANG = "en"

INC_TASK_NOTIFY

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

اطلاع دادن کارهای نیمه‌تمام بعد از ری‌استارت.

وقتی روشن است (و DATABASE_URL تنظیم شده)، کارهایی که در سوپرگروه، کانال یا گروه انجمنی شروع می‌شوند در پایگاه داده ثبت می‌شوند و بعد از پایان یا خطا حذف می‌شوند. اگر ربات وسط کار ری‌استارت شود، در راه‌اندازی بعدی در هر چت فهرست لینک پیام کارهای ناتمام هر کاربر فرستاده می‌شود.

خاموش کردن یا ریست هر کدام از این دو گزینه در /bsetting فهرست کارهای ذخیره‌شده را پاک می‌کند. کارهای پیوی و گروه‌های معمولی ثبت نمی‌شوند.

INC_TASK_RESUME

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

ادامهٔ خودکار کارهای نیمه‌تمام بعد از ری‌استارت.

مثل INC_TASK_NOTIFY کارها را در پایگاه داده ثبت می‌کند، اما بعد از ری‌استارت متن دستور اصلی را دوباره در همان چت می‌فرستد و آن را از طرف کاربر اصلی اجرا می‌کند؛ کارها با فاصلهٔ یک ثانیه از هم شروع می‌شوند. کارها از اول شروع می‌شوند، نه از جایی که مانده بودند.

به DATABASE_URL نیاز دارد و می‌تواند هم‌زمان با INC_TASK_NOTIFY روشن باشد. فهرست ذخیره‌شده بعد از تلاش برای ادامه پاک می‌شود، حتی اگر ادامهٔ بعضی کارها ناموفق باشد.

MEDIA_STORE

#

نوع: boolپیش‌فرض: true/bsetting › Config Variables

افزودن لینک‌های Store Link و Share Link به فهرست فایل‌های لیچ‌شده.

وقتی روشن است، در پیام پایان لیچ کنار هر فایل سطر Get Media با دو لینک Store Link و Share Link می‌آید. این لینک‌ها /start ربات را با کدی باز می‌کنند و ربات همان فایل را برای کسی که لینک را باز کرده می‌فرستد. لینک‌های Stream و Download (که BASE_URL و پایگاه داده لازم دارند) هم فقط در همین حالت ساخته می‌شوند.

این لینک‌ها فقط برای کارهایی ساخته می‌شوند که در سوپرگروه، کانال یا گروه انجمنی اجرا شده‌اند، یا وقتی LEECH_LOG_CHAT تنظیم شده باشد. توجه: هر کسی که لینک را داشته باشد می‌تواند فایل را بگیرد و ربات مجاز بودن او را بررسی نمی‌کند. اگر بعداً این گزینه را خاموش کنید، لینک‌های قبلی هم دیگر فایلی نمی‌فرستند.

SET_COMMANDS

#

نوع: boolپیش‌فرض: true/bsetting › Config Variables

ثبت خودکار فهرست دستورهای ربات در منوی دستورهای تلگرام.

وقتی روشن است، ربات فهرست دستورها را (همراه CMD_SUFFIX) در منوی دستورهای تلگرام ثبت می‌کند. چند دستور شرطی‌اند: دستورهای JDownloader فقط با JD_EMAIL و JD_PASS، دستورهای Usenet فقط با USENET_SERVERS و login فقط با LOGIN_PASS اضافه می‌شوند؛ دستورهای Seedr، استریم و افزونه‌ها هم اگر خاموش باشند حذف می‌شوند.

فهرست فقط هنگام راه‌اندازی، ری‌استارت و /restartses ثبت می‌شود. خاموش کردن این گزینه منوی فعلی تلگرام را پاک نمی‌کند؛ فقط آن را دیگر به‌روز نمی‌کند.

STATUS_LIMIT

#

نوع: intپیش‌فرض: 10/bsetting › Module Settings › Limit Settings

تعداد کارهایی که در هر صفحهٔ پیام وضعیت نشان داده می‌شود.

پیام /status در هر صفحه حداکثر این تعداد کار را نشان می‌دهد و اگر کارها بیشتر باشند، دکمه‌های صفحه‌بندی ظاهر می‌شوند. در Limit Settings با واحد msgs نمایش داده می‌شود، اما در واقع تعداد کار در هر صفحه است.

نکته: مقدار 0، برخلاف راهنمای صفحهٔ محدودیت‌ها، به معنی نامحدود نیست و پیام وضعیت را با خطا روبه‌رو می‌کند. اگر USE_IMAGES روشن باشد و ربات هنگام راه‌اندازی تصویر تازه‌ای پیدا کند، این مقدار را خودکار روی 2 می‌گذارد و ذخیره می‌کند.

مثال در config.py

STATUS_LIMIT = 5

STATUS_UPDATE_INTERVAL

#

نوع: intپیش‌فرض: 15/bsetting › Config Variables

فاصلهٔ به‌روزرسانی خودکار پیام وضعیت، به ثانیه.

پیام وضعیت عمومی چت هر چند ثانیه یک بار ویرایش می‌شود (پیام /status me شامل این به‌روزرسانی خودکار نیست). ربات ویرایشی را که کمتر از ۳ ثانیه بعد از ویرایش قبلی باشد انجام نمی‌دهد؛ پس مقدارهای کمتر از ۳ عملاً فرقی ندارند.

تغییر یا ریست در /bsetting بلافاصله روی پیام‌های وضعیتِ در حال اجرا هم اعمال می‌شود. فقط عدد صحیح بنویسید.

مثال در config.py

STATUS_UPDATE_INTERVAL = 10

TIMEZONE

#

نوع: strپیش‌فرض: Asia/Kolkata/bsetting › Config Variables

منطقهٔ زمانی برای زمان لاگ‌ها، پیام ری‌استارت و گزارش‌های خطا.

نام یک منطقهٔ زمانی استاندارد مثل Asia/Tehran، UTC یا Europe/Berlin. زمان لاگ‌ها، سربرگ پیام بعد از ری‌استارت، یادآوری کارهای نیمه‌تمام و زمان گزارش‌های خطا با این منطقه نوشته می‌شود.

منطقهٔ زمانی لاگ‌ها فقط هنگام راه‌اندازی تنظیم می‌شود و تغییرش ری‌استارت می‌خواهد. اگر نام نامعتبر باشد، لاگ‌ها با UTC نوشته می‌شوند، ولی پیام بعد از ری‌استارت و یادآوری کارهای نیمه‌تمام با خطا روبه‌رو می‌شوند.

مثال در config.py

TIMEZONE = "Asia/Tehran"

آپلود، گوگل درایو، Rclone و کلون

تنظیمات میرور (Mirror): دانلود و آپلود در فضای ابری؛ مقصد پیش‌فرض آپلود، گوگل درایو و Rclone، سرویس‌اکانت‌ها، دسته‌بندی‌های درایو، تغییر نام فایل‌ها و کلون (Clone).

CLONE_CONTENT_TYPE

#

نوع: strپیش‌فرض: all/bsetting › Config Variables

نوع پیام‌هایی که در کلون پیام‌های تلگرام کپی می‌شوند.

فقط روی کلون پیام‌های تلگرام (/clone با لینک t.me) اثر دارد. doc فقط پیام‌های سند، med فقط ویدیو، صوت، عکس، انیمیشن و پیام صوتی، و all هر پیامی که رسانه یا متن داشته باشد را نگه می‌دارد. مقدار دیگر کار را با خطا متوقف می‌کند.

اولویت: آرگومان -ct، سپس Content Type کاربر در /usetting ← Clone Settings، سپس همین متغیر.

مثال در config.py

CLONE_CONTENT_TYPE = "med"

CLONE_DUMP_CHATS

#

نوع: dictپیش‌فرض: {}/bsetting › Config Variables

مقصدهای کلون پیام‌های تلگرام؛ مقدار سراسری آن در کد خوانده نمی‌شود.

در کد فقط مقدار شخصی کاربر با همین نام (در /usetting ← Clone Settings ← Destinations) خوانده می‌شود و مقدار این متغیر سراسری هیچ‌جا استفاده نمی‌شود.

ترتیب انتخاب مقصد کلون: آرگومان -ud، سپس مقصدهای کاربر، سپس LEECH_LOG_CHAT. اگر هیچ‌کدام نباشد، کار با No clone destination! متوقف می‌شود.

مثال در config.py

CLONE_DUMP_CHATS = {"Backup": -1001234567890}

CLONE_EXCLUDED_EXTENSIONS

#

نوع: str/bsetting › Config Variables

پسوندهایی که در کلون پیام‌های تلگرام کپی نمی‌شوند.

فقط روی کلون پیام‌های تلگرام (/clone با لینک t.me) اثر دارد. پسوندها با فاصله جدا می‌شوند و با انتهای نام فایل پیام مقایسه می‌شوند؛ پیام‌های بدون نام فایل (عکس، متن) هیچ‌وقت کنار گذاشته نمی‌شوند. مستقل از EXCLUDED_EXTENSIONS است.

اولویت: آرگومان -ex، سپس Excluded Ext کاربر در Clone Settings، سپس همین متغیر.

مثال در config.py

CLONE_EXCLUDED_EXTENSIONS = "mkv srt"

CLONE_FILTERS

#

نوع: dictپیش‌فرض: {}/bsetting › Config Variables

فیلترهای Regex برای انتخاب پیام‌ها در کلون پیام‌های تلگرام.

فقط روی کلون پیام‌های تلگرام (/clone با لینک t.me) اثر دارد. دیکشنری‌ای با کلیدهای mn (نگه داشتن نام‌های منطبق)، xn (حذف نام‌های منطبق)، mc و xc (همین دو روی کپشن یا متن). الگوها به حروف کوچک و بزرگ حساس نیستند، حداکثر ۵۰۰ نویسه‌اند و همهٔ فیلترها با هم ترکیب (AND) می‌شوند. پیامی که نام فایل ندارد هیچ‌وقت با mn منطبق نمی‌شود.

آرگومان‌های -mn، -xn، -mc و -xc برای هر کلید اولویت دارند. اگر کاربر در Clone Settings ← Regex Filters فیلتر داشته باشد، به‌جای این مقدار استفاده می‌شود. الگوی نادرست هنگام شروع کار خطا می‌دهد.

مثال در config.py

CLONE_FILTERS = {"mn": "S01E\\d+", "xn": "sample"}

CLONE_TG_LIMIT

#

نوع: intپیش‌فرض: 10000/bsetting › Config Variables

حداکثر تعداد پیام در یک بازهٔ لینک برای کلون پیام‌های تلگرام.

اگر بازهٔ لینک (مثل t.me/c/123/120-260) بیشتر از این تعداد پیام داشته باشد، کار با پیام That range is N messages, the limit is L. رد می‌شود. 0 یعنی بدون سقف و با یا بدون -fwd اعمال می‌شود.

ربطی به CLONE_LIMIT (سقف حجمی کلون گوگل درایو) ندارد. در /bsetting زیر Config Variables است و توضیحی برایش نمایش داده نمی‌شود.

مثال در config.py

CLONE_TG_LIMIT = 5000

DEFAULT_UPLOAD

#

نوع: strپیش‌فرض: rc/bsetting › Config Variables

مقصد پیش‌فرض آپلود در میرور: rc برای Rclone یا gd برای گوگل درایو.

وقتی کاربر در میرور آرگومان -up ندهد، این متغیر مقصد را تعیین می‌کند: با rc به RCLONE_PATH و با gd به GDRIVE_ID آپلود می‌شود (اگر کاربر مقصد خودش را در /usetting گذاشته باشد، مقصد کاربر). با -up rc یا -up gd می‌توان برای یک کار، دیگری را انتخاب کرد. روی لیچ اثری ندارد.

فقط rc و gd معتبرند. هنگام خواندن از config.py یا پایگاه داده هر مقداری غیر از gd به rc تبدیل می‌شود، اما متغیر محیطی و /bsetting این تبدیل را ندارند؛ پس دقیق بنویسید. اگر مقصد نهایی خالی باشد، کار با No Upload Destination! متوقف می‌شود.

کاربر می‌تواند در /usetting ← General Settings حالت خودش را بین گوگل درایو و Rclone عوض کند.

مثال در config.py

DEFAULT_UPLOAD = "gd"

DRIVE_CATEGORY_MODE

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

اجازه دادن به کاربران برای تعریف دسته‌بندی‌های شخصی گوگل درایو.

کلید سراسری دسته‌بندی‌های شخصی است. وقتی روشن باشد، در /usetting ← Mirror Settings گزینهٔ Drive Categories نمایش داده می‌شود و کاربر می‌تواند دسته‌هایی را که در GDrive Tools ← User Drive Categories تعریف کرده (به شکل {"name": "drive_id|index_link"}) با آرگومان -gc انتخاب کند.

وقتی خاموش باشد، دسته‌های شخصی ذخیره می‌مانند ولی نادیده گرفته می‌شوند. در تداخل نام، دسته‌های مالک (categories.txt و Root) برنده‌اند.

DRIVE_CATEGORY_SA

#

نوع: str/bsetting › Config Variables

ایمیلی که روی آپلودهای بیرون از GDRIVE_ID دسترسی خواندن می‌گیرد.

بعد از هر آپلود موفق با API گوگل درایو، اگر مقصد چیزی غیر از GDRIVE_ID باشد (مثلاً یک دستهٔ دیگر)، به این ایمیل دسترسی reader روی فایل یا پوشهٔ آپلودشده داده می‌شود، بدون ایمیل اطلاع‌رسانی. با وجود نام، هر ایمیلی قبول است.

خطاها فقط در لاگ ثبت می‌شوند. روی کلون گوگل درایو و Rclone اثری ندارد. خالی یعنی این مرحله انجام نمی‌شود.

مثال در config.py

DRIVE_CATEGORY_SA = "mybot-sa@example-project.iam.gserviceaccount.com"

EXCLUDED_EXTENSIONS

#

نوع: str/bsetting › Config Variables

پسوندهایی که فایل‌هایشان در میرور و لیچ کنار گذاشته می‌شوند.

پسوندها را با فاصله جدا کنید؛ نقطهٔ ابتدایی لازم نیست و حروف کوچک و بزرگ فرقی ندارد. فایل‌هایی که نامشان با این پسوندها تمام شود، بعد از دانلود و بعد از استخراج حذف می‌شوند، در دانلود و کلون گوگل درایو نادیده گرفته می‌شوند و در Rclone با --exclude کنار می‌روند. aria2 و !qB همیشه در فهرست‌اند.

کاربر می‌تواند در Misc Settings ← Excluded Extensions فهرست خودش را بگذارد که جایگزین این مقدار می‌شود. کلون پیام‌های تلگرام به‌جای این متغیر از CLONE_EXCLUDED_EXTENSIONS استفاده می‌کند.

مثال در config.py

EXCLUDED_EXTENSIONS = "txt nfo url"

GD_DESP

#

نوع: strپیش‌فرض: Uploaded with WZ Bot/bsetting › Config Variables

متن توضیحاتی که روی فایل‌های آپلودشده در گوگل درایو گذاشته می‌شود.

در فیلد description هر فایلی که با API گوگل درایو آپلود می‌شود نوشته می‌شود. روی پوشه‌ها، کپی‌های کلون گوگل درایو و آپلودهای Rclone اثری ندارد. گزینهٔ جداگانه‌ای برای کاربران ندارد.

مثال در config.py

GD_DESP = "Uploaded by My Bot"

GDRIVE_ID

#

نوع: str/bsetting › Config Variables

شناسهٔ پوشه یا درایو اشتراکی گوگل درایو برای آپلودها.

مقصد پیش‌فرض آپلود با API گوگل درایو (با DEFAULT_UPLOAD = "gd"، -up gd یا -gc). یک شناسهٔ پوشهٔ ۳۳ نویسه‌ای، شناسهٔ درایو اشتراکی ۱۹ نویسه‌ای یا root قبول می‌شود. پیشوندهای tp: (توکن مالک، token.pickle)، sa: (سرویس‌اکانت‌ها) و mtp: (توکن خود کاربر) هم مجازند.

هنگام راه‌اندازی این شناسه با INDEX_URL به‌عنوان درایو Main در جست‌وجوی /list و به‌عنوان دستهٔ Root در انتخاب دسته‌بندی ثبت می‌شود. کاربر می‌تواند در /usetting ← Mirror Settings ← GDrive Tools ← Default Gdrive ID شناسهٔ خودش را بگذارد.

نکته: ویرایش در /bsetting فقط فهرست درایوهای /list را به‌روز می‌کند؛ دستهٔ Root تا ری‌استارت مقدار قبلی را نگه می‌دارد.

مثال در config.py

GDRIVE_ID = "1AbCdEfGhIjKlMnOpQrStUvWxYz012345"

INDEX_URL

#

نوع: str/bsetting › Config Variables

آدرس ایندکس گوگل درایو برای ساختن لینک ایندکس فایل‌ها.

اگر تنظیم شود، پیام پایان میرور گوگل درایو دکمهٔ لینک ایندکس ({INDEX_URL}/name) و برای فایل‌های تصویری، ویدیویی و صوتی دکمهٔ مشاهده می‌گیرد. در جست‌وجوی /list هم برای درایو Main به کار می‌رود. لینک‌ها فرض می‌کنند فایل در ریشهٔ ایندکس است، پس آدرس باید به همان پوشهٔ GDRIVE_ID اشاره کند (معمولاً شکلی مثل https://example.workers.dev/0:).

/ انتهایی هنگام خواندن از config.py حذف می‌شود. کاربر می‌تواند در GDrive Tools ← Default Index URL ایندکس خودش را بگذارد.

مثال در config.py

INDEX_URL = "https://index.example.workers.dev/0:"

IS_TEAM_DRIVE

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

خاموش کردن اشتراک‌گذاری عمومی فایل‌های گوگل درایو (برای درایوهای اشتراکی).

تنها اثرش این است: وقتی خاموش است، به هر فایلی که با API آپلود می‌شود و هر پوشه‌ای که ساخته می‌شود، دسترسی «هر کسی که لینک دارد» (reader) داده می‌شود. وقتی روشن است، این مرحله انجام نمی‌شود. ربات در هر حال درایوهای اشتراکی را پشتیبانی می‌کند.

اگر در درایو اشتراکی یا سازمانی، سیاست دامنه اشتراک‌گذاری با لینک را ممنوع کرده باشد و این گزینه خاموش باشد، آپلود بعد از سه تلاش با خطا متوقف می‌شود؛ در این حالت آن را روشن کنید.

NAME_SWAP

#

نوع: str/bsetting › Config Variables

قاعده‌های تغییر نام فایل‌ها با عبارت منظم (Regex).

قاعده‌ها با | جدا می‌شوند و هر قاعده شکل pattern:replacement:count:flag دارد که فقط pattern لازم است. count خالی یا 0 یعنی همهٔ موارد، و flag نام یکی از پرچم‌های ماژول re پایتون است (مثل i برای نادیده گرفتن حروف کوچک و بزرگ). قاعده‌ای بدون جایگزین، آن عبارت را حذف می‌کند. عبارت‌های www... همیشه اول حذف می‌شوند.

روی نام فایل بدون پسوند و برای همهٔ فایل‌های یک پوشه اجرا می‌شود (نام پوشه‌ها عوض نمی‌شود)، بعد از استخراج و FFmpeg و پیش از آپلود. : و | را نمی‌توان در الگو نوشت و فاصلهٔ کنار | جزو الگو می‌شود. در کلون اجرا نمی‌شود.

اولویت: آرگومان -ns، سپس Name Swap کاربر در Misc Settings، سپس همین متغیر.

مثال در config.py

NAME_SWAP = "\\[ExampleSite\\]:|720p:HD|sample::0:i"

RCLONE_FLAGS

#

نوع: str/bsetting › Config Variables

فلگ‌های اضافه‌ای که به دستورهای انتقال Rclone اضافه می‌شوند.

قالب key:value|key|key:value است؛ هر بخش با | جدا می‌شود و اگر : داشته باشد، به فلگ و مقدار تقسیم می‌شود. مثلاً --buffer-size:8M|--drive-starred-only. این فلگ‌ها به همهٔ دانلودها، آپلودها و کلون‌های Rclone اضافه می‌شوند، ولی نه به rclone serve.

نکته: اگر هر فلگی تنظیم شود، تنظیمات داخلی ربات برای ریموت‌های درایو (مثل --tpslimit و --transfers) اعمال نمی‌شوند. اولویت: آرگومان -rcf، سپس Rclone Flags کاربر در RClone Tools، سپس همین متغیر.

مثال در config.py

RCLONE_FLAGS = "--buffer-size:8M|--drive-chunk-size:64M"

RCLONE_PATH

#

نوع: str/bsetting › Config Variables

مسیر پیش‌فرض Rclone برای آپلود میرور.

وقتی DEFAULT_UPLOAD = "rc" است یا -up rc داده شود، فایل‌ها در remote:path/name آپلود می‌شوند. قالب remote:path است و remote باید در rclone.conf مالک وجود داشته باشد؛ با پیشوند mrcc: از کانفیگ شخصی کاربر استفاده می‌شود. اگر خالی باشد و حالت rc باشد، کار با No Upload Destination! متوقف می‌شود.

کاربر می‌تواند در /usetting ← Mirror Settings ← RClone Tools ← Default Rclone Path مسیر خودش را بگذارد.

مثال در config.py

RCLONE_PATH = "gdrive:Mirror/Uploads"

STOP_DUPLICATE

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

جلوگیری از میرور فایلی که با همین نام در گوگل درایو مقصد وجود دارد.

پیش از دانلود، در مقصد گوگل درایو دنبال نامی دقیقاً برابر می‌گردد (با -z نام .zip و با -e نام بدون پسوند فشرده) و اگر پیدا شود، کار را با فهرستی از موارد مشابه متوقف می‌کند. برای کلون گوگل درایو هم بررسی می‌شود.

در این موارد بررسی نمی‌شود: مقصد Rclone، کارهای لیچ، استفاده از -s یا -m، و مقصدهایی که با توکن خود کاربر (mtp:) هستند. در پوشهٔ معمولی فقط فرزندان مستقیم جست‌وجو می‌شوند، ولی در درایو اشتراکی یا root کل درایو.

کاربر می‌تواند در GDrive Tools با Enable Stop Duplicate / Disable Stop Duplicate آن را برای خودش عوض کند.

UPLOAD_PATHS

#

نوع: dictپیش‌فرض: {}/bsetting › Config Variables

نام‌های میان‌بر برای مقصدهای آپلود که با -up استفاده می‌شوند.

دیکشنری‌ای به شکل {"alias": "destination"}. اگر مقدار -up دقیقاً برابر یکی از کلیدها باشد (حساس به حروف کوچک و بزرگ)، با مقصد آن جایگزین می‌شود. مقصد می‌تواند مسیر Rclone، شناسهٔ گوگل درایو یا (برای لیچ) شناسه یا نام کاربری چت تلگرام باشد. برخلاف توضیح داخل ربات، ربطی به پسوند فایل ندارد.

اگر کاربر در /usetting ← Misc Settings ← Upload Paths فهرست خودش را داشته باشد، کاملاً جایگزین این مقدار می‌شود. در متغیر محیطی باید دیکشنری پایتون معتبر باشد، وگرنه بی‌صدا نادیده گرفته می‌شود.

مثال در config.py

UPLOAD_PATHS = {"movies": "gdrive:Movies", "tv": "gdrive:TV", "dump": "-1001234567890"}

USE_SERVICE_ACCOUNTS

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

استفاده از سرویس‌اکانت‌های گوگل برای گوگل درایو و Rclone.

وقتی روشن است، کارهای گوگل درایو با فایل‌های JSON پوشهٔ accounts انجام می‌شوند و با رسیدن به محدودیت روزانه، ربات به سرویس‌اکانت بعدی می‌رود. فایل accounts.zip را می‌توانید در /bsetting ← Private Files آپلود کنید؛ ربات آن را باز می‌کند و این گزینه را خودکار روشن می‌کند (حذف آن هم گزینه را خاموش می‌کند). اگر پوشهٔ accounts وجود نداشته باشد، هنگام راه‌اندازی خاموش می‌شود.

برای Rclone فقط روی ریموت‌های drive در rclone.conf مالک اثر دارد که team_drive یا root_folder_id داشته باشند و service_account_file نداشته باشند. برای یک کار می‌توانید با پیشوند sa: یا tp: سرویس‌اکانت یا token.pickle را اجباری کنید.

لیچ

تنظیمات لیچ (Leech): دانلود و ارسال فایل در خود تلگرام؛ از اندازهٔ تکه‌ها، پیشوند و پسوند و کپشن تا تصویر بندانگشتی (Thumbnail)، چت‌های دامپ (چت‌هایی که نسخه‌ای از فایل‌ها در آن‌ها ذخیره می‌شود) و گروه رسانه‌ای.

AS_DOCUMENT

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

فرستادن فایل‌های لیچ به‌صورت سند (Document) به‌جای رسانه.

وقتی روشن است، همهٔ فایل‌ها به‌صورت سند فرستاده می‌شوند؛ فایل‌هایی که ویدیو، صوت یا تصویر نیستند در هر حال سند فرستاده می‌شوند. این گزینه روی تکه کردن هم اثر دارد: در حالت رسانه، ویدیوها با FFmpeg به تکه‌های قابل‌پخش name.partNNN.ext تقسیم می‌شوند و در حالت سند، همه‌چیز به تکه‌های .001، .002 و... بریده می‌شود. در حالت سند، THUMBNAIL_LAYOUT به کار نمی‌رود.

ترتیب اولویت: آرگومان -doc یا -med، سپس تنظیم کاربر در /usetting ← Leech Settings (دکمهٔ Send As Document / Send As Media) و در آخر همین متغیر. اگر کاربر صریحاً گزینه‌ای را انتخاب کرده باشد، انتخاب او برنده است.

AUTO_THUMBNAIL

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

گرفتن خودکار پوستر از TMDb به‌عنوان تامبنیل، وقتی تامبنیل دیگری نیست.

ربات از نام فایل (بعد از حذف برچسب‌هایی مثل کیفیت، فصل و قسمت و سال) عنوان را حدس می‌زند، در TMDb جست‌وجو می‌کند و برای ارسال سندی پوستر و برای ارسال رسانه‌ای تصویر پس‌زمینه را برمی‌دارد. به TMDB_ACCESS_TOKEN نیاز دارد. اگر عنوان اشتباه تشخیص داده شود، تصویر نامربوط روی فایل می‌نشیند.

فقط وقتی اجرا می‌شود که تامبنیل شخصی کاربر، -t، تامبنیل yt-dlp یا کاور صوتی وجود نداشته باشد؛ -t none آن را خاموش می‌کند. کاربر می‌تواند در Thumbnail Settings با Enable Auto Thumbnail / Disable Auto Thumbnail آن را برای خودش عوض کند.

EQUAL_SPLITS

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

تقسیم فایل‌های بزرگ به تکه‌هایی با اندازهٔ تقریباً برابر.

به‌طور عادی فایل به چند تکهٔ کامل به اندازهٔ LEECH_SPLIT_SIZE و یک تکهٔ کوچک آخر تقسیم می‌شود. با روشن کردن این گزینه، تعداد تکه‌ها همان می‌ماند اما حجم به‌طور مساوی بین آن‌ها پخش می‌شود؛ پس تکه‌ها حداکثر به اندازهٔ LEECH_SPLIT_SIZE هستند، نه دقیقاً برابر آن. در تکه کردن ویدیو با FFmpeg، برابری تقریبی است. روی اندازهٔ تکه‌های 7z در لیچ با -z هم اثر دارد.

کاربر می‌تواند در /usetting ← Leech Settings مقدار خودش را بگذارد (Enable Equal Splits / Disable Equal Splits) و انتخاب صریح کاربر بر این مقدار اولویت دارد.

LEECH_CAPTION

#

نوع: str/bsetting › Config Variables

قالب کپشن فایل‌های لیچ‌شده؛ کل کپشن را جایگزین می‌کند و HTML را پشتیبانی می‌کند.

قالبی با جای‌نگهدارهای {filename}، {size}، {duration}، {quality}، {languages}، {subtitles}، {md5_hash}، {mime_type}، {prefilename} (نام پیش از NAME_SWAP) و {precaption} (کپشن پیام منبع تلگرامی). حروف کوچک و بزرگ در نام جای‌نگهدار مهم نیست.

بعد از قالب می‌توانید با | جایگزینی‌هایی به شکل find:replace[:count] اضافه کنید. برای نوشتن خود |، {، } از \|، \{، \} و برای فاصله از \s استفاده کنید. نکته: جای‌نگهدار ناشناخته باعث شکست آپلود آن فایل می‌شود. وقتی قالب تنظیم است، برای هر فایل MD5 و اطلاعات رسانه محاسبه می‌شود و LEECH_FONT نادیده گرفته می‌شود.

کاربر می‌تواند در /usetting ← Leech Settings مقدار خودش را بگذارد (Leech Caption).

مثال در config.py

LEECH_CAPTION = "<b>{filename}</b>\n\n📦 {size} | ⏱ {duration} | 🎞 {quality}"

LEECH_DUMP_CHATS

#

نوع: dictپیش‌فرض: {}/bsetting › Config Variables

چت‌های دامپ نام‌دار که کاربران برای هر کار با -ud انتخاب می‌کنند.

دیکشنری‌ای به شکل {"name": chat_id}. مقدار می‌تواند شناسهٔ عددی، chat_id|topic_id یا @username باشد. کاربر با -ud name یکی را انتخاب می‌کند و آن چت برای همان کار جایگزین LEECH_LOG_CHAT می‌شود. اگر نام ناشناخته باشد، دکمه‌هایی برای انتخاب نشان داده می‌شود. این نام‌ها در /clone پیام‌های تلگرام هم کار می‌کنند.

کاربران می‌توانند در /usetting ← Leech Settings ← Leech Dump Chats چت‌های خودشان را اضافه کنند؛ در تداخل نام، چت کاربر برنده است. تفاوت: به چت‌های دامپ شخصی کاربر از هر لیچ خودکار نسخه‌ای فرستاده می‌شود، اما چت‌های این متغیر فقط وقتی با -ud انتخاب شوند استفاده می‌شوند. /bsetting فقط بررسی می‌کند که مقدار دیکشنری باشد.

مثال در config.py

LEECH_DUMP_CHATS = {"Movies": -1001234567890, "Series": "-1009876543210|12"}

LEECH_FONT

#

نوع: str/bsetting › Config Variables

سبک متنی نام فایل در کپشن پیش‌فرض لیچ.

نام یک تگ HTML بدون ویژگی که دور نام فایل در کپشن قرار می‌گیرد، مثل b (پررنگ)، i (کج)، u (زیرخط)، s (خط‌خورده)، code (تک‌فاصله) یا spoiler. ربات مقدار را بررسی نمی‌کند، پس فقط نام تگ را بنویسید.

فقط وقتی LEECH_CAPTION (یا کپشن کاربر) تنظیم نشده باشد اثر دارد. گزینهٔ جداگانه‌ای برای کاربران ندارد.

مثال در config.py

LEECH_FONT = "code"

LEECH_LOG_CHAT

#

نوع: str/bsetting › Config Variables

چتی که همهٔ فایل‌های لیچ‌شده به‌طور پیش‌فرض در آن آپلود می‌شوند.

وقتی تنظیم شود، مقصد اصلی هر لیچ همین چت است و فایل‌ها به‌جای چتی که دستور در آن فرستاده شده، اینجا آپلود می‌شوند؛ سپس نسخه‌هایی به مقصد -up، چت‌های دامپ شخصی کاربر و (با BOT_PM) پیوی کاربر کپی می‌شود. آرگومان -ud این مقصد را برای همان کار عوض می‌کند. اگر خالی باشد، فایل‌ها در همان چت دستور آپلود می‌شوند.

کاربردهای دیگر: با USE_HYPER و کلاینت‌های کمکی، فایل‌های منبع تلگرامی اول به این چت کپی می‌شوند؛ /stream فایل را پیش از ساختن لینک اینجا کپی می‌کند؛ خلاصهٔ آپلودهای یوتیوب اینجا فرستاده می‌شود؛ و اگر مقصد دیگری نباشد، مقصد پیش‌فرض کلون پیام‌های تلگرام است.

قالب: شناسهٔ عددی چت، یا chat_id|topic_id برای یک تاپیک. ربات (یا حساب کاربری) باید در آن چت ادمین با اجازهٔ مدیریت و حذف پیام باشد. متغیر قدیمی LEECH_DUMP_CHAT اگر این متغیر خالی باشد خودکار به اینجا منتقل می‌شود.

مثال در config.py

LEECH_LOG_CHAT = -1001234567890

LEECH_PREFIX

#

نوع: str/bsetting › Config Variables

متنی که به ابتدای نام فایل‌های لیچ‌شده اضافه می‌شود.

هم به نام فایل و هم به کپشن اضافه می‌شود. در کپشن، تگ‌های HTML حفظ می‌شوند ولی از نام فایل حذف می‌شوند؛ \s به فاصله تبدیل می‌شود. اگر نام فایل از قبل با پیشوند شروع شده باشد، دوباره به نام اضافه نمی‌شود. فقط روی لیچ اثر دارد و میرور را تغییر نمی‌دهد.

کاربر می‌تواند در /usetting ← Leech Settings مقدار خودش را بگذارد (Leech Prefix)؛ کاربر نمی‌تواند پیشوند مالک را با مقدار خالی حذف کند. نام‌های طولانی‌تر از ۶۰ نویسه بعد از افزودن پیشوند کوتاه می‌شوند.

مثال در config.py

LEECH_PREFIX = "<b>@MyChannel</b>\\s-\\s"

LEECH_SPLIT_SIZE

#

نوع: intپیش‌فرض: 2097152000/bsetting › Config Variables

اندازهٔ تکه‌ها برای فایل‌های بزرگ‌تر از حد آپلود تلگرام، به بایت.

فایل‌های بزرگ‌تر از این اندازه پیش از لیچ تکه‌تکه می‌شوند (به‌جز وقتی -z استفاده شود). سقف آن ۲۰۹۷۱۵۲۰۰۰ بایت (حدود ۲ گیگابایت) است و اگر حساب USER_SESSION_STRING پریمیوم باشد، ۴۱۹۴۳۰۴۰۰۰ بایت (حدود ۴ گیگابایت). هنگام راه‌اندازی، مقدار 0، مقدار پیش‌فرض ۲ گیگابایت یا هر مقدار بیشتر از سقف، خودکار با سقف جایگزین می‌شود؛ پس روی حساب پریمیوم پیش‌فرض به ۴ گیگابایت می‌رسد.

در /bsetting فقط عدد خام به بایت قبول می‌شود (مقداری مثل 2GB خطا می‌دهد) و مقدار بیشتر از سقف به سقف کاهش می‌یابد. کاربر می‌تواند در Leech Settings ← Leech Split Size یا با آرگومان -sp (مثلاً -sp 500mb) اندازهٔ دیگری بدهد. در حالت انتقال bot، اندازهٔ تکه هیچ‌وقت از حدود ۲ گیگابایت بیشتر نمی‌شود.

مثال در config.py

LEECH_SPLIT_SIZE = 1048576000

LEECH_SUFFIX

#

نوع: str/bsetting › Config Variables

متنی که به انتهای نام فایل‌های لیچ‌شده (پیش از پسوند) اضافه می‌شود.

پیش از پسوند فایل، هم در نام و هم در کپشن قرار می‌گیرد. در کپشن HTML حفظ و در نام فایل حذف می‌شود و \s به فاصله تبدیل می‌شود. در تکه‌های سندی مثل x.mkv.001، پسوند پیش از .001 قرار می‌گیرد.

کاربر می‌تواند در /usetting ← Leech Settings مقدار خودش را بگذارد (Leech Suffix)؛ اگر مقدار کاربر خالی باشد، همین مقدار استفاده می‌شود.

مثال در config.py

LEECH_SUFFIX = "\\s-\\sMyChannel"

MEDIA_GROUP

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

فرستادن تکه‌های یک فایل به‌صورت گروه رسانه‌ای (آلبوم).

فقط روی تکه‌های فایل‌های تقسیم‌شده اثر دارد: تکه‌ها اول جداگانه آپلود می‌شوند و بعد در آلبوم‌های حداکثر ۱۰تایی دوباره فرستاده می‌شوند و پیام‌های جداگانه پاک می‌شوند.

کاربر می‌تواند در /usetting ← Leech Settings مقدار خودش را بگذارد (Enable Media Group / Disable Media Group). نکته: اگر مالک این گزینه را روشن کند، خاموش کردن آن توسط کاربر اثری ندارد.

THUMBNAIL_LAYOUT

#

نوع: str/bsetting › Config Variables

ساخت تامبنیل ویدیوها به‌صورت شبکه‌ای از چند فریم.

قالب CxR است، یعنی تعداد ستون‌ها x تعداد ردیف‌ها؛ مثلاً 3x3 یعنی ۹ فریم در یک تصویر. برخلاف توضیح داخل ربات، این مقدار ابعاد تصویر (مثل 1280x720) نیست؛ چنین عددی صدها هزار فریم می‌خواهد. مقدار نامعتبر به تامبنیل تک‌فریمی برمی‌گردد.

فقط برای ویدیوهایی که به‌صورت رسانه فرستاده می‌شوند و تامبنیل دیگری ندارند به کار می‌رود؛ تامبنیل شخصی کاربر یا -t، تامبنیل yt-dlp، کاور صوتی و تامبنیل خودکار TMDb اولویت دارند. با آرگومان -tl یا در /usetting ← Leech Settings ← Thumbnail Settings ← Layout قابل تغییر است.

مثال در config.py

THUMBNAIL_LAYOUT = "3x3"

TMDB_ACCESS_TOKEN

#

نوع: str/bsetting › Config Variables

کلید API یا توکن دسترسی TMDb برای تامبنیل خودکار.

فقط برای AUTO_THUMBNAIL استفاده می‌شود و اگر خالی باشد، تامبنیل خودکار بی‌صدا کاری نمی‌کند. هم کلید API نسخهٔ ۳ و هم Read Access Token نسخهٔ ۴ از سایت TMDb قبول می‌شود؛ ربات بر اساس طول مقدار تشخیص می‌دهد کدام است.

اگر توکن نامعتبر باشد، در لاگ پیام TMDb authentication failed دیده می‌شود. کاربران توکن جداگانه‌ای ندارند.

مثال در config.py

TMDB_ACCESS_TOKEN = "0123456789abcdef0123456789abcdef"

سرویس‌های آپلود مستقیم (Uphoster)

کلیدهای API سرویس‌هایی مثل Gofile و PixelDrain که فایل را به‌جای فضای ابری روی آن‌ها آپلود می‌کنند.

BUZZHEAVIER_API

#

نوع: str/bsetting › Config Variables

کلید API (شناسهٔ حساب) BuzzHeavier برای آپلود.

آپلود در سرویس‌های آپلود مستقیم فقط با دستور /uphoster (یا /up) انجام می‌شود و هر کاربر سرویس‌هایش را در /usetting ← Uphoster Settings ← Change Destination ⇋ انتخاب می‌کند (پیش‌فرض Gofile). برای BuzzHeavier این کلید لازم است و پیش از آپلود اعتبارش بررسی می‌شود؛ کلید نادرست خطای Invalid BuzzHeavier API Key می‌دهد. ساختار پوشه‌ها در BuzzHeavier بازسازی می‌شود.

کاربر می‌تواند در BuzzHeavier Tools کلید خودش و یک پوشهٔ مقصد بگذارد؛ برای پوشهٔ مقصد متغیر سراسری وجود ندارد. توجه: این کلید در صفحهٔ مربوط به همین سرویس در /usetting برای کاربرانی که کلید خودشان را نگذاشته‌اند به‌صورت متن ساده نمایش داده می‌شود.

مثال در config.py

BUZZHEAVIER_API = "ABCDEF123456"

DEVUPLOADS_FOLDER

#

نوع: str/bsetting › Config Variables

شناسهٔ پوشه‌ای در DevUploads که فایل‌ها بعد از آپلود به آن منتقل می‌شوند.

بعد از آپلود هر فایل، ربات آن را به این پوشه منتقل می‌کند؛ اگر این کار شکست بخورد فقط هشدار در لاگ ثبت می‌شود و آپلود موفق می‌ماند. اگر خالی باشد، فایل‌ها در ریشهٔ حساب می‌مانند.

کاربر می‌تواند در DevUploads Tools پوشهٔ خودش را بگذارد.

مثال در config.py

DEVUPLOADS_FOLDER = 12345

DEVUPLOADS_KEY

#

نوع: str/bsetting › Config Variables

کلید API حساب DevUploads برای آپلود.

آپلود در سرویس‌های آپلود مستقیم فقط با دستور /uphoster (یا /up) انجام می‌شود و هر کاربر سرویس‌هایش را در /usetting ← Uphoster Settings ← Change Destination ⇋ انتخاب می‌کند (پیش‌فرض Gofile). برای DevUploads این کلید لازم است، اما پیش از شروع کار بررسی نمی‌شود و نبودنش فقط هنگام آپلود خطا می‌دهد. ساختار پوشه‌ها حفظ نمی‌شود و اگر بیش از یک فایل باشد، لینک‌ها در یک صفحهٔ Telegraph فهرست می‌شوند.

کاربر می‌تواند در DevUploads Tools کلید خودش را بگذارد. توجه: این کلید در صفحهٔ مربوط به همین سرویس در /usetting برای کاربرانی که کلید خودشان را نگذاشته‌اند به‌صورت متن ساده نمایش داده می‌شود.

مثال در config.py

DEVUPLOADS_KEY = "12345abcdef67890"

GOFILE_API

#

نوع: str/bsetting › Config Variables

توکن حساب Gofile برای آپلود فایل‌ها.

آپلود در سرویس‌های آپلود مستقیم فقط با دستور /uphoster (یا /up) انجام می‌شود و هر کاربر سرویس‌هایش را در /usetting ← Uphoster Settings ← Change Destination ⇋ انتخاب می‌کند (پیش‌فرض Gofile). برای Gofile این توکن لازم است: اگر نه کاربر توکن داشته باشد و نه این متغیر پر باشد، /uphoster پیش از شروع با No Gofile Token Found! رد می‌شود. توکن هنگام تنظیم بررسی نمی‌شود و توکن نادرست هنگام آپلود خطا می‌دهد.

کاربر می‌تواند در Uphoster Settings ← Gofile Tools ← Gofile Token توکن خودش را بگذارد؛ اگر خالی باشد، همین مقدار استفاده می‌شود. توجه: این کلید در صفحهٔ مربوط به همین سرویس در /usetting برای کاربرانی که کلید خودشان را نگذاشته‌اند به‌صورت متن ساده نمایش داده می‌شود.

مثال در config.py

GOFILE_API = "AbCdEfGhIjKlMnOpQrStUvWxYz012345"

GOFILE_AUTO_CREATE_FOLDER

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

ساختن پوشهٔ عمومی جدا برای هر آپلود تک‌فایلی در Gofile.

فقط برای آپلود تک‌فایل و وقتی GOFILE_FOLDER_ID خالی است اثر دارد: به‌جای ریشهٔ حساب، یک پوشهٔ عمومی تازه (با نامی که با -m داده شده) ساخته می‌شود و لینک پوشه برگردانده می‌شود. آپلود پوشه بدون شناسهٔ پوشه همیشه یک پوشهٔ عمومی تازه می‌سازد.

کاربر می‌تواند در Gofile Tools آن را برای خودش روشن یا خاموش کند و از آن پس انتخاب کاربر، حتی خاموش، برنده است.

GOFILE_FOLDER_ID

#

نوع: str/bsetting › Config Variables

پوشه‌ای از حساب Gofile که آپلودها در آن قرار می‌گیرند.

اگر تنظیم شود، فایل‌ها مستقیم در این پوشه آپلود می‌شوند (برای آپلود پوشه، زیرپوشه‌ها داخل آن بازسازی می‌شوند و پوشهٔ جداگانه‌ای برای هر کار ساخته نمی‌شود). ربات این پوشه را عمومی نمی‌کند. اگر خالی باشد، فایل‌ها در ریشهٔ حساب یا پوشه‌ای که خودکار ساخته می‌شود قرار می‌گیرند.

برای آپلود پوشه، لینک نهایی به شکل https://gofile.io/d/<GOFILE_FOLDER_ID> ساخته می‌شود. کاربر می‌تواند در Gofile Tools پوشهٔ خودش را بگذارد.

مثال در config.py

GOFILE_FOLDER_ID = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

PIXELDRAIN_KEY

#

نوع: str/bsetting › Config Variables

کلید API حساب PixelDrain برای آپلود.

آپلود در سرویس‌های آپلود مستقیم فقط با دستور /uphoster (یا /up) انجام می‌شود و هر کاربر سرویس‌هایش را در /usetting ← Uphoster Settings ← Change Destination ⇋ انتخاب می‌کند (پیش‌فرض Gofile). اگر PixelDrain انتخاب شده باشد و نه کاربر کلید داشته باشد و نه این متغیر پر باشد، کار با No PixelDrain Key Found! رد می‌شود. آپلود پوشه به کلید نیاز دارد و نتیجه به‌صورت یک لیست PixelDrain برگردانده می‌شود.

کاربر می‌تواند در Uphoster Settings ← PixelDrain Tools ← PixelDrain Key کلید خودش را بگذارد. توجه: این کلید در صفحهٔ مربوط به همین سرویس در /usetting برای کاربرانی که کلید خودشان را نگذاشته‌اند به‌صورت متن ساده نمایش داده می‌شود.

مثال در config.py

PIXELDRAIN_KEY = "0a1b2c3d-4e5f-6789-abcd-ef0123456789"

VIKINGFILE_FOLDER

#

نوع: str/bsetting › Config Variables

نام یا مسیر پوشه در VikingFile برای آپلودها.

برخلاف توضیح داخل ربات، این مقدار نام یا مسیر پوشه است نه شناسه. برای تک‌فایل همین مسیر و برای آپلود پوشه مسیر <VIKINGFILE_FOLDER>/<folder>/<subdirs> استفاده می‌شود. اگر خالی باشد، فقط ساختار خود پوشه حفظ می‌شود.

کاربر می‌تواند در VikingFile Tools مسیر خودش را بگذارد.

مثال در config.py

VIKINGFILE_FOLDER = "Uploads/Bot"

VIKINGFILE_HASH

#

نوع: str/bsetting › Config Variables

هش کاربری حساب VikingFile برای آپلود.

آپلود در سرویس‌های آپلود مستقیم فقط با دستور /uphoster (یا /up) انجام می‌شود و هر کاربر سرویس‌هایش را در /usetting ← Uphoster Settings ← Change Destination ⇋ انتخاب می‌کند (پیش‌فرض Gofile). اگر خالی باشد، آپلود به‌صورت ناشناس (بدون حساب) انجام می‌شود و فقط هشداری در لاگ ثبت می‌شود. اگر بیش از یک فایل باشد، لینک‌ها در یک صفحهٔ Telegraph فهرست می‌شوند.

کاربر می‌تواند در VikingFile Tools هش خودش را بگذارد. توجه: این کلید در صفحهٔ مربوط به همین سرویس در /usetting برای کاربرانی که کلید خودشان را نگذاشته‌اند به‌صورت متن ساده نمایش داده می‌شود.

مثال در config.py

VIKINGFILE_HASH = "abcdef0123456789abcdef0123456789"

دانلودها و سرویس‌های دانلود

تورنت، Mega، JDownloader، Seedr، Usenet، دبریدها، yt-dlp و کلیدهای لازم برای تولید لینک مستقیم.

ALLDEBRID_API_KEY

#

نوع: str/bsetting › Config Variables

کلید API سرویس AllDebrid برای آرگومان -ad.

فقط وقتی کاری آرگومان -ad داشته باشد استفاده می‌شود. لینک‌های فایل‌هاست (مثل 1fichier یا rapidgator) با AllDebrid باز و به لینک مستقیم تبدیل می‌شوند. مگنت‌ها و فایل‌های .torrent به AllDebrid فرستاده می‌شوند، ربات تا پایان دانلود در آنجا صبر می‌کند (حداکثر ۲ ساعت) و بعد فایل‌ها را مستقیم از سرورهای AllDebrid می‌گیرد؛ Aria2 و qBittorrent دور زده می‌شوند. اگر کار شکست بخورد، مگنت از تاریخچهٔ AllDebrid حذف می‌شود.

بدون کلید، کار با ALLDEBRID_API_KEY is not configured متوقف می‌شود و بدون -ad هیچ چیز عوض نمی‌شود. نکته: -ad روی لینک‌های Mega، JDownloader، NZB، -seedr، گوگل درایو و Rclone اثری ندارد و مگنت‌های -ad با DISABLE_TORRENTS مسدود نمی‌شوند.

مثال در config.py

ALLDEBRID_API_KEY = "abcdefABCDEF0123456789"

ALLDEBRID_NO_SEED_TIMEOUT

#

نوع: intپیش‌فرض: 180/bsetting › Config Variables

حداکثر ثانیه‌هایی که مگنتِ -ad بدون سیدر و بدون پیشرفت می‌تواند بماند.

اگر AllDebrid در حال دانلود باشد، سیدری نباشد و حجم دانلودشده این مدت بیشتر نشود، کار با خطای no-seed لغو می‌شود؛ هر تغییری زمان‌سنج را از نو شروع می‌کند. 0 این بررسی را خاموش می‌کند و فقط سقف ثابت ۲ ساعته باقی می‌ماند.

/bsetting فقط عدد صحیح صفر یا بزرگ‌تر را قبول می‌کند. بدون DATABASE_URL، مقدار 0 در config.py نادیده گرفته می‌شود؛ در این حالت از متغیر محیطی یا /bsetting استفاده کنید.

مثال در config.py

ALLDEBRID_NO_SEED_TIMEOUT = 300

FILELION_API

#

نوع: str/bsetting › Config Variables

کلید API سرویس FileLions برای ساختن لینک مستقیم دانلود.

برای لینک‌های FileLions (مثل filelions.to، filelions.live و دامنه‌های مشابه) استفاده می‌شود تا لینک مستقیم فایل گرفته شود. بدون کلید، دانلود این لینک‌ها با خطای API is not provided متوقف می‌شود.

کیفیت را با افزودن _o، _h، _n یا _l به انتهای لینک انتخاب کنید؛ بدون آن، پیام خطا کیفیت‌های موجود را فهرست می‌کند. این کلید فقط برای دانلود است و ربطی به آپلود ندارد.

مثال در config.py

FILELION_API = "123456abcdef7890"

HYDRA_API_KEY

#

نوع: str/bsetting › Config Variables

کلید API سرور NZBHydra.

همراه HYDRA_IP برای جست‌وجوی /nzbsearch و دریافت NZB با شناسهٔ Hydra استفاده می‌شود. ربات خودش فایل NZB را دانلود می‌کند تا کلید به SABnzbd نرسد. گزینهٔ جداگانه‌ای برای کاربران ندارد.

مثال در config.py

HYDRA_API_KEY = "ABCDEF0123456789ABCDEF0123456789"

HYDRA_IP

#

نوع: str/bsetting › Config Variables

آدرس کامل سرور NZBHydra برای جست‌وجو و دانلود NZB.

برخلاف نامش، باید آدرس کامل همراه پروتکل و پورت باشد (مثل http://host:5076). افزونهٔ nzb_search با دستور /nzbsearch در NZBHydra جست‌وجو می‌کند و نتیجه را با شناسهٔ هر NZB در یک صفحهٔ Telegraph نشان می‌دهد.

در /nzbmirror، /nzbleech و /uphoster اگر آرگومان اول یک شناسهٔ ساده (نه لینک) باشد، ربات آن را شناسهٔ Hydra فرض می‌کند و لینک دانلود NZB را از این آدرس می‌سازد. توجه: این لینک همراه HYDRA_API_KEY در لاگ ربات نوشته می‌شود.

مثال در config.py

HYDRA_IP = "http://192.168.1.10:5076"

INSTADL_API

#

نوع: str/bsetting › Config Variables

آدرس پایهٔ API دانلود ویدیوی اینستاگرام.

برخلاف توضیح داخل ربات، این یک آدرس است نه کلید. برای لینک‌های instagram.com، ربات /api/video?postUrl=... را روی این آدرس صدا می‌زند و لینک ویدیو را از پاسخ برمی‌دارد. اگر خالی باشد، از سرویس پیش‌فرض https://instagramcdn.vercel.app استفاده می‌شود.

فقط پست‌های ویدیویی کار می‌کنند. آدرس را بدون / پایانی بنویسید.

مثال در config.py

INSTADL_API = "https://insta-api.example.com"

JD_EMAIL

#

نوع: str/bsetting › Config Variables

ایمیل حساب MyJDownloader برای راه‌اندازی JDownloader.

این‌ها اطلاعات حساب MyJDownloader هستند، نه حساب‌های پریمیوم فایل‌هاست‌ها. اگر JD_EMAIL یا JD_PASS خالی باشد، JDownloader اصلاً اجرا نمی‌شود. دستورهای /jdmirror و /jdleech فقط وقتی هر دو پر باشند در منوی دستورها قرار می‌گیرند.

ویرایش این مقدار در /bsetting JDownloader را دوباره راه‌اندازی می‌کند، حتی اگر DISABLE_JD روشن باشد. دکمهٔ JDownloader Sync در /bsetting هم به هر دو نیاز دارد.

مثال در config.py

JD_EMAIL = "user@example.com"

JD_PASS

#

نوع: str/bsetting › Config Variables

رمز حساب MyJDownloader که همراه JD_EMAIL استفاده می‌شود.

همراه JD_EMAIL برای راه‌اندازی JDownloader لازم است. ویرایشش در /bsetting JDownloader را دوباره راه‌اندازی می‌کند و Reset آن JDownloader را متوقف می‌کند. اگر رمز فقط عدد باشد، /bsetting آن را عدد ذخیره می‌کند.

مثال در config.py

JD_PASS = "MyJDPassword"

MEGA_EMAIL

#

نوع: str/bsetting › Config Variables

ایمیل حساب Mega برای دانلود از لینک‌های Mega.

اگر MEGA_EMAIL و MEGA_PASSWORD هر دو پر باشند، ربات پیش از دانلود لینک‌های Mega با این حساب وارد می‌شود (برای فایل‌ها و پوشه‌ها)؛ در غیر این صورت دانلود ناشناس انجام می‌شود.

کاربر می‌تواند در /usetting ← Mirror Settings ← Mega Tools حساب خودش را بگذارد که بر این مقدار اولویت دارد. نکته: آپلود در Mega (-up mega) و کلون Mega فقط از حساب شخصی کاربر استفاده می‌کنند، نه این متغیر.

مثال در config.py

MEGA_EMAIL = "user@example.com"

MEGA_PASSWORD

#

نوع: str/bsetting › Config Variables

رمز حساب Mega که همراه MEGA_EMAIL استفاده می‌شود.

همراه MEGA_EMAIL برای ورود به Mega پیش از دانلود به کار می‌رود؛ اگر یکی از این دو خالی باشد، دانلود ناشناس انجام می‌شود. کاربر می‌تواند در Mega Tools رمز خودش را بگذارد.

مثال در config.py

MEGA_PASSWORD = "MyMegaPassword"

SEEDR_DELETE_FOLDER

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

پاک کردن پوشهٔ تورنت از Seedr بعد از دانلود روی سرور.

وقتی روشن است، بعد از اینکه کار -seedr فایل‌ها را روی سرور دانلود کرد، پوشه از حساب Seedr پاک می‌شود تا فضا آزاد بماند. در صورت خطا یا لغو، پوشه همیشه پاک می‌شود. /seedrlink پوشه را نگه می‌دارد تا لینک‌ها معتبر بمانند.

کاربر می‌تواند در Seedr Tools آن را برای خودش روشن یا خاموش کند.

SEEDR_EMAIL

#

نوع: str/bsetting › Config Variables

ایمیل حساب Seedr برای آرگومان -seedr و دستور /seedrlink.

با -seedr مگنت یا لینک تورنت به حساب Seedr.cc فرستاده می‌شود، ربات صبر می‌کند تا Seedr آن را دانلود کند و بعد فایل‌ها را با HTTP از Seedr می‌گیرد؛ برای تورنت‌هایی که روی سرور کند یا مسدودند مفید است. بدون حساب، کار رد می‌شود. -seedr با DISABLE_TORRENTS مسدود نمی‌شود.

کاربر می‌تواند در /usetting ← Mirror Settings ← Seedr Tools حساب خودش را بگذارد؛ ابزارهای Seedr Tools (مثل پاک کردن فضای حساب) فقط با حساب خود کاربر کار می‌کنند.

مثال در config.py

SEEDR_EMAIL = "user@example.com"

SEEDR_PASSWORD

#

نوع: str/bsetting › Config Variables

رمز حساب Seedr که همراه SEEDR_EMAIL استفاده می‌شود.

هر کدام از SEEDR_EMAIL و SEEDR_PASSWORD جداگانه از مقدار کاربر یا همین متغیر گرفته می‌شود. کاربر می‌تواند در Seedr Tools رمز خودش را بگذارد.

مثال در config.py

SEEDR_PASSWORD = "MySeedrPassword"

STREAMWISH_API

#

نوع: str/bsetting › Config Variables

کلید API سرویس StreamWish برای ساختن لینک مستقیم دانلود.

برخلاف توضیح داخل ربات، فقط برای دانلود است: لینک‌های StreamWish و دامنه‌های وابسته (مثل streamwish.to، embedwish.com و wishfast.top) با این کلید به لینک مستقیم تبدیل می‌شوند. بدون کلید، دانلود با خطای API is not provided متوقف می‌شود.

انتخاب کیفیت مثل FILELION_API با پسوندهای _o، _h، _n و _l در انتهای لینک است.

مثال در config.py

STREAMWISH_API = "123456abcdef7890"

TORRENT_TIMEOUT

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

زمان (ثانیه) پیش از اینکه تورنت مرده (بدون پیشرفت) لغو شود؛ 0 یعنی خاموش.

در Aria2 به‌صورت گزینهٔ bt-stop-timeout روی هر دانلود گذاشته می‌شود: اگر سرعت این‌قدر ثانیه صفر بماند، دانلود متوقف و پیام Dead torrent! فرستاده می‌شود. در qBittorrent، تورنتی که این مدت در حال گرفتن متادیتا باشد، یا این مدت گیر کرده باشد (stalled)، حذف و مرده اعلام می‌شود.

ویرایش در /bsetting بلافاصله روی دانلودهای فعال Aria2 هم اعمال می‌شود؛ فقط عدد صحیح بنویسید. گزینهٔ جداگانه‌ای برای کاربران ندارد.

مثال در config.py

TORRENT_TIMEOUT = 1800

USENET_SERVERS

#

نوع: listپیش‌فرض: []/bsetting › Config Variables

فهرست سرورهای Usenet برای دانلود NZB با SABnzbd.

لیستی از دیکشنری‌ها با همان کلیدهای config_sample.py: name، host، port، timeout، username، password، connections، ssl، ssl_verify، ssl_ciphers، enable، required، optional، retention، send_group و priority. سرورها مستقیم به SABnzbd داده می‌شوند. اگر host اولین سرور خالی باشد، کل فهرست نادیده گرفته می‌شود؛ پس نمونهٔ خالی config_sample.py یعنی هیچ سروری.

در /bsetting هر سرور باید name، host، username و password داشته باشد. راحت‌تر است سرورها را از Sabnzbd Settings ← Servers اضافه، ویرایش یا حذف کنید. بدون سرور، کارهای NZB با Set USENET_SERVERS in bsetting or config! متوقف می‌شوند و دستورهای /nzbmirror و /nzbleech به منوی دستورها اضافه نمی‌شوند.

مثال در config.py

USENET_SERVERS = [{"name": "main", "host": "news.example.com", "port": 563, "username": "user", "password": "pass", "connections": 8, "ssl": 1}]

YT_DLP_OPTIONS

#

نوع: dictپیش‌فرض: {}/bsetting › Config Variables

گزینه‌های پیش‌فرض yt-dlp به‌صورت دیکشنری پایتون.

دیکشنری‌ای از گزینه‌های API کتابخانهٔ yt-dlp، مثل {"format": "bv*+ba", "writesubtitles": True}. برخلاف توضیح داخل ربات، قالب key:value|key:value کار نمی‌کند: در متغیر محیطی، پایگاه داده و /bsetting بی‌صدا نادیده گرفته می‌شود و در config.py بدون پایگاه داده کار را با خطا متوقف می‌کند.

اگر format داشته باشد، دکمه‌های انتخاب کیفیت نشان داده نمی‌شوند (مگر با -s). اولویت: آرگومان -opt، سپس YT-DLP Options کاربر در /usetting ← YT-DLP Settings، سپس همین متغیر؛ دیکشنری‌ها با هم ترکیب نمی‌شوند. فقط در /ytdl و /ytdlleech استفاده می‌شود.

مثال در config.py

YT_DLP_OPTIONS = {"format": "bv*[height<=1080]+ba/b", "writesubtitles": True}

محدودیت‌ها و صف

سقف حجم هر نوع دانلود، فضای آزاد لازم روی دیسک، صف کارها و تعداد کارهای هم‌زمان.

ARCHIVE_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم کارهایی که فشرده می‌شوند (آرگومان -z).

حجم منبع دانلود (نه حجم فایل zip نهایی) با این عدد مقایسه می‌شود.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند. برای کارهای لیچ، اگر LEECH_LIMIT غیرصفر باشد این محدودیت بررسی نمی‌شود.

مثال در config.py

ARCHIVE_LIMIT = 20

BOT_MAX_TASKS

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

حداکثر تعداد کل کارهای ربات (شامل کارهای صف) برای پذیرش کار جدید.

اگر تعداد همهٔ کارهای ربات (در حال اجرا، در صف، در حال پردازش یا سید) به این عدد رسیده باشد، کار جدید کاربران عادی رد می‌شود. 0 یعنی بدون محدودیت.

مالک و سودوها از این محدودیت معاف‌اند و می‌توانند تعداد کارها را از این سقف بالاتر ببرند. در کارهای چندتایی (-i) و گروهی (-b) این بررسی برای هر آیتم دوباره انجام می‌شود و ممکن است زنجیره وسط کار قطع شود.

مثال در config.py

BOT_MAX_TASKS = 10

CLONE_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم کلون گوگل درایو با دستور /clone.

حجم فایل یا پوشهٔ درایو پیش از شروع کلون شمرده و با این عدد مقایسه می‌شود. کلون‌های Rclone و کلون پیام‌های تلگرام شامل این محدودیت نمی‌شوند.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

اگر GD_DL_LIMIT غیرصفر باشد، کلونِ یک لینک درایو با آن سنجیده می‌شود نه با این متغیر. برای کلون‌ها STORAGE_LIMIT هم بررسی نمی‌شود.

مثال در config.py

CLONE_LIMIT = 200

DIRECT_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلود لینک‌های مستقیم، و محدودیت جایگزین برای هر دانلودی که محدودیت اختصاصی‌اش صفر است.

این آخرین محدودیت در فهرست بررسی است و شرطش همیشه برقرار است؛ پس لینک‌های HTTP معمولی، خروجی تولیدکنندهٔ لینک مستقیم، نتیجهٔ آرگومان -ad و شناسه‌های خام گوگل درایو (بدون لینک) با همین عدد سنجیده می‌شوند. هر نوع دانلود دیگری هم که محدودیت مخصوص خودش (مثل TORRENT_LIMIT) صفر باشد، به این محدودیت می‌رسد.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند. فایل‌ها و لینک‌های تلگرامی اصلاً بررسی نمی‌شوند.

اگر یک محدودیت اختصاصی غیرصفر (مثلاً TORRENT_LIMIT) به کار بخورد، DIRECT_LIMIT برای آن کار دیگر بررسی نمی‌شود، حتی اگر حجم زیر آن سقف بوده باشد.

مثال در config.py

DIRECT_LIMIT = 50

EXTRACT_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم کارهایی که از حالت فشرده خارج می‌شوند (آرگومان -e).

حجم فایل فشرده‌ای که دانلود می‌شود (نه حجم محتوای استخراج‌شده) با این عدد مقایسه می‌شود.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند. فقط وقتی بررسی می‌شود که LEECH_LIMIT (برای لیچ) و ARCHIVE_LIMIT (همراه -z) زودتر به کار نخورده باشند.

مثال در config.py

EXTRACT_LIMIT = 20

GD_DL_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلود از لینک‌های گوگل درایو.

فقط لینک‌هایی که drive.google.com یا drive.usercontent.google.com دارند شامل این محدودیت می‌شوند؛ شناسهٔ خام درایو (بدون لینک) با DIRECT_LIMIT سنجیده می‌شود.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

نکته: این محدودیت در فهرست بررسی پیش از CLONE_LIMIT است؛ پس اگر مقدارش غیرصفر باشد، کلونِ یک لینک درایو با همین عدد سنجیده می‌شود و CLONE_LIMIT نادیده گرفته می‌شود.

مثال در config.py

GD_DL_LIMIT = 50

JD_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلودهای JDownloader.

برای دستورهای /jdmirror و /jdleech به کار می‌رود. حجم، مجموع حجم بسته‌هایی است که JDownloader پیدا کرده و پیش از شروع دانلود بررسی می‌شود.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

نکته: محدودیت‌های منبع به ترتیب TORRENT، MEGA، GD_DL، CLONE، JD، NZB، SEEDR، RC_DL، YTDLP، PLAYLIST و در آخر DIRECT بررسی می‌شوند و ربات فقط اولین محدودیتِ غیرصفری را که به کار می‌خورد می‌سنجد؛ اگر این محدودیت 0 باشد، کار با DIRECT_LIMIT سنجیده می‌شود.

مثال در config.py

JD_LIMIT = 30

LEECH_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم کارهای لیچ (ارسال در تلگرام).

این محدودیت علاوه بر محدودیت منبع و فقط برای کارهای لیچ (از جمله /ytdlleech) بررسی می‌شود و حجم دانلود را می‌سنجد.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

اگر این محدودیت غیرصفر باشد، برای کارهای لیچ ARCHIVE_LIMIT و EXTRACT_LIMIT دیگر بررسی نمی‌شوند.

مثال در config.py

LEECH_LIMIT = 20

MEGA_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلود از لینک‌های Mega.

برای لینک‌هایی با دامنهٔ mega.nz یا mega.co.nz به کار می‌رود و پیش از شروع دانلود بررسی می‌شود. اگر Mega حجم را گزارش نکند، بررسی رد نمی‌شود.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

نکته: محدودیت‌های منبع به ترتیب TORRENT، MEGA، GD_DL، CLONE، JD، NZB، SEEDR، RC_DL، YTDLP، PLAYLIST و در آخر DIRECT بررسی می‌شوند و ربات فقط اولین محدودیتِ غیرصفری را که به کار می‌خورد می‌سنجد؛ اگر این محدودیت 0 باشد، کار با DIRECT_LIMIT سنجیده می‌شود.

مثال در config.py

MEGA_LIMIT = 20

NZB_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلودهای Usenet (SABnzbd).

برای دستورهای /nzbmirror و /nzbleech به کار می‌رود. حجم بعد از اضافه شدن کار به SABnzbd بررسی می‌شود و اگر از سقف بیشتر باشد، کار از SABnzbd حذف می‌شود.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

مثال در config.py

NZB_LIMIT = 50

PLAYLIST_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

حداکثر تعداد آیتم‌های پلی‌لیست در دانلودهای yt-dlp.

این محدودیت تعداد است نه حجم. تعداد کل آیتم‌هایی که yt-dlp برای پلی‌لیست گزارش می‌دهد با این عدد مقایسه می‌شود و اگر برابر یا بیشتر باشد، کار رد می‌شود؛ یعنی مقدار 10 حداکثر ۹ آیتم را اجازه می‌دهد. 0 یعنی بدون محدودیت.

فقط وقتی بررسی می‌شود که YTDLP_LIMIT صفر باشد. مالک و سودوها معاف‌اند.

مثال در config.py

PLAYLIST_LIMIT = 25

QUEUE_ALL

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

حداکثر تعداد کارهایی که هم‌زمان در مرحلهٔ دانلود یا آپلود هستند.

مجموع کارهای در حال دانلود و در حال آپلود از این عدد بیشتر نمی‌شود و کارهای اضافه در صف می‌مانند. 0 یعنی بدون صف. وقتی این متغیر فعال است، جای کار در صف دانلود تا پایان پردازش‌های بعدی (استخراج، FFmpeg، تکه کردن) نگه داشته می‌شود.

اگر QUEUE_DOWNLOAD یا QUEUE_UPLOAD هم تنظیم شده باشد، کار جدیدِ آن مرحله فقط وقتی به صف می‌رود که سقف همان مرحله پر شده باشد، اما کارهای صف فقط تا وقتی آزاد می‌شوند که مجموع کمتر از QUEUE_ALL باشد.

با آرگومان‌های -f، -fd، -fu یا دستور /forcestart می‌توان صف را دور زد. تغییر این مقدار در /bsetting بلافاصله صف را دوباره بررسی می‌کند.

مثال در config.py

QUEUE_ALL = 4

QUEUE_DOWNLOAD

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

حداکثر تعداد دانلودهای هم‌زمان؛ بقیه در صف می‌مانند.

همهٔ دانلودکننده‌ها (Aria2، qBittorrent، SABnzbd، لینک مستقیم، گوگل درایو، Mega، Rclone، JDownloader، Seedr، تلگرام و yt-dlp) پیش از شروع این سقف را بررسی می‌کنند. 0 یعنی بدون محدودیت.

کاری که در صف است همچنان در فهرست کارها حساب می‌شود و در BOT_MAX_TASKS و USER_MAX_TASKS شمرده می‌شود. با -f یا -fd یا /forcestart می‌توان صف را دور زد. تغییر مقدار در /bsetting بلافاصله اعمال می‌شود.

مثال در config.py

QUEUE_DOWNLOAD = 3

QUEUE_UPLOAD

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

حداکثر تعداد آپلودهای هم‌زمان؛ بقیه در صف می‌مانند.

وقتی دانلود و پردازش یک کار تمام شد، پیش از آپلود این سقف بررسی می‌شود. 0 یعنی بدون محدودیت. کلون پیام‌های تلگرام هم از این صف استفاده می‌کند، ولی کلون‌های گوگل درایو و Rclone صف را دور می‌زنند.

با -f یا -fu یا /forcestart می‌توان صف را دور زد. تغییر مقدار در /bsetting بلافاصله اعمال می‌شود.

مثال در config.py

QUEUE_UPLOAD = 3

RC_DL_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلود از مسیرهای Rclone.

وقتی منبع یک مسیر Rclone باشد (مثل remote:path، mrcc:remote:path یا rcl)، حجمی که Rclone گزارش می‌دهد پیش از دانلود با این عدد مقایسه می‌شود.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند. کلون‌های Rclone شامل این محدودیت نمی‌شوند.

مثال در config.py

RC_DL_LIMIT = 50

SEEDR_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلودهایی که از طریق Seedr انجام می‌شوند.

برای کارهایی با آرگومان -seedr به کار می‌رود. حجم بعد از اینکه Seedr تورنت را در فضای ابری خودش دریافت کرد بررسی می‌شود؛ اگر بیشتر از سقف باشد، پوشه از Seedr پاک می‌شود و کار با خطا متوقف می‌شود. پس این محدودیت جلوی انتقال از Seedr به سرور را می‌گیرد، نه دانلود در خود Seedr را.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

مثال در config.py

SEEDR_LIMIT = 10

STORAGE_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

حداقل فضای آزادی که باید روی دیسک باقی بماند (گیگابایت).

پیش از شروع کار، ربات بررسی می‌کند که فضای آزاد پوشهٔ دانلود دست‌کم برابر با این مقدار به‌اضافهٔ حجم کار باشد؛ برای کارهای -z یا -e حجم کار دو برابر حساب می‌شود. اگر فضای کافی نباشد، کار با پیام Threshold Storage Limit رد می‌شود. 0 یعنی این بررسی خاموش است.

این بررسی فقط یک بار و در شروع انجام می‌شود و فضای دیسک در طول دانلود پایش نمی‌شود؛ حجمی هم که دانلودهای در حال اجرای دیگر هنوز می‌نویسند حساب نمی‌شود. برای کلون‌ها، فایل‌های تلگرامی و برای مالک و سودوها بررسی نمی‌شود.

مثال در config.py

STORAGE_LIMIT = 10

TORRENT_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلود تورنت‌ها و مگنت‌ها.

برای همهٔ کارهای qBittorrent (/qbmirror، /qbleech) و برای کارهای Aria2 که معلوم شود تورنت هستند به کار می‌رود. حجم بعد از رسیدن متادیتای تورنت بررسی می‌شود و اگر از سقف بیشتر باشد، تورنت حذف می‌شود. وقتی با -s فایل‌ها را انتخاب می‌کنید، بررسی تا زدن دکمهٔ پایان انتخاب عقب می‌افتد.

تورنت‌هایی که با -seedr از Seedr می‌گذرند با SEEDR_LIMIT و تورنت‌هایی که با -ad از AllDebrid می‌آیند با DIRECT_LIMIT سنجیده می‌شوند.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

مثال در config.py

TORRENT_LIMIT = 100

USER_MAX_TASKS

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

حداکثر تعداد کارهای هم‌زمان هر کاربر.

اگر کاربر به این تعداد کار (شامل کارهای صف و سید) داشته باشد، کار جدیدش رد می‌شود. 0 یعنی بدون محدودیت.

مالک و سودوها معاف‌اند. در کارهای -i و -b این بررسی برای هر آیتم دوباره انجام می‌شود.

مثال در config.py

USER_MAX_TASKS = 2

USER_TIME_INTERVAL

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

فاصلهٔ زمانی اجباری (ثانیه) بین دو کار پشت‌سرهم یک کاربر.

کاربر عادی بعد از ثبت یک کار باید این مدت صبر کند تا بتواند کار بعدی را شروع کند. 0 یعنی خاموش. زمان آخرین کار فقط در حافظه نگه داشته می‌شود و با ری‌استارت پاک می‌شود. مالک، سودوها و RSS_CHAT معاف‌اند.

نکته: آیتم‌های کارهای -i و -b با فاصلهٔ حدود ۷ ثانیه دوباره بررسی می‌شوند؛ اگر این مقدار بیشتر از حدود ۷ ثانیه باشد، برای کاربران عادی آیتم دوم به بعد رد می‌شود.

مثال در config.py

USER_TIME_INTERVAL = 60

YTDLP_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم دانلودهای yt-dlp.

برای /ytdl و /ytdlleech به کار می‌رود. حجم فقط برای پلی‌لیست‌ها از قبل معلوم است (مجموع حجم تقریبی آیتم‌ها)؛ برای یک ویدیوی تکی حجم در لحظهٔ بررسی صفر است و در عمل این محدودیت روی آن اثری ندارد.

عدد بر حسب گیگابایت است (هر گیگابایت ۱۰۲۴³ بایت) و 0 یعنی بدون محدودیت. اگر حجم کار به سقف برسد یا از آن بیشتر باشد، کار رد می‌شود. مالک ربات و سودوها از همهٔ محدودیت‌های حجمی معاف‌اند.

اگر این متغیر غیرصفر باشد، PLAYLIST_LIMIT دیگر بررسی نمی‌شود.

مثال در config.py

YTDLP_LIMIT = 10

ماژول‌ها (روشن/خاموش)

متغیرهای DISABLE_* که یک قابلیت کامل را خاموش می‌کنند. در /bsetting زیر Module Settings ← On/Off Settings هر کدام یک دکمه با نام بدون پیشوند DISABLE_ دارد و علامت ✓ کنار نام یعنی آن قابلیت روشن است (متغیر False است).

DISABLE_BULK

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن آرگومان -b (دانلود گروهی چند لینک).

برخلاف توضیح داخل ربات، ربطی به فشرده‌سازی ندارد: هر دستوری که -b داشته باشد با Bulk downloads are currently disabled. رد می‌شود. این محدودیت در /ytdl و /clone هم اعمال می‌شود. برای همه، حتی مالک و سودوها، اعمال می‌شود و تغییرش بلافاصله اثر دارد.

بازه‌های لینک تلگرام (مثل t.me/.../10-20) تحت تأثیر این گزینه نیستند.

DISABLE_FF_MODE

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن اجرای دستورهای FFmpeg با آرگومان -ff.

هر کاری که -ff داشته باشد با FFmpeg commands are currently disabled. رد می‌شود؛ هم در میرور و لیچ و هم در yt-dlp. برای همه، حتی مالک و سودوها، اعمال می‌شود و تغییرش بلافاصله اثر دارد.

تنظیمات FF Media Settings در /usetting پنهان نمی‌شوند و آرگومان‌هایی مثل -ca، -cv، -sv و متادیتا تحت تأثیر قرار نمی‌گیرند.

DISABLE_JD

#

نوع: boolپیش‌فرض: true/bsetting › Module Settings › On/Off Settings

خاموش کردن JDownloader برای صرفه‌جویی در حافظه.

وقتی روشن باشد، JDownloader هنگام راه‌اندازی اجرا نمی‌شود و /jdmirror و /jdleech با پیام JDownloader is currently disabled by the Bot Owner. رد می‌شوند؛ طبق توضیح داخل ربات حدود ۲۵۶ تا ۵۰۰ مگابایت RAM صرفه‌جویی می‌شود. روشن کردنش در On/Off Settings دانلودها را متوقف و فرایند Java را می‌بندد و خاموش کردنش JDownloader را دوباره راه‌اندازی می‌کند.

JDownloader به JD_EMAIL و JD_PASS هم نیاز دارد. نکته: پیش‌فرض داخل کد True (خاموش) است، هرچند config_sample.py و توضیح داخل ربات False نوشته‌اند. بدون DATABASE_URL، مقدار False در config.py نادیده گرفته می‌شود و قابلیت خاموش می‌ماند؛ در این حالت آن را از /bsetting یا متغیر محیطی روشن کنید.

DISABLE_LEECH

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن دستورهای لیچ (ارسال فایل در تلگرام).

دستورهای /leech، /qbleech، /jdleech و /nzbleech با پیام The Leech command is currently disabled. رد می‌شوند. برای همه، حتی مالک و سودوها، اعمال می‌شود و تغییرش بلافاصله اثر دارد.

/ytdlleech با این گزینه مسدود نمی‌شود (برای آن از DISABLE_YTDLP استفاده کنید) و دستورها در منوی تلگرام باقی می‌مانند.

DISABLE_MEGA

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن دانلود از لینک‌های Mega.

دانلود لینک‌های Mega با پیام Mega Link downloads are currently disabled by the Bot Owner. متوقف می‌شود. برای همه، حتی مالک و سودوها، اعمال می‌شود و تغییرش بلافاصله اثر دارد.

آپلود در Mega (-up mega) و کلون Mega را متوقف نمی‌کند.

DISABLE_MIRROR

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن دستورهای میرور (آپلود در فضای ابری).

دستورهای /mirror، /qbmirror، /jdmirror و /nzbmirror (از جمله حالت آپلود یوتیوب -yt) با پیام The Mirror command is currently disabled. رد می‌شوند. برای همه، حتی مالک و سودوها، اعمال می‌شود و تغییرش بلافاصله اثر دارد.

/uphoster، /ytdl و /clone شامل این محدودیت نمی‌شوند.

DISABLE_MULTI

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن آرگومان -i با عدد بزرگ‌تر از ۱ (چند فایل پشت‌سرهم).

برخلاف توضیح داخل ربات، ربطی به تکه کردن فایل ندارد: در دستورهای میرور و لیچ (و qBittorrent، JDownloader، NZB و /uphoster) استفاده از -i با عدد بیشتر از ۱ با پیام Multi-downloads are currently disabled. Please try without the -i flag. رد می‌شود. در /ytdl و /clone اعمال نمی‌شود. برای همه، حتی مالک و سودوها، اعمال می‌شود و تغییرش بلافاصله اثر دارد.

چون -b با چند لینک و بازه‌های لینک تلگرام هم در داخل از -i استفاده می‌کنند، این دو هم در دستورهای میرور و لیچ رد می‌شوند.

DISABLE_NZB

#

نوع: boolپیش‌فرض: true/bsetting › Module Settings › On/Off Settings

خاموش کردن SABnzbd و دانلودهای Usenet.

وقتی روشن باشد، SABnzbd هنگام راه‌اندازی اجرا نمی‌شود، /nzbmirror، /nzbleech و /nzbsearch رد می‌شوند و /uphoster با شناسهٔ Hydra هم کار نمی‌کند. روشن کردنش در On/Off Settings SABnzbd را متوقف می‌کند، اما خاموش کردنش فقط با ری‌استارت SABnzbd را برمی‌گرداند.

دانلود Usenet به USENET_SERVERS هم نیاز دارد. نکته: پیش‌فرض داخل کد True (خاموش) است، هرچند config_sample.py و توضیح داخل ربات False نوشته‌اند. بدون DATABASE_URL، مقدار False در config.py نادیده گرفته می‌شود و قابلیت خاموش می‌ماند؛ در این حالت آن را از /bsetting یا متغیر محیطی روشن کنید.

DISABLE_PLUGINS

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن سامانهٔ افزونه‌ها.

وقتی روشن باشد، هنگام راه‌اندازی هیچ افزونه‌ای بارگذاری نمی‌شود. روشن یا خاموش کردنش در On/Off Settings بلافاصله همهٔ افزونه‌ها را خارج یا دوباره بارگذاری می‌کند. افزونه‌های همراه ربات مثل imdb و nzb_search هم افزونه‌اند و با این گزینه از کار می‌افتند.

/plugins همچنان برای مرور (از جمله Marketplace) باز است، اما نصب، حذف، به‌روزرسانی و روشن و خاموش کردن افزونه‌ها با پیام Plugins are switched off in Module Settings. رد می‌شود. ورودی /plugins در منوی دستورها فقط اگر این گزینه هنگام راه‌اندازی روشن باشد حذف می‌شود.

DISABLE_RSS

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن پایش خوراک‌های RSS.

وقتی روشن باشد، زمان‌بند RSS اجرا نمی‌شود و /rss برای همه پیام RSS monitoring is currently disabled by the Bot Owner. می‌دهد. تغییر در On/Off Settings بلافاصله زمان‌بند را متوقف یا اجرا می‌کند.

DISABLE_SEED

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن سید کردن تورنت‌ها بعد از دانلود (آرگومان -d).

هر دستوری که -d داشته باشد با پیام Seeding is currently disabled. Please try without the -d flag. رد می‌شود. اثر دیگری ندارد. برای همه، حتی مالک و سودوها، اعمال می‌شود و تغییرش بلافاصله اثر دارد.

با DISABLE_SEEDR (سرویس Seedr) اشتباه نشود.

DISABLE_SEEDR

#

نوع: boolپیش‌فرض: true/bsetting › Module Settings › On/Off Settings

خاموش کردن دانلود از طریق Seedr (-seedr و /seedrlink).

وقتی روشن باشد، آرگومان -seedr و دستور /seedrlink با پیام Seedr is currently disabled by the Bot Owner. رد می‌شوند و دکمهٔ Seedr Tools در /usetting پنهان می‌شود. اینکه /seedrlink در منوی دستورها باشد یا نه فقط هنگام راه‌اندازی تعیین می‌شود.

نکته: پیش‌فرض داخل کد True (خاموش) است، هرچند config_sample.py و توضیح داخل ربات False نوشته‌اند. بدون DATABASE_URL، مقدار False در config.py نادیده گرفته می‌شود و قابلیت خاموش می‌ماند؛ در این حالت آن را از /bsetting یا متغیر محیطی روشن کنید.

DISABLE_STREAM

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن سرور استریم و دستور /stream.

وقتی روشن باشد، سرور استریم داخلی اجرا نمی‌شود، /stream (و حذف لینک با آن) پیام Streaming is disabled. می‌دهد و مسیرهای پخش و دانلود وب از دسترس خارج می‌شوند. تغییر در On/Off Settings بلافاصله سرور را متوقف یا اجرا می‌کند.

ربات‌های STREAM_TOKENS همچنان اجرا می‌شوند. نکته: پیام پایان لیچ ممکن است همچنان لینک‌های Stream و Download داشته باشد که در این حالت کار نمی‌کنند.

DISABLE_TORRENTS

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن کامل دانلود تورنت (qBittorrent و تورنت‌های Aria2).

وقتی روشن باشد، qBittorrent هنگام راه‌اندازی اجرا نمی‌شود، دستورهای /qbmirror و /qbleech خطا می‌دهند و Aria2 لینک‌هایی را که با magnet: شروع یا با .torrent تمام می‌شوند رد می‌کند. افزونه‌های جست‌وجوی qBittorrent هم نصب نمی‌شوند.

مگنت‌هایی که با -ad (AllDebrid) یا -seedr فرستاده شوند مسدود نمی‌شوند. تغییر این گزینه در حین کار qBittorrent را اجرا یا متوقف نمی‌کند؛ برای آن ری‌استارت لازم است.

DISABLE_YTDLP

#

نوع: boolپیش‌فرض: false/bsetting › Module Settings › On/Off Settings

خاموش کردن دانلود با yt-dlp (/ytdl و /ytdlleech).

دستورهای /ytdl و /ytdlleech و نام‌های کوتاهشان با پیام YT-DLP downloads are currently disabled by the Bot Owner. رد می‌شوند. بخش دیگری از ربات از yt-dlp استفاده نمی‌کند. برای همه، حتی مالک و سودوها، اعمال می‌شود و تغییرش بلافاصله اثر دارد.

رسانه، تصاویر و یوتیوب

پیش‌تنظیم‌های FFmpeg، قالب IMDb، تصاویر پس‌زمینهٔ پیام‌ها و مشخصات آپلود در یوتیوب.

FFMPEG_CMDS

#

نوع: dictپیش‌فرض: {}/bsetting › Config Variables

پیش‌تنظیم‌های دستور FFmpeg که کاربران با آرگومان -ff اجرا می‌کنند.

یک دیکشنری که هر کلید آن نام یک پیش‌تنظیم و مقدارش لیستی از دستورهای FFmpeg است. این دستورها خودکار اجرا نمی‌شوند؛ فقط وقتی کاربر -ff key بدهد، بعد از دانلود و استخراج و پیش از تکه کردن و آپلود روی فایل‌ها اجرا می‌شوند. برای چند پیش‌تنظیم، آرگومان را تکرار کنید (-ff a -ff b).

کلمهٔ ffmpeg را ننویسید و هر دستور باید -i داشته باشد. mltb به همهٔ فایل‌های ویدیو و صوتی اشاره می‌کند، mltb.video و mltb.audio بر اساس نوع رسانه و mltb.mkv فقط فایل‌های با آن پسوند را انتخاب می‌کند؛ نام خروجی که با mltb شروع شود با نام فایل ورودی جایگزین می‌شود. اگر -del در دستور باشد، فایل اصلی بعد از موفقیت پاک می‌شود.

اگر کاربر در /usetting ← FF Media Settings ← FFmpeg Cmds پیش‌تنظیم خودش را داشته باشد، به‌جای این مقدار استفاده می‌شود. مقدارهایی که لیست نباشند بی‌صدا کنار گذاشته می‌شوند. با روشن کردن DISABLE_FF_MODE استفاده از -ff ممنوع می‌شود.

مثال در config.py

FFMPEG_CMDS = {"subtitle": ["-i mltb.mkv -c copy -c:s srt mltb.mkv"], "mp3": ["-i mltb.audio -c:a libmp3lame -q:a 2 mltb.mp3 -del"]}

IMAGES

#

نوع: listپیش‌فرض: []/bsetting › Config Variables

فهرست تصاویری که با USE_IMAGES به‌عنوان پس‌زمینهٔ پیام‌های ربات استفاده می‌شوند.

هر آیتم آدرس یک تصویر یا file_id یک عکس تلگرامی است. وقتی USE_IMAGES روشن باشد، ربات برای پیام‌های /start، وضعیت، /stats و /count یکی را تصادفی انتخاب می‌کند.

معمولاً این فهرست را دستی پر نمی‌کنید: با /addimage (همراه لینک یا در پاسخ به یک عکس) تصویر اضافه کنید و با /images آن‌ها را ببینید یا حذف کنید. جست‌وجوی خودکار IMG_SEARCH هم تصاویر پیدا‌شده را به همین فهرست اضافه می‌کند. در config.py باید لیست پایتون باشد. Reset فهرست را خالی می‌کند.

مثال در config.py

IMAGES = ["https://example.com/wallpaper1.jpg", "https://example.com/wallpaper2.jpg"]

IMDB_TEMPLATE

#

نوع: str/bsetting › Config Variables

قالب HTML اختیاری برای نتیجهٔ دستور /imdb.

اگر خالی باشد، افزونهٔ IMDb نتیجه را به‌صورت پیام غنی (Rich Message) با جدول و بخش‌های تاشو می‌فرستد. اگر قالب بدهید، نتیجه به‌صورت عکس پوستر با کپشن HTML ساخته‌شده از قالب فرستاده می‌شود.

قالب با جای‌نگهدارهایی مثل {title}، {year}، {rating}، {genres}، {plot}، {url}، {cast}، {director} و {runtime} پر می‌شود. جای‌نگهدار ناشناخته خطا می‌دهد و آکولاد واقعی را باید {{ }} بنویسید. کپشن عکس در تلگرام محدود به ۱۰۲۴ نویسه است، پس قالب را کوتاه نگه دارید. این متغیر فقط وقتی اثر دارد که افزونه‌ها خاموش نباشند.

مثال در config.py

IMDB_TEMPLATE = "<b>{title}</b> ({year})\n⭐ {rating}\n🎭 {genres}\n\n{plot}\n<a href=\"{url}\">IMDb</a>"

IMG_PAGE

#

نوع: intپیش‌فرض: 1/bsetting › Config Variables

تعداد صفحه‌های نتیجه که برای هر کلیدواژهٔ IMG_SEARCH خوانده می‌شود.

هر صفحه حدود ۷۰ تصویر دارد و کمترین مقدار ۱ است. فقط روی منابع wallpaperflare و wallhaven اثر دارد و فقط هنگام راه‌اندازی خوانده می‌شود.

مثال در config.py

IMG_PAGE = 2

IMG_SOURCES

#

نوع: listپیش‌فرض: ["wallpaperflare"]/bsetting › Config Variables

منابعی که جست‌وجوی خودکار تصاویر از آن‌ها استفاده می‌کند.

لیستی از این مقدارها: wallpaperflare (جست‌وجو با کلیدواژه)، wallhaven (جست‌وجو با API و فقط تصاویر SFW) و peapix (تصاویر روزانهٔ Bing که کلیدواژه را نادیده می‌گیرد). مقدار غیرلیستی به پیش‌فرض برمی‌گردد.

فقط هنگام راه‌اندازی خوانده می‌شود. نکته: Reset در /bsetting فهرست را خالی می‌کند (یعنی هیچ منبعی)، نه اینکه به پیش‌فرض برگرداند.

مثال در config.py

IMG_SOURCES = ["wallpaperflare", "wallhaven"]

USE_IMAGES

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

فرستادن پیام‌های ربات همراه یک تصویر تصادفی.

وقتی روشن است و IMAGES خالی نیست، پیام‌های /start، وضعیت، /stats و /count به‌صورت عکس با کپشن فرستاده می‌شوند. کپشن عکس در تلگرام حداکثر ۱۰۲۴ نویسه است و متن طولانی‌تر بریده می‌شود.

روشن بودن آن جست‌وجوی خودکار تصاویر هنگام راه‌اندازی (IMG_SEARCH) را هم فعال می‌کند؛ اگر تصویر تازه‌ای پیدا شود، ربات STATUS_LIMIT را روی 2 می‌گذارد و ذخیره می‌کند.

YT_CATEGORY_ID

#

نوع: intپیش‌فرض: 22/bsetting › Config Variables

شناسهٔ دسته‌بندی یوتیوب برای ویدیوهای آپلودشده.

عدد دسته‌بندی یوتیوب است؛ پیش‌فرض 22 یعنی People & Blogs. ربات این مقدار را بررسی نمی‌کند و مستقیم به یوتیوب می‌فرستد.

کاربر می‌تواند در YT-DLP Settings ← YT Category ID عدد دیگری بگذارد.

مثال در config.py

YT_CATEGORY_ID = 10

YT_DESP

#

نوع: strپیش‌فرض: Uploaded with WZML-X bot/bsetting › Config Variables

توضیحات ویدیوهایی که ربات در یوتیوب آپلود می‌کند.

در آپلود یوتیوب (کار میرور با آرگومان -yt) در قسمت توضیحات ویدیو قرار می‌گیرد. برای آپلود پوشه، پلی‌لیستی ساخته می‌شود که همین توضیحات را دارد. آپلود یوتیوب به فایل token.pickle شخصی کاربر نیاز دارد.

کاربر می‌تواند در /usetting ← YT-DLP Settings ← YT Description مقدار خودش را بگذارد؛ اگر مقدار کاربر خالی باشد، این مقدار استفاده می‌شود. پیش‌فرض کد (Uploaded with WZML-X bot) با مقدار config_sample.py کمی فرق دارد.

مثال در config.py

YT_DESP = "Uploaded by my bot"

YT_PRIVACY_STATUS

#

نوع: strپیش‌فرض: unlisted/bsetting › Config Variables

وضعیت نمایش ویدیوها و پلی‌لیست‌هایی که در یوتیوب آپلود می‌شوند.

یکی از public (عمومی)، unlisted (فقط با لینک) یا private (خصوصی). برای آپلود پوشه، پلی‌لیست ساخته‌شده هم همین وضعیت را می‌گیرد. مقدار این متغیر بررسی نمی‌شود، پس دقیقاً یکی از همین سه را بنویسید.

کاربر می‌تواند در YT-DLP Settings ← YT Privacy Status مقدار خودش را بگذارد.

مثال در config.py

YT_PRIVACY_STATUS = "unlisted"

YT_TAGS

#

نوع: listپیش‌فرض: ["telegram","bot","youtube"]/bsetting › Config Variables

برچسب‌های ویدیوهایی که در یوتیوب آپلود می‌شوند.

لیستی از برچسب‌ها که روی ویدیو گذاشته می‌شود. در متغیر محیطی یا /bsetting می‌توانید آن‌ها را با ویرگول جدا کنید؛ اما بدون پایگاه داده، رشتهٔ ویرگولی در config.py به لیست تبدیل نمی‌شود، پس آنجا لیست پایتون بنویسید.

کاربر می‌تواند در YT-DLP Settings ← YT Tags برچسب‌های خودش را بگذارد. نکته: Reset در /bsetting لیست را خالی می‌کند، نه اینکه به پیش‌فرض برگرداند.

مثال در config.py

YT_TAGS = ["telegram", "bot", "mirror"]

سرعت انتقال، استریم، حافظه و CPU

تنظیمات فنی انتقال سریع فایل در تلگرام (HyperDL/HyperUP)، استریم، سقف حافظهٔ بافرها و تقسیم CPU بین FFmpeg و سرویس‌ها.

CPU_LIMIT

#

نوع: intپیش‌فرض: 20/bsetting › Module Settings › Limit Settings

سقف مصرف CPU برای SABnzbd و JDownloader (درصد).

این عدد با ابزار cpulimit روی SABnzbd و JDownloader اعمال می‌شود (۱۰۰ یعنی یک هستهٔ کامل). روی Aria2، qBittorrent، FFmpeg و خود ربات اثری ندارد. در /bsetting زیر Limit Settings با واحد % است.

SABnzbd فقط هنگام راه‌اندازی این مقدار را می‌گیرد؛ JDownloader در راه‌اندازی بعدی خودش (مثلاً با تغییر DISABLE_JD یا JD_EMAIL). برخلاف راهنمای صفحهٔ محدودیت‌ها، 0 به معنی نامحدود تعریف نشده و همان 0 به cpulimit داده می‌شود.

مثال در config.py

CPU_LIMIT = 50

FFMPEG_CORES

#

نوع: strپیش‌فرض: auto/bsetting › Config Variables

تعداد هسته‌های CPU که به FFmpeg داده می‌شود؛ بقیه برای سرویس‌ها می‌ماند.

مقدارهای مجاز: auto (۶۰٪ هسته‌ها)، all یا max (همهٔ هسته‌ها)، یک عدد مثل 5، یک درصد مثل 75%، یا فهرست هسته‌ها مثل 0-4 یا 0,1,2,3. همهٔ کارهای FFmpeg ربات (دستورهای -ff، تبدیل، نمونه‌ویدیو، اسکرین‌شات، تامبنیل و متادیتا) به همین هسته‌ها محدود می‌شوند و هسته‌های باقی‌مانده به Aria2، SABnzbd و JDownloader داده می‌شوند. با ۲ هسته یا کمتر این تقسیم انجام نمی‌شود.

نکته: عدد 0 در /bsetting به‌جای «همه»، خودکار حساب می‌شود؛ برای همهٔ هسته‌ها all بنویسید. سهم FFmpeg برای هر کار تازه خوانده می‌شود، اما تقسیم هسته‌های Aria2 و SABnzbd فقط هنگام راه‌اندازی انجام می‌شود.

مثال در config.py

FFMPEG_CORES = "75%"

HYPER_CHUNK

#

نوع: intپیش‌فرض: 524288/bsetting › Config Variables

اندازهٔ هر درخواست دریافت فایل در HyperDL، به بایت.

پیش‌فرض 524288 (۵۱۲ کیلوبایت) است، 0 یعنی 262144 و کمترین مقدار 65536. کد سقف بالایی اعمال نمی‌کند؛ عددی توانی از ۲ و حداکثر 1048576 (۱ مگابایت) انتخاب کنید.

فقط روی دانلود HyperDL اثر دارد، نه آپلود یا استریم.

مثال در config.py

HYPER_CHUNK = 1048576

HYPER_PIPELINE

#

نوع: intپیش‌فرض: 4/bsetting › Config Variables

تعداد درخواست‌های هم‌زمان دریافت فایل در HyperDL.

پنجرهٔ شروع هر بخش برابر با این عدد تقسیم بر تعداد بخش‌هاست، اما هیچ‌وقت کمتر از ۴ نمی‌شود؛ پس با پیش‌فرض 4 هر بخش ۴ درخواست هم‌زمان دارد و 0 یعنی ۳۲. پنجره با موفقیت درخواست‌ها تا ۴ برابر بزرگ می‌شود و با خطای Flood یا تایم‌اوت کوچک می‌شود.

هر درخواست در حال اجرا به اندازهٔ HYPER_CHUNK از MEM_BUDGET حافظه رزرو می‌کند. تغییر بلافاصله اعمال می‌شود.

مثال در config.py

HYPER_PIPELINE = 8

HYPER_THREADS

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

تعداد بخش‌های موازی هر دانلود HyperDL؛ 0 یعنی خودکار.

هر بخش با یک کلاینت جدا دانلود می‌شود، پس عدد بزرگ‌تر از تعداد کلاینت‌های مناسب فایده‌ای ندارد. مقدار مؤثر کمترین مقدار بین این عدد، تعداد کلاینت‌های مجاز برای حالت انتقال و تعداد مگابایت‌های فایل است؛ فایل‌های کوچک‌تر از ۱ مگابایت یک بخشی‌اند. در حالت خودکار، تعداد بر اساس تعداد CPU و کلاینت‌ها انتخاب می‌شود.

این عدد HYPER_PIPELINE را هم بین بخش‌ها تقسیم می‌کند. تغییر برای دانلود بعدی اعمال می‌شود.

مثال در config.py

HYPER_THREADS = 4

MEM_BUDGET

#

نوع: intپیش‌فرض: 0/bsetting › Config Variables

سقف حافظه (مگابایت) برای بافرهای در حال انتقال HyperDL؛ 0 یعنی خودکار.

وقتی بافرهای HyperDL به این سقف برسند، درخواست‌های تازه صبر می‌کنند (در /memory به‌صورت انتظار شمرده می‌شود). در حالت خودکار، ۱۵٪ سقف حافظهٔ کانتینر (یا کل RAM) با حداقل ۴۸ و حداکثر ۵۱۲ مگابایت در نظر گرفته می‌شود؛ مقداری که خودتان بدهید محدود نمی‌شود.

یک بار محاسبه و ذخیره می‌شود، پس تغییرش ری‌استارت می‌خواهد. روی استریم و دانلودهای عادی اثری ندارد.

مثال در config.py

MEM_BUDGET = 256

MEM_DEEP_STATS

#

نوع: boolپیش‌فرض: false/bsetting › Config Variables

نمایش تعداد اشیای حافظه در جزئیات /memory.

وقتی روشن باشد، هر گزارش /memory یک پیمایش کامل حافظهٔ پایتون انجام می‌دهد و بخش جزئیات تعداد اشیای ردیابی‌شده را نشان می‌دهد. این پیمایش برای هر بار باز کردن /memory هزینه دارد، پس فقط برای عیب‌یابی روشنش کنید. /memory فقط برای سودوهاست.

STREAM_CHUNK

#

نوع: intپیش‌فرض: 1048576/bsetting › Config Variables

اندازهٔ تکه‌ها در لینک‌های دانلود سرور استریم، به بایت.

بین 4096 و 1048576 محدود می‌شود و 0 یعنی 1048576. برای لینک‌های دانلود /dl و بررسی فایل به کار می‌رود؛ پخش‌کنندهٔ /stream اندازهٔ تکه‌های خودش را دارد و از این مقدار استفاده نمی‌کند. عددی توانی از ۲ بهتر است.

در اولین درخواست استریم خوانده و ذخیره می‌شود؛ تغییرش ری‌استارت می‌خواهد.

مثال در config.py

STREAM_CHUNK = 524288

STREAM_GATE

#

نوع: intپیش‌فرض: 96/bsetting › Config Variables

سقف کلی درخواست‌های هم‌زمان دریافت فایل در سرور استریم.

همهٔ ترافیک سرور استریم (پخش، دانلود و بررسی فایل) از این دروازه رد می‌شود. کمترین مقدار ۸ است و 0 یعنی ۹۶. برخلاف توضیح داخل ربات، HyperDL و دانلودهای معمولی را محدود نمی‌کند.

در اولین درخواست استریم خوانده و ذخیره می‌شود؛ تغییرش ری‌استارت می‌خواهد.

مثال در config.py

STREAM_GATE = 64

STREAM_PER_CLIENT

#

نوع: intپیش‌فرض: 6/bsetting › Config Variables

حداکثر پخش هم‌زمان برای هر ربات استریم.

اگر بینندگان هم‌زمان زیادی دارید آن را بیشتر کنید و اگر تلگرام خطای Flood می‌دهد کمتر. کمترین مقدار ۱ است و 0 یعنی ۶. لینک‌های دانلود و بررسی فایل سقف ثابت ۲ دارند، اما بار همه با هم برای هر ربات شمرده می‌شود. وقتی همهٔ ربات‌ها پر باشند، درخواست با خطا رد می‌شود.

روی ربات‌های STREAM_TOKENS (یا در نبودشان، HELPER_TOKENS) اعمال می‌شود. در اولین درخواست استریم خوانده و ذخیره می‌شود؛ تغییرش ری‌استارت می‌خواهد.

مثال در config.py

STREAM_PER_CLIENT = 10

STREAM_PIPELINE

#

نوع: intپیش‌فرض: 8/bsetting › Config Variables

تعداد درخواست‌های هم‌زمان برای لینک‌های دانلود /dl سرور استریم.

پنجرهٔ شروع لینک‌های دانلود دو برابر این عدد است، با حداقل ۴ و حداکثر ۱۶ (0 یعنی ۸)؛ پس عددهای ۸ به بالا همه به ۱۶ می‌رسند. پخش آنلاین از پنجرهٔ ثابت ۴ استفاده می‌کند و روی HyperDL اثری ندارد.

در اولین درخواست استریم خوانده و ذخیره می‌شود؛ تغییرش ری‌استارت می‌خواهد.

مثال در config.py

STREAM_PIPELINE = 6

THROTTLE_SERVICES

#

نوع: strپیش‌فرض: auto/bsetting › Config Variables

مکث دادن به SABnzbd و JDownloader هنگام کارهای سنگین FFmpeg.

مقدارهای مجاز: auto، always و never (دقیقاً با حروف کوچک؛ هر مقدار دیگری auto حساب می‌شود). در حالت مکث، هنگام هر کار FFmpeg، SABnzbd متوقف و دانلودهای JDownloader قطع می‌شوند و بعد از پایان ادامه می‌یابند. auto این کار را فقط روی سرورهای ضعیف (۲ هسته یا کمتر، یا حداکثر ۱۵۳۶ مگابایت RAM) انجام می‌دهد.

صرف‌نظر از این مقدار، کارهای FFmpeg در کل ربات یکی‌یکی اجرا می‌شوند. سرویس‌هایی که با DISABLE_NZB یا DISABLE_JD خاموش‌اند مکث داده نمی‌شوند.

مثال در config.py

THROTTLE_SERVICES = "always"

USE_HYPER

#

نوع: boolپیش‌فرض: true/bsetting › Config Variables

کلید اصلی HyperDL و HyperUP برای انتقال سریع‌تر فایل‌های تلگرام.

وقتی روشن است، دانلود فایل‌های تلگرامی با چند کلاینت هم‌زمان (HELPER_TOKENS، HELPER_STRINGS و USER_SESSION_STRING) انجام می‌شود، به شرطی که چت دامپ (مقصد لیچ یا LEECH_LOG_CHAT) وجود داشته باشد؛ اگر HyperDL شکست بخورد، دانلود عادی انجام می‌شود. فایل‌های بزرگ‌تر از ۱۰ مگابایت هم با کم‌مشغله‌ترین کلاینت آپلود می‌شوند. وضعیت این کارها با برچسب (HyperDL) و (HyperUP) نشان داده می‌شود.

اثر پنهان: وقتی روشن است، همهٔ فایل‌های یک کار لیچ هم‌زمان آپلود می‌شوند و وقتی خاموش است یکی‌یکی، حتی اگر کلاینت کمکی نداشته باشید. روی استریم اثری ندارد. بدون DATABASE_URL، مقدار False در config.py نادیده گرفته می‌شود؛ از /bsetting یا متغیر محیطی استفاده کنید.

وب و Rclone Serve

آدرس عمومی رابط وب برای انتخاب فایل، رمزهای دسترسی وب و سرو کردن فایل‌ها با Rclone.

BASE_URL

#

نوع: str/bsetting › Config Variables

آدرس عمومی وب‌سرور ربات برای انتخاب فایل، استریم و پنل‌های وب.

وب‌سرور داخلی ربات همیشه روی پورت متغیر محیطی PORT (پیش‌فرض 8080) اجرا می‌شود و این متغیر آدرس عمومی آن است. با آن، آرگومان -s در تورنت‌ها و SABnzbd دکمهٔ Select Files می‌سازد که صفحهٔ انتخاب فایل را باز می‌کند؛ بدون آن -s نادیده گرفته می‌شود و /sel پیام Base URL not defined! می‌دهد. لینک‌های /stream و لینک‌های Stream / Download لیچ هم به آن نیاز دارند.

اگر آدرس با https:// شروع شود، در چت خصوصی دکمه به‌صورت وب‌اپ تلگرام باز می‌شود. در استقرار با Docker Compose، تونل Cloudflare آدرس trycloudflare.com را در فایلی می‌نویسد و ربات هر ۵ ثانیه آن را می‌خواند و جایگزین این متغیر می‌کند (فقط در حافظه)؛ پس وقتی تونل فعال است، آدرس تونل بر مقدار شما غلبه می‌کند.

/ انتهایی فقط هنگام خواندن از config.py یا پایگاه داده حذف می‌شود؛ در متغیر محیطی و /bsetting آن را بدون / پایانی بنویسید.

مثال در config.py

BASE_URL = "https://bot.example.com"

RCLONE_SERVE_PASS

#

نوع: str/bsetting › Config Variables

رمز احراز هویت برای rclone serve.

همراه RCLONE_SERVE_USER لازم است؛ اگر یکی از این دو خالی باشد، سرور بدون رمز اجرا می‌شود. ویرایش در /bsetting سرور را دوباره راه‌اندازی می‌کند.

مثال در config.py

RCLONE_SERVE_PASS = "StrongPassword123"

RCLONE_SERVE_PORT

#

نوع: intپیش‌فرض: 8081/bsetting › Config Variables

پورتی که rclone serve روی آن گوش می‌دهد.

به‌صورت --addr :PORT به Rclone داده می‌شود. این پورت را باید خودتان از بیرون در دسترس کنید؛ Docker Compose پیش‌فرض فقط پورت 8080 را باز می‌کند.

نکته: config_sample.py مقدار 0 دارد. بدون پایگاه داده این مقدار نادیده گرفته می‌شود و 8081 می‌ماند، اما با DATABASE_URL اعمال می‌شود و سیستم‌عامل یک پورت تصادفی انتخاب می‌کند. پس اگر از Rclone Serve استفاده می‌کنید، عدد مشخصی بنویسید.

مثال در config.py

RCLONE_SERVE_PORT = 8081

RCLONE_SERVE_URL

#

نوع: str/bsetting › Config Variables

آدرس عمومی سرور rclone serve و فعال‌کنندهٔ آن.

اگر تنظیم شده باشد و rclone.conf مالک وجود داشته باشد، ربات rclone serve http را روی پورت RCLONE_SERVE_PORT اجرا می‌کند و همهٔ ریموت‌ها را با یک ریموت combine سرو می‌کند. اگر خالی باشد، این سرور اجرا نمی‌شود. ربات در صورت نبودن بخش [combine]، آن را به rclone.conf اضافه می‌کند ولی بعداً با اضافه شدن ریموت‌های تازه به‌روزش نمی‌کند.

در پیام پایان میرور و کلون Rclone، دکمهٔ 🔗 Rclone Link با آدرس {RCLONE_SERVE_URL}/{remote}/{path} ساخته می‌شود (به‌جز وقتی کاربر از کانفیگ شخصی mrcc: استفاده کند). آدرس عیناً استفاده می‌شود، پس باید آدرس قابل‌دسترسی از بیرون همراه پورت باشد. ویرایش در /bsetting سرور را دوباره راه‌اندازی می‌کند.

مثال در config.py

RCLONE_SERVE_URL = "http://203.0.113.10:8081"

RCLONE_SERVE_USER

#

نوع: str/bsetting › Config Variables

نام کاربری احراز هویت برای rclone serve.

فقط اگر RCLONE_SERVE_USER و RCLONE_SERVE_PASS هر دو پر باشند، سرور با احراز هویت Basic اجرا می‌شود؛ در غیر این صورت همهٔ ریموت‌ها بدون رمز در دسترس‌اند. نام کاربری و رمز داخل لینک‌های ساخته‌شده قرار نمی‌گیرند.

مثال در config.py

RCLONE_SERVE_USER = "admin"

WEB_ACCESS_PASSWORD

#

نوع: str/bsetting › Config Variables

رمز پایه‌ای که رمزهای پنل وب qBittorrent و SABnzbd از آن ساخته می‌شوند.

ربات از این رمز و شناسهٔ ربات، رمز رابط وب qBittorrent و کلید API و رمز SABnzbd را می‌سازد و هنگام راه‌اندازی آدرس‌هایی مثل /qbit/?pass=... و /nzb/?pass=... را در لاگ می‌نویسد. مسیرهای /qbit و /nzb وب‌سرور فقط با همین رمز ساخته‌شده باز می‌شوند.

اگر خالی باشد، یک رمز تصادفی ساخته می‌شود؛ با پایگاه داده ذخیره می‌ماند، ولی بدون آن در هر ری‌استارت عوض می‌شود. از فاصله و نویسه‌های خاص پوسته (مثل $ یا &) استفاده نکنید، چون رمز بدون گیومه به دستور اجرای وب‌سرور داده می‌شود. تغییر آن در /bsetting بدون ری‌استارت اعمال نمی‌شود.

مثال در config.py

WEB_ACCESS_PASSWORD = "MyLongRandomSecret123"

WEB_PINCODE

#

نوع: boolپیش‌فرض: true/bsetting › Config Variables

جدا نگه داشتن پین صفحهٔ انتخاب فایل از لینک آن.

صفحهٔ وب انتخاب فایل همیشه یک پین ۴ رقمی می‌خواهد و سرور بیشتر از ۵ تلاش اشتباه در دقیقه را رد می‌کند. وقتی این گزینه روشن است، پین در لینک نیست و ربات یک دکمهٔ Pincode جدا می‌فرستد که پین را نشان می‌دهد و کاربر باید آن را در صفحه وارد کند. وقتی خاموش است، پین داخل لینک قرار می‌گیرد و صفحه بدون پرسیدن باز می‌شود.

پین از شناسهٔ کار و شناسهٔ ربات ساخته می‌شود و به WEB_ACCESS_PASSWORD ربطی ندارد.

لاگ، RSS، جست‌وجو و افزونه‌ها

چت‌های لاگ، گزارش خطا، خوراک RSS، جست‌وجوی تورنت و فهرست افزونه‌ها.

ENABLE_TELEMETRY

#

نوع: boolپیش‌فرض: true/bsetting › Config Variables

ارسال گزارش خطاها به سرور telemetry.wzmlx.com برای کمک به رفع باگ.

وقتی روشن است، با هر خطای سطح ERROR در لاگ (حداکثر یک بار در ۳۰۰ ثانیه برای هر نوع خطا) و هر استثنای مدیریت‌نشده، گزارشی به https://telemetry.wzmlx.com فرستاده می‌شود. گزارش شامل نسخه و کامیت ربات، متن خطا و traceback، سیستم‌عامل و زمان است و به‌جای توکن ربات، یک کد HMAC ساخته‌شده از آن فرستاده می‌شود.

توجه: ۲۰ خط آخر لاگ هم به‌صورت یک صفحهٔ عمومی Telegraph منتشر و لینکش در گزارش گذاشته می‌شود. اگر نمی‌خواهید اطلاعات لاگ بیرون برود، این گزینه را خاموش کنید. تغییر بلافاصله اعمال می‌شود.

MIRROR_LOG_ID

#

نوع: str/bsetting › Config Variables

چتی که نسخه‌ای از پیام پایان کارهای میرور، کلون و آپلودهاست به آن فرستاده می‌شود.

وقتی یک کار میرور، کلون یا آپلودهاست تمام می‌شود، پیام پایان همراه دکمه‌های لینک ابری یا ایندکس در این چت هم فرستاده می‌شود. کارهای لیچ و آپلود یوتیوب شامل این نمی‌شوند.

فقط یک شناسهٔ عددی چت قبول می‌شود؛ برخلاف توضیح داخل ربات، چند شناسهٔ جداشده با فاصله پشتیبانی نمی‌شود و ارسال با خطا ثبت می‌شود.

مثال در config.py

MIRROR_LOG_ID = -1001234567890

PLUGIN_INDEXES

#

نوع: listپیش‌فرض: []/bsetting › Config Variables

آدرس فهرست‌های اضافهٔ افزونه، علاوه بر فهرست رسمی.

فهرست رسمی افزونه‌ها همیشه اول است (از مخزن UPSTREAM_REPO و شاخهٔ UPSTREAM_BRANCH، یا مخزن اصلی WZML-X). هر آدرس این لیست باید یک فایل JSON باشد که یا مستقیماً لیست افزونه‌هاست یا شکل {"plugins": [...]} دارد؛ هر افزونه به id یا name و url یا repo نیاز دارد. اگر یک افزونه در چند فهرست باشد، اولین فهرست برنده است.

نتیجه‌ها ۹۰۰ ثانیه ذخیره می‌مانند؛ بعد از تغییر این متغیر، دکمهٔ Refresh در بخش Marketplace دستور /plugins را بزنید. مشکلات خواندن فهرست‌ها در همان صفحه نشان داده می‌شود.

مثال در config.py

PLUGIN_INDEXES = ["https://example.com/my-plugins/index.json"]

RSS_CHAT

#

نوع: str/bsetting › Config Variables

چتی که پست‌های خوراک RSS در آن فرستاده می‌شوند.

برای کار کردن RSS ضروری است؛ اگر خالی باشد، اولین اجرای پایش RSS هشدار می‌دهد و زمان‌بند را خاموش می‌کند. شناسهٔ عددی چت یا قالب chat_id|topic_id برای تاپیک گروه انجمنی قبول می‌شود؛ نام کاربری کار نمی‌کند. سودوها می‌توانند با دکمهٔ Use This Chat در /rss همان چت را تنظیم کنند.

در اشتراک‌هایی که دستور دانلود دارند، ربات آیتم را در این چت می‌فرستد و بعد آن را از طرف مشترک اجرا می‌کند؛ پس همهٔ بررسی‌ها و محدودیت‌های آن کاربر اعمال می‌شود. پیام‌هایی که از خود این چت می‌آیند از فاصلهٔ زمانی USER_TIME_INTERVAL معاف‌اند.

نکته: ربات پیش از هر کار کاربران عادی این مقدار را به عدد تبدیل می‌کند؛ اگر قالب chat_id|topic_id بگذارید، کارهای کاربران غیرسودو بی‌صدا با خطا متوقف می‌شوند.

مثال در config.py

RSS_CHAT = -1001234567890

RSS_DELAY

#

نوع: intپیش‌فرض: 600/bsetting › Config Variables

فاصلهٔ بررسی خوراک‌های RSS، به ثانیه.

زمان‌بند هر این‌قدر ثانیه یک بار همهٔ خوراک‌ها را بررسی می‌کند؛ اولین بررسی ۲۰ ثانیه بعد از شروع است. اگر بین دو بررسی آیتم‌های تازهٔ یک خوراک بیشتر از تعدادی باشد که خوراک نشان می‌دهد، بعضی آیتم‌ها از دست می‌روند؛ در این صورت عدد را کمتر کنید.

ویرایش در /bsetting بلافاصله زمان‌بندی را عوض می‌کند، اما دکمهٔ Reset فقط مقدار را به 600 برمی‌گرداند و فاصلهٔ قبلی تا شروع دوبارهٔ RSS یا ری‌استارت باقی می‌ماند.

مثال در config.py

RSS_DELAY = 900

RSS_SIZE_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

سقف حجم آیتم‌های RSS برای دانلود خودکار، به بایت.

فقط برای اشتراک‌هایی که دستور دانلود دارند به کار می‌رود: اگر حجم آیتم بیشتر از این عدد باشد، دانلود نمی‌شود. حجم از فیلد size خوراک یا از متن خلاصه (مثل 1.5 GB) خوانده می‌شود و آیتم‌هایی که حجمشان معلوم نیست فیلتر نمی‌شوند. 0 یعنی بدون محدودیت.

نکته: کد این مقدار را با بایت مقایسه می‌کند، هرچند /bsetting آن را با واحد GB نشان می‌دهد. مثلاً 10 یعنی ۱۰ بایت و تقریباً همه‌چیز را رد می‌کند؛ برای ۲ گیگابایت مقدار 2147483648 را بنویسید.

مثال در config.py

RSS_SIZE_LIMIT = 2147483648

SEARCH_LIMIT

#

نوع: intپیش‌فرض: 0/bsetting › Module Settings › Limit Settings

تعداد نتیجه‌ای که از API جست‌وجو برای هر سایت خواسته می‌شود.

این عدد فقط به‌صورت limit= به درخواست‌های SEARCH_API_LINK اضافه می‌شود و رفتار با 0 به خود API بستگی دارد. جست‌وجو با افزونه‌های qBittorrent از آن استفاده نمی‌کند و در هر حال حداکثر ۳۰۰ نتیجه نمایش داده می‌شود.

در /bsetting زیر Limit Settings با واحد results قرار دارد.

مثال در config.py

SEARCH_LIMIT = 50

SEARCH_PLUGINS

#

نوع: listپیش‌فرض: []/bsetting › Config Variables

فهرست آدرس افزونه‌های جست‌وجوی qBittorrent برای /search.

هر آیتم، آدرس یک فایل افزونهٔ جست‌وجوی qBittorrent (موتور nova3 با پسوند .py) است. ربات هنگام راه‌اندازی و بعد از هر ویرایش ابتدا همهٔ افزونه‌های نصب‌شده را حذف و سپس این فهرست را نصب می‌کند. config_sample.py به‌صورت پیش‌فرض ۱۷ افزونه دارد، ولی پیش‌فرض داخل کد فهرست خالی است.

در config.py یک لیست پایتون بنویسید؛ در متغیر محیطی یا /bsetting لیست یا آدرس‌های جداشده با ویرگول قبول می‌شود. به qBittorrent نیاز دارد، پس DISABLE_TORRENTS و DISABLE_SEARCH باید خاموش باشند. Reset فهرست را خالی می‌کند.

مثال در config.py

SEARCH_PLUGINS = ["https://raw.githubusercontent.com/qbittorrent/search-plugins/master/nova3/engines/piratebay.py"]

به‌روزرسانی

مخزن و شاخه‌ای که ربات هنگام راه‌اندازی کد را از آن به‌روز می‌کند.

UPSTREAM_BRANCH

#

نوع: strپیش‌فرض: wzv3/bsetting › Config Variables

شاخه‌ای از UPSTREAM_REPO که کد از آن گرفته می‌شود.

update.py کد را با همین شاخه یکی می‌کند و اگر خالی باشد از wzv3 استفاده می‌شود. نام شاخه در سربرگ پیام ری‌استارت هم نشان داده می‌شود و در ساختن آدرس فهرست رسمی افزونه‌ها به کار می‌رود.

بخش Repo Stats در /stats آخرین نسخه را همیشه از مخزن اصلی SilentDemonSD/WZML-X و همین شاخه می‌خواند، صرف‌نظر از UPSTREAM_REPO.

مثال در config.py

UPSTREAM_BRANCH = "wzv3"

UPSTREAM_REPO

#

نوع: str/bsetting › Config Variables

آدرس مخزن گیتی که ربات هنگام راه‌اندازی کدش را از آن به‌روز می‌کند.

اسکریپت update.py در هر بار شروع کانتینر و با هر /restart اجرا می‌شود. اگر این متغیر تنظیم باشد، پوشهٔ .git را از نو می‌سازد، مخزن را fetch می‌کند و کد را به‌زور (reset --hard) با شاخهٔ UPSTREAM_BRANCH یکی می‌کند؛ پس هر تغییر محلی در کد از بین می‌رود. اگر خالی باشد، به‌روزرسانی انجام نمی‌شود.

هر آدرس گیت قبول است. برای مخزن خصوصی از قالب https://<token>@github.com/<user>/<repo> استفاده کنید. اگر آدرس شامل @github.com باشد، هنگام آپلود فایل خصوصی در /bsetting گزینهٔ push به همین مخزن هم پیشنهاد می‌شود که push اجباری (-f) انجام می‌دهد.

اگر آدرس به شکل github.com/<owner>/<repo> باشد، فهرست رسمی افزونه‌ها هم از همین مخزن خوانده می‌شود.

مثال در config.py

UPSTREAM_REPO = "https://github.com/yourname/WZML-X"

مثلاً LEECH_SPLIT_SIZE، /mirror، -up یا «تامبنیل»