کمک

عیب‌یابی و پرسش‌های رایج

مشکلات رایج هنگام راه‌اندازی و استفاده از WZML-X، پیام‌های خطای مربوط به آن‌ها در لاگ و راه‌حل‌ها، به‌همراه پرسش‌های پرتکرار.

بیشتر مشکلات با یک نگاه به لاگ روشن می‌شوند. لاگ ربات را این‌طور ببینید:

docker compose logs -f app

داخل تلگرام هم مالک و سودوها می‌توانند با /log فایل log.txt را بگیرند. در ادامه، پیام‌های لاگ و پاسخ‌های ربات دقیقاً به همان شکلی آمده‌اند که ربات چاپ می‌کند تا بتوانید جست‌وجویشان کنید.

ربات اصلاً بالا نمی‌آید

BOT_TOKEN variable is missing! Exiting now update.py نه در config.py و نه در متغیرهای محیطی BOT_TOKEN پیدا نکرده است. مقدار را در config.py بنویسید.

OWNER_ID variable is missing! (یا همین پیام برای BOT_TOKEN، TELEGRAM_API یا TELEGRAM_HASH) یکی از چهار متغیر ضروری خالی است. اگر config.py دارید، این مقادیر باید در خود آن پر باشند؛ تعریف آن‌ها فقط در متغیرهای محیطی کافی نیست، چون این بررسی پیش از خواندن متغیرهای محیطی انجام می‌شود. جزئیات در نحوهٔ پیکربندی.

Config.py file is not Added! Checking ENVs.. ربات config.py را پیدا نکرده است. در روش Docker Compose، مطمئن شوید پیش از اجرای Compose، config.py را کنار docker-compose.yml ساخته‌اید:

cp config_sample.py config.py

اگر پیش از ساختن فایل، Compose را اجرا کرده باشید، ممکن است Docker به‌جای فایل، یک پوشه به نام config.py ساخته باشد. آن را پاک کنید، فایل را بسازید و دوباره اجرا کنید.

کانتینر مدام ری‌استارت می‌شود سیاست ری‌استارت app و tunnel در docker-compose.yml برابر unless-stopped است، پس هر خطا باعث شروع دوباره می‌شود. خطای اصلی را در docker compose logs app پیدا کنید.

پایگاه داده

Error in DB connection: … یا Database ERROR: … ربات نتوانسته به MongoDB وصل شود. این‌ها را بررسی کنید:

  • DATABASE_URL کامل و درست کپی شده باشد و رمز عبور واقعی جای نگه‌دارنده را گرفته باشد. اگر رمز نویسه‌های خاصی مثل @ یا : دارد، باید در آدرس به‌صورت کدگذاری‌شده (percent-encoded) نوشته شود.
  • در MongoDB Atlas، IP سرور شما در بخش دسترسی شبکه (Network Access) مجاز شده باشد.

update_config skipped: DB not connected ربات بدون پایگاه داده کار می‌کند و تغییراتی که از /bsetting می‌دهید بعد از ری‌استارت از بین می‌روند. مشکل اتصال را حل کنید.

No saved config found in MongoDB, using defaults در اولین اجرا عادی است؛ هنوز چیزی در پایگاه داده ذخیره نشده است.

بعد از عوض کردن BOT_TOKEN، همهٔ تنظیمات به حالت اول برگشت داده‌ها در پایگاه داده بر اساس شناسهٔ ربات جدا نگه داشته می‌شوند. اگر توکن یک ربات دیگر را بگذارید، ربات تنظیمات ربات قبلی را نمی‌بیند.

ربات به دستورها جواب نمی‌دهد

فقط به /start جواب می‌دهد و می‌گوید You are not an authorized user! شما یا این چت جزو چت‌ها و کاربرهای مجاز نیستید. ربات دستورهای کاربران غیرمجاز را بی‌صدا نادیده می‌گیرد. راه‌حل‌ها:

  • مالک یا یک سودو در همان گروه /authorize (کوتاه‌شده: /a) را بفرستد تا کل چت مجاز شود؛ یا روی پیام یک کاربر ریپلای کند تا فقط آن کاربر مجاز شود؛ یا شناسهٔ چت را بعد از دستور بنویسد. لغو با /unauthorize (/ua).
  • یا شناسه‌ها را با فاصله در AUTHORIZED_CHATS بنویسید. تغییر این متغیر از /bsetting به ری‌استارت نیاز دارد.
  • برای دسترسی مدیریتی، /addsudo (/as) یا متغیر SUDO_USERS را استفاده کنید.

