ساخت ربات تلگرام با Pyrogram: پاک کردن تمام پیام ها در گروه

تو پست این هفته ایرانی پای قراره ربات تلگرامی بسازیم که با کمک اون بتونیم همه پیام های خودمون تو گروه رو پاک کنیم. همونطور که میدونید تلگرام قابلیتی برای حذف همه پیام هایی که خودتون تو گروه فرستادین رو نداره و باید دونه دونه و دستی این کار انجام بشه که تقریبا غیرممکن به نظر میرسه، مگه اینکه ادمین باشید.

همیشه ممکنه موقعیت هایی پیش بیاد که به هر دلیلی دیگه نخوایم پیام هامون تو گروه وجود داشته باشه، اونجاست که این ربات به دادمون میرسه و با یک دستور ساده کار حذف پیام ها رو برامون انجام میده.


تلگرام

قطعا تا حالا از تلگرام استفاده کردید یا اسمش رو از دیگران شنیدید. تلگرام یک پیامرسان قدرتمند با قابلیت های بسیار زیاده که تو سراسر دنیا کاربرهای زیادی داره. ایران هم مستثنی نیست و ایرانی های زیادی ازش استفاده میکنن. این پیامرسان علاوه بر همه ویژگی های خوبی که تو زمینه پیامرسانی داره، یک API قدرتمند و البته رایگان داره که این امکان رو به ما میده که سطح استفاده از این پیامرسان رو به یک مرحله بالاتر ببریم.

پایروگرام (Pyrogram)

پایروگرام یک فریمورک پیشرفته و در عین حال ساده (سطح بالا)، برای تلگرامه که به زبان Python و C نوشته شده که از فناوری MTProto API استفاده میکنه و برای ساخت همه مدل رباتی کاربرد داره.


نصب پیش نیازها

برای استفاده از پایروگرام به پایتون نسخه 3.6 یا بالاتر و آخرین نسخه PIP نیاز داریم.

از طریق دستور

pip3 install -U pyrogram tgcrypto

پایروگرام و TGCrypto رو نصب میکنیم. طبق داکیومنت پایروگرام، TGCrypto تو سرعت و عملکرد تاثیر چشمگیری داره؛ پس بهتره که نصب بشه.


تنظیمات و پیکربندی

تو پوشه اصلی پروژه و کنار فایل اصلی برنامه، فایلی به اسم config.ini می سازیم و این سه خط رو توش مینویسیم

[pyrogram]
api_id = 12345678
api_hash = example456123example

هر اکانت تلگرام API id و API hash مخصوص به خودش رو داره. برای گرفتن اینا لازمه که

  1. تو سایت تلگرام لاگین کنید.
  2. فرم مربوط به ساخت application جدید رو پر کنید.
  3. مقدار API id و API Hash رو کپی کنید و تو فایل config.ini جایگذاری کنید.

راه اندازی اولیه

تو این قسمت بعد از ساخت فایل main.py این 3 خط رو توش مینویسیم

from pyrogram import Client

app = Client(&quotiranipy&quot)
app.run()

تو کد بالا یک instance از کلاس Client ساختیم، به متغیر app نسبتش دادیم و یک اسم دلخواه به عنوان پارمتر بهش پاس دادیم(در اینجا iranipy). این اسم کاملا دلخواهه و پایروگرام از اون به عنوان اسم فایل نشستی (session) که در ادامه میسازه استفاده میکنه. از app برای ارتباط با API تلگرام استفاده میکنیم.

بعد از نوشتن این کدها فایل رو اجرا میکنیم. بعد از اجرا کردن ازتون میخواد که شماره تلفن به همراه کد کشور (*********989+) رو وارد کنید. بعد از اون کدی که تلگرام براتون ارسال میکنه رو وارد کنید. تبریک میگم با موفقیت وارد اکانتتون شدید و آماده ساخت ربات هستید.


نوشتن برنامه اصلی

لازمه که ماژول filters رو از پایروگرام ایمپورت کنیم:

from pyrogram import Client, filters

خب در ادامه کدهایی که مسئول کارکرد اصلی برنامه هستند رو مینویسیم. این کدها باید قبل از ()app.run نوشته بشن:

@bot.on_message(filters.command('del') & filters.me)
def delete_my_messages(_, message):
    chat_id = message.chat.id
    for message in bot.iter_history(chat_id):
        if message.from_user.id == your_id:
            message.delete()

