• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

# BotsBlog | Telegram Core. Pyrogram: введение, настройки, основные методы

Статус
В этой теме нельзя размещать новые ответы.

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
Для реализации взаимодействия с протоколом Telegram MTProto, был разработан модуль Pyrogram. Он охватывает практически все методы работы с данным протоколом, с помощью своих методов, а также не стандартные операции с помощью взаимодействия с «сырыми методами Telegram MTProto».

Для полноценной работы с 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)

Остальные информаторы действий указаны в документации.


Список документации и модулей рассмотренных в статье:

 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу