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

اسکریپت‌های کمکی (gen_scripts)

ساختن استرینگ سشن Pyrogram، فایل token.pickle، سرویس‌اکانت‌های گوگل، افزودن آن‌ها به درایو اشتراکی و فایل list_drives.txt با اسکریپت‌های پوشهٔ gen_scripts.

پوشهٔ gen_scripts/ مخزن چند اسکریپت پایتون دارد که اعتبارنامه‌ها و فایل‌های لازم برای گوگل درایو و تلگرام را می‌سازند. این اسکریپت‌ها بخشی از خود ربات نیستند و جدا از آن اجرا می‌شوند.

کدام اسکریپت را لازم دارید؟

اسکریپتکاربردخروجی
gen_pyro_sessionساختن استرینگ سشن حساب تلگرامپیام در Saved Messages؛ برای USER_SESSION_STRING
gen_token_pickleورود به گوگل و ساختن توکن OAuthgen_scripts/tokens/token.pickle
driveidفهرست درایوها و پوشه‌ها برای جست‌وجوlist_drives.txt
gen_sa_accountsساختن پروژه و سرویس‌اکانت در Google Cloudپوشهٔ accounts/ با فایل‌های JSON
add_to_team_driveافزودن سرویس‌اکانت‌ها به یک درایو اشتراکی—

ترتیب‌های رایج طبق gen_scripts/README.md:

  • گوگل درایو ساده: gen_token_pickle ← driveid
  • درایو اشتراکی با سرویس‌اکانت‌ها: gen_token_pickle ← gen_sa_accounts ← add_to_team_drive ← driveid
  • فقط تلگرام: gen_pyro_session

آماده‌سازی

اسکریپت‌ها به پایتون ۳٫۸ یا جدیدتر نیاز دارند. وابستگی‌ها در gen_scripts/config/requirements-cli.txt فهرست شده‌اند:

cd WZML-X/gen_scripts
pip install -r config/requirements-cli.txt

پوشهٔ gen_scripts/config/ جایی است که فایل credentials.json گوگل را در آن می‌گذارید و پوشهٔ gen_scripts/tokens/ جایی است که توکن‌ها در آن ذخیره می‌شوند.

۱. استرینگ سشن تلگرام (gen_pyro_session)

استرینگ سشن به ربات اجازه می‌دهد با حساب کاربری شما هم کار کند؛ مثلاً اگر حساب پرمیوم باشد، تکه‌های لیچ تا حدود ۴ گیگابایت می‌شوند. نتیجه را در USER_SESSION_STRING قرار دهید.

cd gen_scripts/gen_pyro_session
python script.py

اسکریپت به ترتیب این‌ها را می‌پرسد:

  1. TELEGRAM API KEY به شکل 12345678:.... ورودی باید یک : داشته باشد و فقط عدد قبل از آن به‌عنوان API ID (همان TELEGRAM_API از my.telegram.org) استفاده می‌شود.
  2. TELEGRAM API HASH: دقیقاً ۳۲ نویسه.
  3. شمارهٔ تلفن با + و کد کشور.

بعد کد ورودی که تلگرام می‌فرستد را وارد می‌کنید. استرینگ سشن در Saved Messages همان حساب فرستاده می‌شود و روی دیسک ذخیره نمی‌شود.

۲. توکن گوگل درایو (gen_token_pickle)

گرفتن credentials.json

  1. به Google Cloud Console بروید و یک پروژه بسازید (یا یکی را انتخاب کنید).
  2. از APIs & Services ← Enabled APIs & services، گزینهٔ Google Drive API را فعال کنید.
  3. OAuth consent screen را (از نوع External) بسازید.
  4. از Credentials ← Create Credentials ← OAuth client ID، نوع Desktop app را انتخاب کنید و فایل JSON را دانلود کنید.
  5. فایل را با نام credentials.json در gen_scripts/config/ بگذارید.

اجرا

cd gen_scripts/gen_token_pickle
python script.py

اسکریپت اول دنبال توکن قبلی می‌گردد و اگر منقضی شده باشد، تمدیدش می‌کند. در غیر این صورت آدرس ورود را باز می‌کند (یا چاپ می‌کند) و روی یکی از پورت‌های 8080 تا 8089 منتظر بازگشت از گوگل می‌ماند. نتیجه در gen_scripts/tokens/token.pickle ذخیره می‌شود. این توکن علاوه بر گوگل درایو، دسترسی‌های YouTube (از جمله آپلود) را هم شامل می‌شود.

رساندن token.pickle به ربات

ربات token.pickle را در پوشهٔ اصلی خودش (کنار config.py) می‌خواهد. ساده‌ترین راه، بارگذاری از تلگرام است: /bsetting ← Private Files ← Add/Delete File و فرستادن فایل. این‌طوری فایل در MongoDB هم ذخیره می‌شود و در هر شروع دوباره نوشته می‌شود. بعد GDRIVE_ID را برابر شناسهٔ پوشه یا درایو مقصد بگذارید.

۳. فهرست درایوها (driveid)

این اسکریپت فایل list_drives.txt را می‌سازد که ربات برای جست‌وجو با /list در چند درایو از آن استفاده می‌کند. به هیچ کتابخانهٔ اضافه‌ای نیاز ندارد.

