راهنمای استفاده
اسکریپتهای کمکی (gen_scripts)
ساختن استرینگ سشن Pyrogram، فایل token.pickle، سرویساکانتهای گوگل، افزودن آنها به درایو اشتراکی و فایل list_drives.txt با اسکریپتهای پوشهٔ gen_scripts.
پوشهٔ gen_scripts/ مخزن چند اسکریپت پایتون دارد که اعتبارنامهها و فایلهای لازم برای گوگل درایو و تلگرام را میسازند. این اسکریپتها بخشی از خود ربات نیستند و جدا از آن اجرا میشوند.
کدام اسکریپت را لازم دارید؟
| اسکریپت | کاربرد | خروجی |
|---|---|---|
gen_pyro_session | ساختن استرینگ سشن حساب تلگرام | پیام در Saved Messages؛ برای USER_SESSION_STRING |
gen_token_pickle | ورود به گوگل و ساختن توکن OAuth | gen_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
اسکریپت به ترتیب اینها را میپرسد:
TELEGRAM API KEYبه شکل12345678:.... ورودی باید یک:داشته باشد و فقط عدد قبل از آن بهعنوان API ID (همانTELEGRAM_APIاز my.telegram.org) استفاده میشود.TELEGRAM API HASH: دقیقاً ۳۲ نویسه.- شمارهٔ تلفن با
+و کد کشور.
بعد کد ورودی که تلگرام میفرستد را وارد میکنید. استرینگ سشن در Saved Messages همان حساب فرستاده میشود و روی دیسک ذخیره نمیشود.
۲. توکن گوگل درایو (gen_token_pickle)
گرفتن credentials.json
- به Google Cloud Console بروید و یک پروژه بسازید (یا یکی را انتخاب کنید).
- از APIs & Services ← Enabled APIs & services، گزینهٔ Google Drive API را فعال کنید.
- OAuth consent screen را (از نوع External) بسازید.
- از Credentials ← Create Credentials ← OAuth client ID، نوع Desktop app را انتخاب کنید و فایل JSON را دانلود کنید.
- فایل را با نام
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 کنید). شرح این متغیرها در مرجع متغیرها آمده است.