-
سه شنبه, ۲۸ مرداد ۱۳۹۹، ۰۹:۵۹ ق.ظ
-
۴۵۱۴
نوشتن ربات و پیاده سازی آن روی اکانت شخصی تلگرام در پایتون
درود به همه !
در این پست آموزشی قراره کار خیلی جالبی بکنیم . امروز میایم با زبان پایتون ، اسکریپتی مینویسیم که باعث میشه اکانت شخصی تلگراممون به طور خودکار یه سری کار ها رو انجام بده . مثلا رباتی بنویسیم که بیاد به یه لیست username که بهش میدیم سلام کنه .یا مثلا یه لیست آی دی تلگرام بهش بدیم و خودش خودکار تمام پروفایل هاشونو دانلود کنه و روی سیستممون ذخیره کنه و کلی کارهای دیگه ... در واقع ما با اینکار اکانت تلگراممون رو تبدیل به یک رباتی میکنیم که مثل یک کاربر عادی تلگرام توانایی انجام هر کاری (پیام دادن ، خواندن پیام ، دیدن پروفایل دیگران و...) را دارد .
برای اسکریپت امروز ما نیاز داریم یه سری کارها انجام بدیم :
۱ - ساخت اپلیکیشن تلگرام و گرفتن api_id و api_hash : برای اینکار ابتدا به لینک زیر وارد میشیم (باید با VPN بریم . تلگرام فیلتره):
پس از ورود به لینک بالا ازمون شماره تلفنمونو میپرسه . شماره همون اکانتی که میخوایم ربات روش پیاده سازی کنیم رو بهش میدیم . شماره ای که میدیم باید با کد کشور شروع بشه یعنی به فرم زیر باشه :
+98XXXXXXXXXX
بعد از اینکه شماره رو دادیم یه کد ارسال میشه به اکانت تلگراممون روی همون شماره . اون کد رو وارد کنید و برید مرحله ی بعدی .
در مرحله ی بعد مانند تصویر زیر ، یه صفحه ای میاد که سه تا گزینه داره . گزینه ی اول یعنی "API Development Tools" رو انتخاب میکنیم :
پس از انتخاب گزینه یه فرم اطلاعات به ما نشون داده میشه که با اطلاعات دلخواه پر میکنیم . گزینه ی platform رو بهتر هستش روی Desktop بزنید :
پس از نوشتن اطلاعات مورد نظر خودتون دکمه ی Create Application در پایین صفحه رو بزنید .
پس از تکمیل مراحل بالا اطلاعات اپلیکیشن مانند تصویر زیر به شما نشون داده میشه . ما به دو مورد آن ها نیاز داریم پس یه جا یادداشتش کنید . api_id و api_hash رو یه جا بنویسید بعدا داخل اسکریپت نیاز داریم .
۲ - نصب کتابخونه ی telethon :
پس از طی کردن مرحله ی اول یعنی ساخت اپلیکیشن تلگرام نیاز داریم تا کتابخونه ی مورد نیاز یعنی telethon رو نصب کنیم . برای نصب این کتابخونه از ابزار pip استفاده میکنیم :
نصب telethon در لینوکس :
MrPython@debian:~$ sudo pip3 install telethon
نصب telethon در ویندوز :
C:\> pip install telethon
پس از نصب کتابخونه میریم سراغ سورس کد .
ما امروز دو مورد سورس کد مینویسیم . سورس کد اول کارش اینه که یه لیست آی دی تلگرام بهش میدیم ، سپس به همشون یه پیام خاص ارسال میکنه .
سورس کد دوم کارش اینه که یه لیست آی دی تلگرام بهش میدیم و میاد عکس پروفایل همشونو دانلود میکنه و رو سیستممون ذخیره میکنه . (جمع آوری اطلاعات)
برای نوشتن دو سورس بالا ابتدا باید با چند تابع و ... از کتابخونه ی telethon آشنا بشیم تا بتونیم به اکانتمون وصل بشیم . اولین قدم در نوشتن اسکریپت های بالا اینه که به اکانتمون وصل بشیم .
فقط یه نکته ی خیلی مهم اینه که برای اجرا کردن این سورس ها باید چند تا مورد رو رعایت کنین . یکی اینکه برای اطمینان این اسکریپت ها رو با دسترسی کامل اجراشون کنین (داخل لینوکس با دسترسی root و داخل ویندوز با دسترسی administrator) و اینکه به دلیل فیلترینگ تلگرام باید با VPN این اسکریپت ها رو اجرا کنید .اگه ویندوز دارین که میتونید یه VPN نصب کنین روی سیستمتون . اگه هم لینوکس دارین میتونید از پروکسی Tor استفاده کنید .(اینا پیشنهاده هر پروکسی که راحت ترین اجرا کنید)
خب سورس زیر میاد یه کلاینت از اکانتمون میسازه (در واقع از طریق اپلیکیشنی که در بالا ساختیم وصل میشه به اکانتمون):
from telethon import TelegramClient , events , sync # API variables api_id = 1234567 api_hash = "api hash"
# Client Object client = TelegramClient("session_name" , api_id , api_hash) client.start()
توضیح : در ابتدا ماژول های مورد نیاز رو از کتابخونه ی telethon ایمپورت کردیم . سپس در زیر کامنت api variables دو متغییر تعریف کردیم . در متغییر api_id شماره ی api id که در مراحل قبل یادداشت کردیم رو مینویسیم . همچنین در متغییر api_hash ، کد api hash که در مراحل قبل یادداشت کردیم رو به صورت استرینگ مینویسیم .
پس از اون در زیر کامنت Client object ، آبجکت کلاینتمون رو مینویسیم و عملا وصل میشیم به اکانتمون .
در ابتدا با استفاده از TelegramClient اومدیم شیء کلاینتمون رو ساختیم و ریختیم داخل متغییر client . کلاس TelegramClient سه ورودی از ما گرفته . اولین ورودی اسم session هستش که میتونید یه اسم دلخواه بزارید . ورودی بعدی api id هستش که متغییر api_id رو بهش دادیم و ورودی سوم api hash هستش که متغییر api_hash رو بهش دادیم .
در سورس بالا ما تونستیم به اکانتمون وصل بشیم . حالا دو مورد سورسی که گفتیم رو میتونیم با استفاده از سورس بالا بنویسیم .
۱ - سورس ارسال پیام خودکار به لیستی از آی دی های تلگرام :
from telethon import TelegramClient , events , sync
# API variables
api_id = 1234567
api_hash = "api hash"
# Client Object
client = TelegramClient("session_name" , api_id , api_hash)
client.start()
# send message
usernames = ["username1" , "username2" , "username3" , "username4"]
message = """hi i am a telegarm client
i will send you messages automatically !
:)"""
for username in usernames:
client.send_message(username , message)
print("sending message to {}".format(username))
client.log_out()
client.disconnect()
توضیح : قسمت های api variables و client object رو در قسمت قبلی توضیح دادیم . در این سورس قسمت send message به سورس قبلی اضافه شده است .
همینطور که میبینید پس از اتصال به اکانتمون اومدیم یه لیستی تعریف کردیم به اسم usernames که یه سری آی دی تلگرامی که میخوایم بهشون پیام ارسال کنیم رو داخلش نوشتیم . همچنین یه متغییر به نام message تعریف کردیم که پیامی که قرار هست بهشون ارسال کنیم رو داخلش نوشتیم .
در خط بعدی یه حلقه ی for نوشتیم که میاد به تک تک آی دی ها با استفاده از متود client.send_message پیام ارسال میکنه . این متود دو ورودی میگیره . ورودی اول همون آی دی تلگرامی هستش که میخوایم بهش پیام ارسال کنیم و ورودی دوم خود پیام هست که بهش دادیم .
بعد از ارسال پیام یه متنی چاپ کردیم و گفتیم که به فلان آی دی پیام ارسال شد .
پس از اتمام حلقه ی for با استفاده از client.log_out اومدیم از اکانت خارج شدیم و با استفاده از client.disconnect ، از کلاینت قطع شدیم .
۲ - سورس دانلود عکس پروفایلِ لیستی از آی دی های تلگرامی :
from telethon import TelegramClient , events , sync
# API variables
api_id = 1234567
api_hash = "api hash"
# Making Client Object
client = TelegramClient("session" , api_id , api_hash)
client.start()
# download photo from profile
usernames = ["username1" , "username2" , "username3"]
for username in usernames:
photo = client.download_profile_photo(username)
print("{} saved !".format(photo))
client.log_out()
client.disconnect()
توضیح : این سورس شباهت زیادی به سورس های قبلی داره . تنها تفاوتی که داره داخل حلقه ی for هستش . ما مثل سورس قبلی لیستی از آی دی های تلگرامی رو ریختیم داخل لیست usernames . سپس در حلقه ی for با استفاده از متود client.download_profile_photo اومدیم پروفایل هر کدوم از آی دی ها تلگرامی رو دانلود کردیم . ما یک ورودی به این تابع دادیم که همون آی دی تلگرامی هستش که میخواد پروفایلشو دانلود کنه. پس از دانلود اونا ما اسم فایل عکس ذخیره شده رو ریختیم داخل متغییر photo و اونو در خط بعد چاپ کردیم . (عکس ها در همون مسیری که اسکریپتو اجرا کردیم ذخیره میشن).
کتابخونه ی telethon کلی تابع دیگه داره که میشه باهاشون کارای جالبی کرد . برای مثال تابع client.get_message(username) لیستی از پیام هایی که username به ما فرستاده رو برمیگردونه . برای یادگیری بیشتر این کتابخونه میتونید از لینک زیر استفاده کنید :
https://docs.telethon.dev/en/latest/
یا حق !
Telegram Channel : @mrpythonblog