اول از همه از دکوریتر on_message استفاده کردیم. این دکوریتر برای هندل کردن پیام ها استفاده میشه یعنی فقط زمانی که یک پیام ارسال بشه و از فیلترهای نوشته شده بتونه عبور کنه، این تابع صدا زده میشه.

دو تا فیلتر به عنوان آرگومان on_message تعریف کردیم؛ اولی فیلتر commands هست که آرگومانش میشه دستوری که میخوایم با ارسال اون ربات کاری رو انجام بده؛ تو مثال ما اگه تو گروهی دستور del/ رو ارسال کنیم، ربات کار میکنه و در غیر صورت کاری نمیکنه.

برای نوشتن فیلتر بعدی از عملگر & استفاده کردیم؛ این عملگر مشخص میکنه که یک پیام باید از هر دو فیلتر عبور کنه وگرنه قابل قبول نیست.

فیلتر دوم فیلتر me هست؛ این فیلتر برای اینه که ربات به کسی غیر از صاحب اکانت گوش نده (یعنی اگه کاربر دیگه ای تو گروه نوشت del/ ربات به دل نگیره).

خط بعدی تابع با اسم دلخواه delete_my_messages رو تعریف کردیم (توی پایروگرام به این تابع ها میگیم handler). به هر handler دو تا پارامتر پاس داده میشه؛ پس موقع تعریف تابع باید اونا رو درنظر بگیریم.

_ همون Client هست که چون ازش استفاده نمیکنیم اسمشو _ گذاشتیم اما دومین پارامتر با اسم message برامون مهمه. این پارامتر برای دسترسی به اطلاعات پیام های دریافتی استفاده میشه و یک instance از کلاس Message پایروگرام هستش.

تحلیل بدنه تابع:

  • خط اول بدنه تابع، id چتی که توش دستور del/ ارسال شده رو تو متغیر chat_id ذخیره میکنیم.
  • خط بعدی با استفاده از متد iter_history روی پیام های موجود تو اون گروه (با استفاده از chat_id گروه رو مشخص میکنیم) حلقه میزنیم.
  • خط بعدی شرط میذاریم که اگر آیدی پیام، آیدی ما بود، پیام رو پاک کن. کاری که اینجا لازمه انجام بدیم اینه که آیدی خودمون رو جایگزین your_id بکنیم (بهتره آیدیمونو توی config.ini بزاریم و از اونجا بخونیمش ولی برای سادگی و طولانی نشدن آموزش، فعلا hardcode میکنیم).
  • خط آخر هم با استفاده از متد delete پیام رو پاک میکنیم.

دریافت آیدی شخصی

این بخش برای دوستانی هست که نمیدونن چجوری آیدی تلگرامشون رو پیدا کنن. پس اگه تو این زمینه مشکلی ندارید میتونید از این بخش بگذرید.

برای اینکار یک handler دیگه تعریف میکنیم:

@app.on_message(filters.command('my id') & filters.me)
def my_id(_, message):
    print(message.from_user.id)

با این handler هر موقع که دستور my id/ رو ارسال کنید، آیدیتون تو همون shell ای که بات اجرا شده، پرینت میشه.


خب به آخر پست این هفته رسیدیم. تو این پست دیدید که که چجوری میشه ربات خیلی ساده و در حین حال کاربردی تلگرام رو تو چند خط کد پیاده کنید (به لطف سطح بالا بودن پایروگرام). از طریق پایروگرام میتونید هر رباتی که دوست دارید رو بسازید و از اون استفاده کنید. اگه به این زمینه علاقه دارید توصیه میکنم حتما به داکیومنت پایروگرام سر بزنید.

امیدواریم از این پست استفاده کافی رو برده باشید. اگه شما هم مثل ما از خوندن مطالب پایتونی لذت میبرید، خوشحال میشیم ما رو تو شبکه های اجتماعی دنبال و در صورت داشتن انتقاد و پیشنهاد ما رو ازش مطلع کنید. لایک هم یادتون نره :)


حمایت از ما

با دنبال کردن ما در

یا کمک مالی به مبلغ دلخواه از طریق درگاه آیدی پی میتونید از ما حمایت کنید.

وب سایت (به زودی): iranipy.ir