BotHub
Разработчик ботов
Для реализации взаимодействия с протоколом Telegram MTProto, был разработан модуль Pyrogram. Он охватывает практически все методы работы с данным протоколом, с помощью своих методов, а также не стандартные операции с помощью взаимодействия с «сырыми методами Telegram MTProto».
Для полноценной работы с Pyrogram достаточно установить 2 пакета.
Для начала работы с модулем нужно импортировать класс Client.
Проведем инициализацию класса, и зададим 3 основных параметра, необходимых для работы. Но перед этим, перейдем по адресу https://my.telegram.org/auth и создадим приложение.
session_name – строка, название файла сессии, в этом файле будут хранится данные авторизации, ключи, списки чатов и контакты.
api_id – API ID, строка или число, из приложения.
api_hash – API HASH, строка, хэш сгенерированный в приложении.
Класс позволяет принять в качестве параметров такие данные как прокси, пути к файлу сессии, язык клиента, операционная система, вид устройства, версия вашего приложения, номер телефона и код из смс (служащие для авторизации или для регистрации нового аккаунта), а также пути к файлу с настройками, на нем мы остановимся подробнее, и его будем использовать в дальнейшем во всех проектах.
Файл config.ini должен содержать, 2 обязательных значения, api_id, api_hash.
Или можем добавить больше настроек
Модуль можно запускать как для одноразового действия, например, для вывода информации по профилю или для вывода списка пользователей группы. Так и для продолжительной обработки данных, например, для рассылки сообщений, обработке входящих сообщений, или реакции на медиа данные.
В первом случае, для начала работы нужно запустить функцию start() и для закрытия соединения stop()
Модуль поддерживает автоматическое открытие и закрытие соединения, с помощью менеджера контекста with, вместо start stop мы будем использовать его.
При первом запуске соединения, модулем будет предложено пройти авторизацию вашего аккаунта, или создание нового. В процессе автоматически будет создан файл сессии, и именем уставленном нами в аргументах класса Client. Последующие соединения, процесса авторизации не потребуют.
Во втором случае, нужно воспользоваться функцией run(), она выводится в конце всего кода использующего функционал модуля.
Перед тем как перейдем к разбору основных методов, уделим внимание обработке ошибок.
При появлении ошибки Flood, доступна информация по лимиту, нужно приостановить работу скрипта на требуемое значение
Для обработки входящих данных, в модуле реализованы соответствующие декораторы.
Разберём обработку входящий сообщений
Запустим его и увидим, что данная функция фиксирует все данные, со всех чатов, групп, каналов, входящие и исходящие сообщения. Работать с такой функцией естественно не удобно. Поэтому, были разработаны фильтры. Для работы с ними их нужно импортировать.
К примеру, будем фиксировать только свои собственные сообщения
Или сообщения от определенного пользователя
Фильтры можно совмещать используя логические операторы ~, отрицание (not) или инверсия, & в значении and и | в значении or. Для группировки фильтров можно использовать скобки как в арифметике. Есть возможность создавать и свои собственные пользовательские фильтры. Больше информации по остальным фильтрам, можете посмотреть в документации.
Для отправки сообщений, их редактирования, удаления и вывода сообщений и данных, разработаны соответствующие функции, рассмотрим некоторые из них.
Отправим сообщение
Ответим на сообщение
Модуль поддерживает как такой вид записей, так и специально выведенные функции, вместо выше упомянутого выражения, можно записать
Редактировать сообщение
или
Для полноценной имитации работы клиента, а так же для информировании ваших собеседников о ваших действиях, разработана функция send_chat_action(), для полноценной работы с ней нужно импортировать класс ChatAction.
Сигнализируем о наборе текста перед его отправкой
Для информирования о записи голосового сообщения
Список документации и модулей рассмотренных в статье:
Для полноценной работы с Pyrogram достаточно установить 2 пакета.
Код:
pip3 install --upgrade pyrogram
pip3 install --upgrade tgcrypto
Для начала работы с модулем нужно импортировать класс Client.
Код:
from pyrogram import Client
Проведем инициализацию класса, и зададим 3 основных параметра, необходимых для работы. Но перед этим, перейдем по адресу https://my.telegram.org/auth и создадим приложение.
Созданное приложение, можно использовать для работы с несколькими аккаунтами.
session_name – строка, название файла сессии, в этом файле будут хранится данные авторизации, ключи, списки чатов и контакты.
api_id – API ID, строка или число, из приложения.
api_hash – API HASH, строка, хэш сгенерированный в приложении.
Код:
app = Client(session_name='account', api_id=621565, api_hash='a683912c81ce5e98f754f9e2a5e7fc05')
Класс позволяет принять в качестве параметров такие данные как прокси, пути к файлу сессии, язык клиента, операционная система, вид устройства, версия вашего приложения, номер телефона и код из смс (служащие для авторизации или для регистрации нового аккаунта), а также пути к файлу с настройками, на нем мы остановимся подробнее, и его будем использовать в дальнейшем во всех проектах.
Файл config.ini должен содержать, 2 обязательных значения, api_id, api_hash.
Код:
[pyrogram]
api_id = 621565
api_hash = a683912c81ce5e98f754f9e2a5e7fc05
Или можем добавить больше настроек
Код:
[pyrogram]
app_version = 0.0.1
device_model = PC
system_version = Windows
lang_code = ru
api_id = 621565
api_hash = a683912c81ce5e98f754f9e2a5e7fc05
Файл конфигурации должен иметь название config.ini и находится в одной директории со скриптом.
Модуль можно запускать как для одноразового действия, например, для вывода информации по профилю или для вывода списка пользователей группы. Так и для продолжительной обработки данных, например, для рассылки сообщений, обработке входящих сообщений, или реакции на медиа данные.
В первом случае, для начала работы нужно запустить функцию start() и для закрытия соединения stop()
Код:
app.start()
# Ваш код
app.stop
Модуль поддерживает автоматическое открытие и закрытие соединения, с помощью менеджера контекста with, вместо start stop мы будем использовать его.
Код:
with app:
# Ваш код
При первом запуске соединения, модулем будет предложено пройти авторизацию вашего аккаунта, или создание нового. В процессе автоматически будет создан файл сессии, и именем уставленном нами в аргументах класса Client. Последующие соединения, процесса авторизации не потребуют.
Настоятельно рекомендуется, использовать, аккаунты, которым больше 1 месяца. Аккаунты только что созданные (или которым несколько часов или дней), или созданные с помощью самого скрипта, со 100% гарантией, будут забанены по номеру телефона!!!
Во втором случае, нужно воспользоваться функцией run(), она выводится в конце всего кода использующего функционал модуля.
Код:
# Ваш код
app.run()
По умолчанию, модуль использует много поточность, использовать свои сценарии для это, не требуется.
Перед тем как перейдем к разбору основных методов, уделим внимание обработке ошибок.
- 303 - See Other
- 400 - Bad Request
- 401 - Unauthorized
- 403 - Forbidden
- 406 - Not Acceptable
- 420 - Flood
- 500 - Internal Server Error
- 520 - Unknown Error
Код:
from pyrogram.api.errors import (
BadRequest, Flood, InternalServerError,
SeeOther, Unauthorized, UnknownError
)
try:
# Ваш код
except BadRequest: # 400 - Неверный запрос
pass
except Flood: # 420 - Превышен лимит количества запросов
pass
except InternalServerError: # 500 - Внутренняя ошибка сервера
pass
except SeeOther: # 303 - Запрос следующего значения
pass
except Unauthorized: # 401 - Неразрешенное действие
pass
except UnknownError: # 520 - Неизвестная ошибка
pass
При появлении ошибки Flood, доступна информация по лимиту, нужно приостановить работу скрипта на требуемое значение
Код:
try:
# Ваш код
except FloodWait as e:
time.sleep(e.x)
Для обработки входящих данных, в модуле реализованы соответствующие декораторы.
- on_message – регистрация сообщений
- on_callback_query – регистрация обратных вызовов
- on_deleted_messages – регистрация удаленных сообщений
- on_user_status – регистрация изменений статуса пользователей
- on_disconnect - регистрация отключении
- on_raw_update – регистрация «сырых данных»
Разберём обработку входящий сообщений
Код:
@app.on_message()
def my_handler(client, message):
print(message)
app.run()
Запустим его и увидим, что данная функция фиксирует все данные, со всех чатов, групп, каналов, входящие и исходящие сообщения. Работать с такой функцией естественно не удобно. Поэтому, были разработаны фильтры. Для работы с ними их нужно импортировать.
Код:
from pyrogram import Filters
К примеру, будем фиксировать только свои собственные сообщения
Код:
@app.on_message(Filters.me)
def my_handler(client, message):
print(message)
app.run()
Или сообщения от определенного пользователя
Код:
@app.on_message(Filters.user('user'))
def my_handler(client, message):
print(message)
app.run()
Фильтры можно совмещать используя логические операторы ~, отрицание (not) или инверсия, & в значении and и | в значении or. Для группировки фильтров можно использовать скобки как в арифметике. Есть возможность создавать и свои собственные пользовательские фильтры. Больше информации по остальным фильтрам, можете посмотреть в документации.
Для отправки сообщений, их редактирования, удаления и вывода сообщений и данных, разработаны соответствующие функции, рассмотрим некоторые из них.
Отправим сообщение
Код:
@app.on_message()
def my_handler(client, message):
app.send_message(
chat_id=message.chat.id,
text='Hello World'
)
app.run()
Ответим на сообщение
Код:
@app.on_message()
def my_handler(client, message):
app.send_message(
chat_id=message.chat.id,
text='Hello World',
reply_to_message_id=message.reply_to_message.message_id
)
app.run()
Модуль поддерживает как такой вид записей, так и специально выведенные функции, вместо выше упомянутого выражения, можно записать
Код:
message.reply('Hello World', quote=True)
Редактировать сообщение
Код:
app.edit_message_text(
chat_id=message.chat.id,
message_id=message.message_id,
text='Hello Wold'
)
app.run()
или
Код:
message.edit('Hello World')
Полный список всех функций и сокращений, можете посмотреть в документации.
Для полноценной имитации работы клиента, а так же для информировании ваших собеседников о ваших действиях, разработана функция send_chat_action(), для полноценной работы с ней нужно импортировать класс ChatAction.
Код:
from pyrogram import ChatAction
Сигнализируем о наборе текста перед его отправкой
Код:
app.send_chat_action(message.chat.id, ChatAction.TYPING)
Для информирования о записи голосового сообщения
Код:
app.send_chat_action(message.chat.id, ChatAction.RECORD_AUDIO)
Остальные информаторы действий указаны в документации.
Список документации и модулей рассмотренных в статье:
Последнее редактирование: