راهنمای استفاده

پلاگین‌ها

سیستم پلاگین WZML-X؛ مدیریت با دستور /plugins، نصب از zip، GitHub یا Marketplace، متغیرهای DISABLE_PLUGINS و PLUGIN_INDEXES و پلاگین‌های همراه ربات.

پلاگین‌ها دستورهای تازه‌ای به ربات اضافه می‌کنند، بدون اینکه کد اصلی را تغییر دهید. هر پلاگین یک پوشه در plugins/ است که یک فایل مشخصات به نام wzml_plugin.yml و یک یا چند فایل پایتون دارد. مدیریت پلاگین‌ها از داخل تلگرام و با دستور /plugins انجام می‌شود و فعال یا غیرفعال کردن آن‌ها ری‌استارت نمی‌خواهد.

دستور /plugins

/plugins برای مالک ربات و کاربران سودو فعال است. صفحهٔ اول خلاصه‌ای نشان می‌دهد (تعداد نصب‌شده، فعال، غیرفعال، بارگذاری‌نشده و مسیر پوشهٔ پلاگین‌ها) و این دکمه‌ها را دارد:

دکمهکار
Installed (N)فهرست پلاگین‌ها. رنگ دکمه وضعیت را نشان می‌دهد.
Marketplaceفهرست پلاگین‌های قابل نصب از فایل‌های ایندکس.
Installنصب از فایل zip یا از GitHub (فقط برای سودوها و مالک نمایش داده می‌شود).
Closeبستن منو

وضعیت‌ها

رنگ دکمهوضعیتمعنی
سبزEnabledدر حافظه است و دستورهایش کار می‌کنند.
قرمزDisabledدر حافظه است اما دستورهایش خاموش‌اند.
سادهNot Loadedفایل‌هایش روی دیسک است ولی بارگذاری نشده.

چه کسی چه کاری می‌تواند بکند؟

  • مالک ربات: فعال و غیرفعال کردن، حذف (uninstall)، به‌روزرسانی، Rescan، تأیید نصب وابستگی‌ها و تغییر تنظیمات پلاگین.
  • سودوها: مرور فهرست‌ها و نصب پلاگین جدید. اگر سودو بخواهد پلاگین موجود را تغییر دهد، پیام Only the owner can change plugins. را می‌گیرد.

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

  • فعال/غیرفعال: غیرفعال کردن فقط دستورهای پلاگین را جدا می‌کند و کد در حافظه می‌ماند، پس فعال کردن دوباره فوری است. انتخاب شما در پایگاه داده ذخیره می‌شود و بعد از ری‌استارت هم باقی می‌ماند.
  • Rescan: پوشه‌هایی را که در حین اجرای ربات به plugins/ اضافه کرده‌اید پیدا و بارگذاری می‌کند.
  • به‌روزرسانی: اگر پلاگین از GitHub، Marketplace یا یک URL نصب شده باشد، دوباره از همان منبع گرفته می‌شود؛ پلاگین‌های همراه ربات یا دستی کپی‌شده از مخزن و شاخهٔ UPSTREAM_REPO و UPSTREAM_BRANCH گرفته می‌شوند.
  • حذف: دستورها جدا، فایل‌ها پاک و رکورد پایگاه داده حذف می‌شود.
  • Settings: اگر پلاگین تنظیماتی تعریف کرده باشد، از این دکمه ویرایش می‌شود. مقادیر برای هر ربات جداگانه در پایگاه داده ذخیره می‌شوند.

نصب پلاگین

از /plugins ← Install سه راه دارید:

  • Upload a .zip: فایل zip پوشهٔ پلاگین را بفرستید. هم zip شامل خود فایل‌ها و هم zip شامل یک پوشه با نام پلاگین پذیرفته می‌شود.
  • From GitHub: یکی از این‌ها را بفرستید: owner/repo، owner/repo@branch یا آدرس کامل GitHub. ربات همهٔ پوشه‌های پلاگین داخل مخزن را پیدا می‌کند و فهرستشان را نشان می‌دهد؛ سبز یعنی هنوز نصب نشده و آبی یعنی قبلاً دارید.
  • Marketplace: از فهرست ایندکس‌ها انتخاب کنید.

محدودیت‌های فایل فشرده: حداکثر ۱۶ مگابایت فشرده، ۴۸ مگابایت پس از باز شدن و ۵۱۲ فایل. اگر پلاگین بستهٔ پایتونی لازم داشته باشد که نصب نیست، ربات فهرست آن‌ها را نشان می‌دهد و فقط با تأیید مالک آن‌ها را نصب می‌کند.

Marketplace و PLUGIN_INDEXES

Marketplace فهرستش را از فایل‌های ایندکس JSON می‌خواند. ایندکس رسمی از مخزن بالادستی شما و با این الگو خوانده می‌شود: https://raw.githubusercontent.com/<UPSTREAM_REPO>/<UPSTREAM_BRANCH>/plugins/index.json.

اگر UPSTREAM_REPO خالی باشد یا آدرس GitHub نباشد، مخزن SilentDemonSD/WZML-X استفاده می‌شود. آدرس دقیقی که ربات استفاده می‌کند در صفحهٔ Marketplace نمایش داده می‌شود. فایل plugins/index.json مخزن همین فهرست را برای پلاگین‌های همراه ربات نگه می‌دارد.