پاسخ ربات BlackListed Detected → Restricted from Bot است کاربر در فهرست سیاه است (/blacklist یا /bl). سودو یا مالک می‌تواند با /rmblacklist (/rbl) او را خارج کند.

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

  • OWNER_ID باید شناسهٔ عددی حساب شما باشد، نه نام کاربری.
  • نام دستورها به حروف بزرگ و کوچک حساس است؛ /Mirror کار نمی‌کند، /mirror کار می‌کند.
  • اگر CMD_SUFFIX تنظیم شده باشد، همهٔ دستورها آن پسوند را دارند (مثلاً /mirror2). فقط /restartall و /statusall پسوند نمی‌گیرند.

یک قابلیت خاص کار نمی‌کند (مثلاً JDownloader، NZB یا Seedr) وضعیت آن را در /bsetting ← Module Settings ← On/Off Settings بررسی کنید؛ دکمه‌هایی که علامت ✓ دارند روشن‌اند. در کد، مقدار پیش‌فرض DISABLE_JD، DISABLE_NZB و DISABLE_SEEDR برابر True است. JDownloader علاوه بر روشن بودن، به JD_EMAIL و JD_PASS و SABnzbd به USENET_SERVERS نیاز دارد.

تونل و رابط وب

لینک‌های Select Files یا پخش قبلی دیگر باز نمی‌شوند آدرس تونل سریع Cloudflare با هر بار شروع دوبارهٔ کانتینر تونل عوض می‌شود. ربات آدرس جدید را ظرف چند ثانیه برمی‌دارد، اما لینک‌هایی که قبلاً ساخته شده‌اند آدرس قدیمی را دارند. آدرس فعلی را با docker compose logs tunnel ببینید. برای آدرس ثابت از تونل نام‌دار استفاده کنید (استقرار روی VPS).

Base URL not defined! BASE_URL خالی است. در روش Compose بررسی کنید سرویس tunnel در حال اجراست و در لاگش آدرس trycloudflare.com دیده می‌شود؛ در روش‌های بدون تونل، BASE_URL را دستی تنظیم کنید.

The PIN you entered is incorrect. Try Again! یا Too many PIN attempts. Try again in 60s. پین را از دکمهٔ Pincode زیر پیام همان کار بگیرید؛ هر کار پین خودش را دارد. بعد از ۵ تلاش اشتباه، باید ۶۰ ثانیه صبر کنید.

Unauthorized access در /qbit/ یا /nzb/ آدرس کامل همراه با ?pass= را از لاگ شروع ربات بردارید (خطی که با Web UI: شروع می‌شود).

رابط وب بعد از زدن Reset روی BASE_URL یا WEB_ACCESS_PASSWORD از کار افتاد در /bsetting، ریست کردن این دو متغیر پروسهٔ وب‌سرور را متوقف می‌کند. ربات را ری‌استارت کنید.

پیام‌های دستور /stream

  • Streaming is disabled.: گزینهٔ STREAM در Module Settings خاموش است.
  • No streaming clients are running.: STREAM_TOKENS یا HELPER_TOKENS را تنظیم کنید و ربات را ری‌استارت کنید.
  • BASE_URL is not configured.: BASE_URL را تنظیم کنید.
  • خطای Streaming is disabled or the stream service is not running. در مرورگر یعنی سرور پخش اجرا نمی‌شود.

جزئیات بیشتر در رابط وب.

qBittorrent و Aria2

Torrents are disabled. Skipping qBittorrent initialization. DISABLE_TORRENTS روشن است و qBittorrent اجرا نمی‌شود.

Failed to configure qBittorrent: … یا qBittorrent is not initialized. Skipping qBittorrent options update. qBittorrent درست بالا نیامده است. لاگ کامل را بررسی کنید و ربات را ری‌استارت کنید. اگر تنظیمات qBittorrent را دستی تغییر داده‌اید، در /bsetting ← Qbit Settings دکمهٔ Sync Qbittorrent تنظیمات فعلی خود qBittorrent را دوباره می‌خواند و ذخیره می‌کند.

خطاهایی که با this mostly happens after abuse aria2 تمام می‌شوند توقف یا ادامهٔ یک کار در Aria2 بعد از انتخاب فایل شکست خورده است. همان‌طور که پیام پیشنهاد می‌کند، دستور /select را دوباره امتحان کنید.

تورنت‌های مرده تا ابد در صف می‌مانند TORRENT_TIMEOUT را (به ثانیه) تنظیم کنید؛ 0 یعنی غیرفعال. این مقدار به‌عنوان bt-stop-timeout به Aria2 هم داده می‌شود.

مصرف منابع qBittorrent زیاد است README.md توصیه می‌کند AsyncIOThreadsCount را متناسب با سرور تنظیم کنید. توضیح در به‌روزرسانی و نگه‌داری.

تغییر .netrc روی Aria2 اثر نکرد طبق متن بخش Private Files، تغییر .netrc تا ری‌استارت روی Aria2 اعمال نمی‌شود.

