در قسمت قبل یادگرفتیم که چطور به تلگرامی که ساختیم لاگین بشیم، در این قسمت میخوایم یاد بگیریم که چطور پیامهایی که برامون میاد رو در محیط کنسول مشاهده کنیم.
خب برای شروع ابتدا کدشو مینویسم و بعد به توضیحش میپردازم:
from telethon.sync import TelegramClient, events with TelegramClient('account', c.api_id, c.api_hash) as client:
خب در خط اول importهای لازم رو انجام دادیم و سپس از کلاس TelegramClient یک نمونه client ساختیم، حالا باید از متدهای از پیش تعریف شده این کلاس جهت دریافت پیامهای ورودی استفاده کنیم.
@client.on(events.NewMessage(pattern='سلام'))
پارامترهای ورودی به این شکل است که از کلاس events متد NewMessage رو بهش میدیم، دقت کن که این متد یک ورودی میخواد، همونطور که میبینی، اینجا پارامتر pattern به کلاس داده شده.
اما این پارامتر برای چیست؟ اگر این کد رو همین جور که نوشتم اجرا کنی، هرپیام که "سلام" باشه، به کنسول هدایت میشه، دقت کن هر پیامی که فقط "سلام" باشه نه هرپیامی که حاوی سلام باشه، نکتهی حائز اهمیت که گفتنش مفیده، اینه که شما میتونید از الگوهای regex هم استفاده کنید مثل کد زیر:
@client.on(events.NewMessage(pattern='(?i).*'))
در این مثال کلاینت ما تمام پیامهایی که بهش ارسال شده رو در خروجی نمایش میده البته هنوز کد ادامه هم داره (ツ) بریم سروقت ادامش!
برای اینکه بتونیم پیامها رو ببینیم باید event رو هندل کنیم و عملیاتهای لازم رو مانند کد زیر روش انجام بدیم:
async def handler(event): try: msg = f"ChatId: {event.peer_id.user_id} \n" msg += f"Text: {event.message.message}" print(msg) except: print("Chat is not contact!")
در این مثال من فقط تصمیم دارم پیامهایی که از افراد میاد رو بخونم(به اصطلاح contacts و non-contacts) و فقط به user_id و متن اونا نیاز دارم، دقت کنید که اینجا event نقش یک ساختمان داده در واقع یک list هستش و تمام اطلاعاتی که مربوط به فرستنده است داخلش قرار گرفته که در کل دارای چنین عناصریست:
NewMessage.Event( original_update=UpdateShortMessage( id=245, user_id=441660894, message='Hello', pts=484, pts_count=1, date=datetime.datetime(2021, 11, 29, 11, 46, 36, tzinfo=datetime.timezone.utc), out=False, mentioned=False, media_unread=False, silent=False, fwd_from=None, via_bot_id=None, reply_to=None, entities=[], ttl_period=None ), pattern_match=<re.Match object; span=(0, 5), match='Hello'>, message=Message( id=245, peer_id=PeerUser( user_id=441660894 ), date=datetime.datetime(2021, 11, 29, 11, 46, 36, tzinfo=datetime.timezone.utc), message='Hello', out=False, mentioned=False, media_unread=False, silent=False, post=None, from_scheduled=None, legacy=None, edit_hide=None, pinned=None, from_id=PeerUser( user_id=441660894 ), fwd_from=None, via_bot_id=None, reply_to=None, media=None, reply_markup=None, entities=[], views=None, forwards=None, replies=None, edit_date=None, post_author=None, grouped_id=None, restriction_reason=[], ttl_period=None ) )
خب برنامه ما آمادست اما باید این برنامه متوقف نشه تا زمانی که خودمون بخوایم، پس برای اجرای خودکار و بدون توقف خط زیر رو به کدمون اضافه میکنیم:
client.run_until_disconnected()
حالا ما برنامهای داریم که هرموقع کاربری پیام "سلام" یا هرپیامی رو برامون بفرسته، user_id و متن پیام رو بهمون نشون میده، نمای کلی کد (دریافت هرنوع پیامی):
from telethon.sync import TelegramClient, events with TelegramClient('account', c.api_id, c.api_hash) as client: print("Start ..") @client.on(events.NewMessage(pattern='(?i).*')) async def handler(event): try: msg = "\n" msg += f"ChatId: {event.peer_id.user_id} \n" msg += f"Text: {event.message.message}" print(msg) except: print("Chat is not contact!") client.run_until_disconnected()
پیروز و شاد باشید، پایان قسمت ۳ (ツ)
قسمتهای قبل:
قسمت ۱ - دریافت دسترسی از تلگرام
قسمت ۲ - لاگین شدن به برنامه