PLUGIN_INDEXES (مرجع متغیرها) فقط برای ایندکس‌های اضافه است. یک فهرست از آدرس‌ها بدهید؛ هر آدرس باید به یک فایل JSON اشاره کند که فهرستی به نام plugins دارد:

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

DISABLE_PLUGINS

با روشن کردن DISABLE_PLUGINS (در /bsetting ← Module Settings ← On/Off Settings، دکمهٔ PLUGINS؛ نگاه کنید به تنظیمات ربات)، همهٔ پلاگین‌ها همان لحظه از حافظه خارج می‌شوند، هنگام شروع ربات هم بارگذاری نمی‌شوند و هر تغییری در /plugins با پیام Plugins are switched off in Module Settings. رد می‌شود. با خاموش کردن دوباره‌اش، پلاگین‌ها بدون ری‌استارت برمی‌گردند.

پلاگین‌های همراه ربات

این هفت پلاگین همراه ربات می‌آیند. اگر برای پلاگینی هنوز رکوردی در پایگاه داده نباشد، فعال شروع می‌شود. وابستگی‌های پایتونی آن‌ها در requirements.txt پروژه هم آمده است.

پلاگیندستورهادسترسیچه می‌کند
anilist/anime (یا /anilist)، /character، /manga، /animehelpکاربران مجازجست‌وجوی انیمه، شخصیت و مانگا در AniList. تنظیمات: anime_template (قالب HTML کپشن) و description_limit (طول خلاصه، پیش‌فرض 500).
imdb/imdbکاربران مجازجست‌وجوی عنوان یا شناسهٔ tt… در IMDB و فرستادن یک کارت اطلاعات. اگر IMDB_TEMPLATE خالی باشد از پیام‌های Rich استفاده می‌کند، وگرنه از قالب HTML شما.
mediainfo/mediainfo (یا /mi)کاربران مجازبا ریپلای روی یک فایل یا با یک لینک مستقیم، اطلاعات MediaInfo را در یک صفحهٔ Telegraph نشان می‌دهد.
mydramalist/mdl (یا /mydramalist)کاربران مجازجست‌وجوی سریال و فیلم در MyDramaList و انتخاب از نتایج. تنظیمات: template، synopsis_limit (پیش‌فرض 300) و results (تعداد نتایج، پیش‌فرض 8).
nzb_search/nzbsearch (یا /ns)کاربران مجازجست‌وجو در ایندکسرهای Usenet از طریق NZBHydra؛ به HYDRA_IP و HYDRA_API_KEY نیاز دارد و وقتی DISABLE_NZB روشن است کار نمی‌کند.
speedtest/speedtest (یا /spt)کاربران مجازاندازه‌گیری سرعت اینترنت سرور.
gen_pyro_sess/exportsessionسودوساختن استرینگ سشن Pyrogram قدم‌به‌قدم؛ فقط در چت خصوصی.

دربارهٔ /exportsession

این پلاگین راه داخل تلگرامِ ساختن USER_SESSION_STRING است:

  1. در چت خصوصی با ربات /exportsession را بفرستید.
  2. اگر TELEGRAM_API و TELEGRAM_HASH در پیکربندی ربات باشند، از همان‌ها استفاده می‌شود؛ وگرنه ربات آن‌ها را می‌پرسد.
  3. شمارهٔ تلفن را با کد کشور بفرستید و با y تأیید کنید.
  4. کدی را که تلگرام فرستاده با فاصله بین رقم‌ها بفرستید (مثلاً 1 2 3 4 5). اگر حساب تأیید دومرحله‌ای دارد، رمز آن را هم می‌پرسد.
  5. استرینگ سشن در Saved Messages همان حساب فرستاده می‌شود.

هر مرحله ۱۲۰ ثانیه مهلت دارد و با دکمهٔ Cancel Process می‌توانید کار را لغو کنید.

نوشتن پلاگین

یک پلاگین ساده دو فایل دارد. نام پوشه باید با name در فایل مشخصات یکی باشد:

# plugins/hello/wzml_plugin.yml
name: hello
version: "1.0.0"
author: You
description: Say hello
entry: hello.py
commands:
  - name: hello
    handler: hello_command
    description: Say hello
    access: authorized
# plugins/hello/hello.py
from bot.helper.ext_utils.bot_utils import new_task
from bot.helper.telegram_helper.message_utils import send_message


@new_task
async def hello_command(_, message):
    await send_message(message, "<b>Hello!</b>")

بعد از Rescan در /plugins ← Installed (یا ری‌استارت)، دستور /hello کار می‌کند و در /help هم نمایش داده می‌شود (فهرست دستورهای اصلی در دستورات). مقدار access می‌تواند authorized، sudo، owner یا authorized_uset باشد و CMD_SUFFIX خودکار به نام دستورهای پلاگین هم اضافه می‌شود.

مرجع کامل فایل مشخصات، چرخهٔ عمر، تنظیمات و قالب ایندکس در فایل plugins/README.md مخزن آمده است.

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