SABnzbd و JDownloader

  • SABnzbd not ready, retrying (…/10): ربات تا ۱۰ بار منتظر SABnzbd می‌ماند. اگر به Failed to get SABnzbd options after 10 retries رسید، لاگ را بررسی و ری‌استارت کنید.
  • Synchronization Paused. No USENET_SERVERS is provided !: ابتدا سرور Usenet را در USENET_SERVERS یا از Sabnzbd Settings اضافه کنید.
  • SABnzbd بعد از روشن کردن دوباره کار نمی‌کند: روشن کردن دوبارهٔ NZB در Module Settings به ری‌استارت نیاز دارد.
  • No Email or Password provided! هنگام زدن JDownloader Sync: JD_EMAIL و JD_PASS را تنظیم کنید.

تغییرات تنظیمات اعمال نمی‌شوند

  • بعضی متغیرها فقط با ری‌استارت اعمال می‌شوند: BOT_TOKEN، TELEGRAM_API، TELEGRAM_HASH، OWNER_ID، DATABASE_URL، USER_SESSION_STRING، STREAM_TOKENS، TG_PROXY، AUTHORIZED_CHATS و CMD_SUFFIX. ربات هنگام ویرایش آن‌ها یادداشت Restart required for this edit to take effect! را نشان می‌دهد.
  • اگر مقداری را در config.py نوشته‌اید ولی بعد از ری‌استارت مقدار دیگری می‌بینید، احتمالاً قبلاً آن را از /bsetting تغییر داده‌اید. مقدار ذخیره‌شده در پایگاه داده برنده است، مگر اینکه همان کلید را در config.py نسبت به شروع قبلی عوض کنید. توضیح کامل در نحوهٔ پیکربندی.
  • بعد از ویرایش config.py در روش Compose، کانتینر را با docker compose restart app ری‌استارت کنید.

به‌روزرسانی

Something went Wrong! Recheck your details or Ask Support! update.py نتوانسته کد را از UPSTREAM_REPO بگیرد. آدرس مخزن و نام شاخه (UPSTREAM_BRANCH) را بررسی کنید؛ برای مخزن خصوصی، آدرس باید اطلاعات دسترسی را داشته باشد.

تغییراتی که در کد داده بودم بعد از ری‌استارت از بین رفت وقتی UPSTREAM_REPO تنظیم شده باشد، کد داخل کانتینر در هر شروع با شاخهٔ بالادستی یکی می‌شود. تغییراتتان را در فورک خودتان نگه دارید. جزئیات در به‌روزرسانی و نگه‌داری.

پرسش‌های رایج

آیا دانلودهای نیمه‌کاره بعد از ری‌استارت ادامه پیدا می‌کنند؟ خیر. ربات در هر شروع پوشهٔ دانلودها را خالی می‌کند (Cleaning Download Directory). با INC_TASK_NOTIFY بعد از ری‌استارت فهرست کارهای ناتمام را می‌گیرید و با INC_TASK_RESUME ربات دستور اصلی هر کار را دوباره اجرا می‌کند؛ کار از ابتدا شروع می‌شود. هر دو به DATABASE_URL نیاز دارند.

بزرگ‌ترین فایلی که در لیچ فرستاده می‌شود چقدر است؟ فایل‌های بزرگ‌تر از اندازهٔ تکه‌ها (LEECH_SPLIT_SIZE) تکه‌تکه می‌شوند. سقف این اندازه با ربات معمولی 2097152000 بایت (حدود ۲ گیگابایت) است و اگر USER_SESSION_STRING یک حساب پرمیوم باشد، به 4194304000 بایت (حدود ۴ گیگابایت) می‌رسد.

آیا ربات اطلاعاتی به بیرون می‌فرستد؟ اگر ENABLE_TELEMETRY روشن باشد (پیش‌فرض: True)، گزارش خطاهای برنامه برای رفع اشکال به telemetry.wzmlx.com فرستاده می‌شود. برای غیرفعال کردن، آن را False کنید.

می‌توانم چند ربات را با یک MongoDB اجرا کنم؟ بله. داده‌های هر ربات بر اساس شناسهٔ همان ربات جدا ذخیره می‌شود. راهنمای کامل در چند نمونه.

زبان پیام‌های ربات را می‌شود عوض کرد؟ DEFAULT_LANG زبان ربات را تعیین می‌کند (پیش‌فرض en). در این نسخه فایل‌های زبان en و bn در کد وجود دارند.

دستورها و آرگومان‌ها کجا توضیح داده شده‌اند؟ در دستورات و آرگومان‌ها. تنظیمات شخصی هر کاربر در تنظیمات کاربر و تنظیمات کلی در تنظیمات ربات آمده است.

کمک بیشتر

اگر مشکلتان حل نشد، لاگ مربوط را آماده کنید (توکن‌ها و رمزها را از آن پاک کنید) و در جامعهٔ WZML-X بپرسید:

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