برای اینکه بتونیم یوزر تلگرام رو به جنگو متصل کنیم اول باید چند کار رو انجام بدیم.
بعد از نصب جنگو و کارهای اولیه، پکیج زیر و نصب می کنیم.
pip install django-telethon
و بعد در فایل settings.py به عنوان یک اپ نصب شده معرفیش می کنیم.
INSTALLED_APPS = [ # .... 'django_telethon', # ... ]
بعد هم یو آر ال ها رو تعریف می کنیم که بتونیم ازشون استفاده کنیم.
from django.contrib import admin from django.urls import path from django_telethon.urls import django_telethon_urls admin.autodiscover() urlpatterns = [ path('admin/', admin.site.urls), path('telegram/', django_telethon_urls()), ]
در آخر هم دیتابیس رو بروز می کنیم.
python manage.py migrate
و همین. پروسه نصب تموم شد. حالا بریم سراغ اتصال یوزر یا بات به تلگرام.
اول یه سر به این سایت تلگرام بزنین و از قسمت API Development tools یک اپلیکیشن جدید بسازید. هیچ یو آر الی هم لازم نیست وارد کنید و فقط در انتها بعد از ساخته شدن این صفحه رو نبندید که با اون کار داریم.
حالا برنامه جنگو رو ران کنید.
python manage.py runserver
و بعد از اون سرویس تلگرام رو ران می کنیم.
python manage.py runtelegram
دقت کنین که بزارین هر دو باز بمونن و نبندینشون.
بعد از این مراحل از لینک زیر وارد پنل ادمین بشید و یک اپ جدید بسازید. مقادیر مورد نیاز رو از اپی که در تلگرام ساختین وارد کنین.
http://127.0.0.1:8000/admin/django_telethon/app/
مرحله بعد اینه که با استفاده از پست من یا هر ابزاری که باهاش راحت هستید، یک ریکوئست برای درخواست توکن و یک ریکوئست برای ورود به تلگرام بزنیم. (در مجموع دو تا) من برای اینکه در اینجا واضح تر باشه، ریکوئست ها رو با پایتون میزنم. پس یک ترمینال پایتونی باز کنید و ریکوئست زیر رو بزنین.
import requests import json url = "127.0.0.1:8000/telegram/send-code-request/" payload = json.dumps({ "phone_number": "+12345678901", "client_session_name": "name of the client session" }) headers = { 'Content-Type': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
طبیعتا به جای phone_number و client_session_name شماره تلفن و اسم دلخواهتون رو وارد کنید و درخواست رو ارسال کنید. منتظر بشید تا کد تایید براتون روی تلگرام نمایش داده بشه. ممکن ه حدود سی ثانیه تا یک دقیقه طول بکشه.
اگر در همین زمان لینک پایین رو چک کنید یک درخواست ورود ثبت شده:
http://127.0.0.1:8000/admin/django_telethon/login/
مرحله بعدی باید تایید رو انجام بدیم.
import requests import json url = "127.0.0.1:8000/telegram/login-user-request/" payload = json.dumps({ "phone_number": "+12345678901", "client_session_name": "name of the client session", "code": "1234", "password": "1234" }) headers = { 'Content-Type': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
همون شماره تلفن و همون client_session_name قبلی رو اینجا وارد کنید و کدی که براتون اومده رو در قسمت کد و برای password اگر از Two-Step Verification استفاده می کنید اون رو در قسمت پسورد بفرستید وگرنه یک رشته خالی ارسال کنید. بعد از حداکثر یک دقیقه اگر همه چیز رو درست وارد کرده باشید باید پیام ورود از تلگرام دریافت کنید و در لینک زیر هیچ رکوردی نباید وجود داشته باشد.
http://127.0.0.1:8000/admin/django_telethon/login/
توی لینک زیر هم باید احتمالا چند تا رکورد مشاهده کنید.
http://127.0.0.1:8000/admin/django_telethon/entity/
فرض کنید من میخوام کاری کنیم، هر کسی به من پیام ping رو داد، من در جواب بهش بگم pong چیکار کنیم؟
بیاید یک اپ جدید به اسم تلپای ایجاد کنیم.
python manage.py startapp telpy
بعد توی فایل settings.py به عنوان یک اپ نصب شده معرفیش می کنیم.
INSTALLED_APPS = [ # .... 'telpy', # ... ]
یک فایلی که مطمئن باشیم که برنامه که لود میشه اون فایل لود میشه رو باز می کنیم. مثلا فایل models.py رو انتخاب می کنیم و بازش می کنیم و کدهای زیر و میزاریم.
from functools import partial from django.dispatch import receiver from telethon import events from django_telethon.signals import telegram_client_registered async def event_handler(event, client_session): print(client_session.name, event.raw_text, sep=' | ') # if you need access to telegram client, you can use event.client # telegram_client = event.client await event.respond('!pong') @receiver(telegram_client_registered) def receiver_telegram_registered(telegram_client, client_session, *args, **kwargs): handler = partial(event_handler, client_session=client_session) telegram_client.add_event_handler( handler, events.NewMessage(pattern='ping'), )
حالا هر دو تا جنگو و تلگرام رو استاپ می کنیم.
برنامه جنگو رو مجدد ران کنید.
python manage.py runserver
و بعد از اون سرویس تلگرام رو مجدد ران می کنیم.
python manage.py runtelegram
دقت کنین که بزارین هر دو باز بمونن و نبندینشون.
یک پیام با مزمون ping بفرستید.
اینم لینک گیت هاب پروژه
https://github.com/ali-zahedi/django-telethon
اگر موردی دیدید و یا دوست داشتید چیزی کم یا زیاد بشه، ممنون میشم اونجا در موردش صحبت کنیم.
همینطور اگر روی گیت هاب بهش ستاره بدید برای من خیلی ارزشمند خواهد بود و متوجه میشم که دوستش داشتید.
اگر دوست داشتید این مطلب ادامه داشته باشه و در موردش بیشتر صحبت بشه بهش ستاره بدید و توی کامنت ها بهم بگید!