cd gen_scripts/driveid
python script.py

اسکریپت می‌پرسد چند درایو اضافه می‌کنید و برای هر کدام سه چیز می‌خواهد:

ورودیتوضیح
Nameیک نام دلخواه؛ فاصله‌ها به _ تبدیل می‌شوند.
Drive IDبرای My Drive مقدار root؛ برای درایو اشتراکی یا پوشه، بخش بعد از folders/ در آدرس آن.
Index URLاختیاری؛ لینک ایندکس آن درایو، اگر دارید.

اگر فایل از قبل وجود داشته باشد، می‌پرسد موارد قبلی را نگه دارد یا نه. فایل در همان پوشه‌ای ساخته می‌شود که اسکریپت را در آن اجرا کرده‌اید. هر خط آن به این شکل است: نام، شناسهٔ درایو و در صورت وجود لینک ایندکس، با فاصله از هم جدا شده‌اند (NAME DRIVE_ID INDEX_URL).

فایل را از /bsetting ← Private Files به ربات بدهید. ربات در فهرست جست‌وجو _ نام‌ها را به فاصله برمی‌گرداند.

۴. سرویس‌اکانت‌ها (gen_sa_accounts)

سرویس‌اکانت‌ها حساب‌های رباتیک گوگل هستند که ربات می‌تواند به‌جای حساب شما از آن‌ها استفاده کند. پیش از اجرا، این چهار API را در پروژهٔ Google Cloud فعال کنید: Cloud Resource Manager API، IAM API، Service Usage API و Google Drive API.

ساده‌ترین حالت، راه‌اندازی سریع است:

cd gen_scripts/gen_sa_accounts
python script.py --quick-setup 5 --credentials ../config/credentials.json

این دستور ۵ پروژهٔ جدید می‌سازد، سرویس‌های iam و drive را در آن‌ها فعال می‌کند، در هر پروژه ۱۰۰ سرویس‌اکانت می‌سازد و کلیدهای JSON را در پوشهٔ accounts/ دانلود می‌کند. طبق README اسکریپت، این کار به خاطر محدودیت‌های API گوگل ممکن است بین ۱۵ تا ۳۰ دقیقه طول بکشد.

چند گزینهٔ دیگر:

گزینهکار
--path یا -pپوشهٔ خروجی (پیش‌فرض accounts)
--max-projectsحداکثر تعداد پروژه (پیش‌فرض 12)
--new-onlyهمراه --quick-setup، فقط روی پروژه‌های تازه‌ساخته کار کند
--list-projectsفهرست پروژه‌ها
--list-sasفهرست سرویس‌اکانت‌های یک پروژه
--create-projects، --enable-services، --create-sas، --download-keys، --delete-sasانجام هر مرحله به‌صورت جداگانه؛ * یعنی همهٔ پروژه‌ها و ~ یعنی پروژه‌های تازه‌ساخته

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

دو راه دارید:

  • پوشهٔ accounts روی سرور: در روش Docker Compose، پوشهٔ ./accounts کنار docker-compose.yml به /usr/src/app/accounts داخل کانتینر وصل است. فایل‌های JSON را در آن کپی کنید.
  • فایل accounts.zip: پوشهٔ accounts را zip کنید (فایل‌ها باید داخل پوشه‌ای به نام accounts در zip باشند) و از /bsetting ← Private Files بفرستید. ربات آن را استخراج می‌کند و USE_SERVICE_ACCOUNTS را خودکار روشن می‌کند.
zip -r accounts.zip accounts

اگر هنگام شروع پوشهٔ accounts وجود نداشته باشد، ربات USE_SERVICE_ACCOUNTS را خاموش می‌کند.

۵. افزودن سرویس‌اکانت‌ها به درایو اشتراکی (add_to_team_drive)

برای اینکه سرویس‌اکانت‌ها بتوانند در یک درایو اشتراکی (Team Drive) کار کنند، باید عضو آن باشند. این اسکریپت همهٔ فایل‌های JSON یک پوشه را می‌خواند و هر سرویس‌اکانت را با نقش Organizer (organizer) به درایو اضافه می‌کند. حساب گوگل شما باید در آن درایو نقش Manager داشته باشد.

cd gen_scripts/add_to_team_drive
python script.py -c ../config/credentials.json -p ../gen_sa_accounts/accounts -d "TEAM_DRIVE_ID"
گزینهکار
--drive-id یا -dشناسهٔ درایو اشتراکی (الزامی)
--path یا -pپوشهٔ سرویس‌اکانت‌ها (پیش‌فرض accounts در پوشهٔ فعلی)
--credentials یا -cمسیر credentials.json
--yes یا -yبدون پرسیدن تأیید

اسکریپت توکن خودش را در پوشهٔ tokens/ کنار credentials.json با نام token_sa.pickle ذخیره می‌کند.

بعد از این مرحله، شناسهٔ همان درایو را در GDRIVE_ID بگذارید و IS_TEAM_DRIVE را روشن کنید (توضیح خود ربات برای این متغیر می‌گوید برای آپلود در TeamDrive آن را True کنید). شرح این متغیرها در مرجع متغیرها آمده است.

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