Telegram-бот на Pyrogram (Python): Анимация message, режим эха, команда About

Telegram-бот на Pyrogram (Python): Анимация message, режим эха, команда About

Сегодня разберем как можно сделать бота, который будет работать от клиента, то есть от нас. Для чего это может пригодиться? Мы сможем дополнять наши сообщения анимациями по команде, отвечать на какой-то текст от имени пользователей или даже создавать эффект эха (отправлять в ответ то же сообщение). Этот инструмент позволит нам использовать весь функционал Telegram. 

Что нам потребуется:

  1. Компьютер или ноутбук
  2. Редактор кода (У меня PyCharm)
  3. Python версии 3.9 и выше
  4. Соединение с интернетом

Установка 

Установка для windows:

pip install pyrogram tgcrypto

Для macOS:

pip3 install pyrogram tgcrypto

Получаем ключи для аккаунта

Переходим по ссылке на сайт телеграмм https://my.telegram.org/auth и вводим свой телефон:

Нам приходит код, который нужно вставить и нажать зарегистрироваться:

Дальше выбираем API development tools и нажимаем продолжить:

После регистрации мы попадаем в окно с API_HASH и API_ID, которые нам надо скопировать для работы бота:

Пишем код

Мы получили всё для запуска бота. Приступим!

Открываем объект клиента с помощью with. Внутрь него передаем имя сессии, хеш и айди. Это нужно, чтобы по завершению работы подключение к телеграмму автоматически закрылось. 

from pyrogram import Client

api_hash = "412379786ba59"
api_id = "112312398"

with Client(name="my_account", api_hash=api_hash, api_id=api_id) as app:
    app.send_message("me", "Это я бот")

Как только мы запустили программу, нам предлагается ввести номер телефона, потом код, только после мы сможем пользоваться всеми благами. Как вы могли заметить, у нас появился непонятный файл с расширением session. При подключении к любому сайту, сервису итд, у нас создается сессия. Это удобно - нам не нужно постоянно вводить пароль, мы просто предоставляем сертификат и входим.

После всех действий в избранном появляется сообщение «это я бот»:

Если мы не удалим доступ к сессии в телеграме или сам файл, при повторном запуске нам не потребуется вводить телефон и код (это важный момент, об этом часто забывают). 

Разрабатываем функционал телеграм-бота

Анимация текста

Чтобы обрабатывать команды на постоянной основе, конструкция with as не поможет. Она больше подходит для постоянной обработки сообщений. Здесь же мы прибегнем к структуре, похожей на используемую в aiogram:

import time

from pyrogram import Client, filters
from pyrogram.types import Message
from pyrogram.errors import FloodWait

api_hash = "412379786ba59"
api_id = "112312398"

# with Client(name="my_account", api_hash=api_hash, api_id=api_id) as app:
#     app.send_message("me", "Это я бот")

client = Client(name="my_account", api_hash=api_hash, api_id=api_id)


@client.on_message(filters.command("type", prefixes='!') & filters.me)
def type(client_object, message: Message):
    input_text = message.text.split("!type ", maxsplit=1)[1]
    temp_text = input_text
    edited_text = ""
    typing_symbol = "⁂"

    while edited_text != input_text:
        try:
            message.edit(edited_text + typing_symbol)
            time.sleep(0.05)
            edited_text = edited_text + temp_text[0]
            temp_text = temp_text[1:]
            message.edit(edited_text)
            time.sleep(0.05)
        except FloodWait:
            print("Превышен лимит сообщений")

client.run()

 

Выносим в отдельную переменную объект клиента. Дальше с помощью декоратора обрабатываем все сообщения.

Декоратор срабатывает на команду type с префиксом восклицательного знака (выглядит так !type) и реагирует на сообщения, отправленные именно нам. Первый аргумент - объект клиента, к которому мы можем обращаться как глобальному клиенту. А message – само сообщение (подробнее про message в официальной документации телеграмма тут). Чтобы получить подсветку синтаксиса, мы указываем тип сообщения через двоеточие. 

Анонсы всех видео, статей и полезностей - в нашем Telegram-канале🔥
Присоединяйтесь, обсуждайте и автоматизируйте!

Вначале мы берем текст отправленного сообщения и разделяем его на команду и сам текст для анимации. Дальше сохраняем во временную переменную для работы. Edited_text – текст сообщения для изменения. В него мы будем добавлять новые символы и анимацию со спец символом. Typing_symbol – символ для анимации. 

Дальше создаем цикл while с проверкой пока изменяемое сообщение не будет равное исходному. Оборачиваем все в try except, чтобы отслеживать ошибку FloodWait от телеграмма (о слишком частых запросах к телеграмму). 

Мы обращаемся к методу сообщения edit, как понятно из названия для изменения сообщения. Добавляем к edited_text по одному символу из изначального сообщения и спец символ и делаем задержку на 500 миллисекунд, чтобы не словить FloodWait.

Как это выглядит в чате:

Режим эхо в Telegram

Разберем простую функцию «эхо».

@client.on_message(filters.private)
def echo(client_object, message: Message):
    client_object.send_message(message.chat.id, f"вы сказали: {message.text}")

Для этого будем брать только сообщения из приватных чатов, то есть переписок.

Дальше мы получаем ID чата по сообщению и отправляем в ответ тоже сообщение с припиской «вы сказали:». Это самая проста функция реализации.

Выполнение команды About

@client.on_message(filters.command("about", prefixes='!') & filters.private)
def about(client_object, message: Message):
    text = """
    Я программист, котрый разработывает бот для разных меседжеров.\nНапример этого бота для моего аккаунта.
    """
    client_object.send_message(message.chat.id, text)

Мы будем отлавливать команды about, которые отправляет любой человек и высылать заданный текст в ответ. Допустим, это будет описание моей работы или список моих успешных проектов.

Filters.private – этот фильтр будет пропускать через себя только сообщения из приватных чатов (чатов между пользователями).

Внутри функции находится текст ответа в переменной text. Мы обращаемся к нашему клиенту и вызываем метод send_message. Первый аргумент - ID чата, куда мы хотим отправить сообщение, а второй - сам текст ответа.

Как это выглядит:

Заключение 

Сегодня мы разобрали библиотеку pyrogram для работы с аккаунтом Telegram. Теперь вы можете выйти на новый уровень взаимодействия с этим месседжером. 

Pyrogram позволит создать программу для сбора всех пользователей в группе или канале, сделать рассылку по базе пользователей и автоматизировать множество других полезных вещей. 

Полезные ссылки:

Документация Pyrogram: https://docs.pyrogram.org/
Примеры использования: https://github.com/ColinShark/Pyrogram-Snippets

Комментарии