Cat

AIOgram3 6. Информирование администратора

В этом посте, сделаем оповещение администратора о запуске или остановке бота и продолжим формировать структуру.

Все статьи

Icon Link

Дополнительные материалы

Icon Link

Реклама

Icon Link
Telegram-бот на AIOgram3 proDream 08 Август 2023 Просмотров: 2969

Перейдём в файл settings.py и в поле admin_id в классе Secrets пропишем ваш Telegram-ID. Получить его можно у бота https://t.me/getmyid_bot

 

Пакет Handlers.

В пакете botlogic создадим новый пакет handlers
Напоминаю, что пакет можно создать средствами IDE, выбрав создать новый Python Package или создать вручную, создав директорию и в ней пустой файл init.py.
В нём у нас будут находиться обработчики сообщений пользователей, команд или различных событий.

 

Events.py.

В пакете handlers создадим файл events.py

 

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

from botlogic.settings import bot, Secrets


async def start_bot():
    await bot.send_message(Secrets.admin_id, 'Бот запущен')


async def stop_bot():
    await bot.send_message(Secrets.admin_id, 'Бот остановлен')

 

Мы создали две асинхронные функции start_bot и stop_bot. В теле функции вызвали метод send_message из экземпляра класса Bot. В метод первым параметром передаётся Telegram-ID получателя, а вторым текст сообщения. 
Однако, вот так оставлять текст в функции не правильно. В случае, если надо будет изменить текст, в его поисках придётся перелопатить часть файлов бота. По этому, давайте создадим единый файл, в котором будем хранить все текстовые сообщения.

 

Views.py.

В пакете botlogic создадим файл views.py.
И создадим две функции start_bot_msg и start_bot_msg:

def start_bot_msg():
    return 'Бот запущен'

def stop_bot_msg():
    return 'Бот остановлен'

 

Две простейшие функции, возвращающее текст при вызове. Изменим наши функции в файле events.py, что бы они получали строки из только что созданных функций:

from botlogic.settings import bot, Secrets
from botlogic.views import start_bot_msg, stop_bot_msg


async def start_bot():
    await bot.send_message(Secrets.admin_id, start_bot_msg())


async def stop_bot():
    await bot.send_message(Secrets.admin_id, stop_bot_msg())

 

Регистрация событий.

Осталось только зарегистрировать данные события.
Переходим в файл main.py и в функции start(), под вызовом диспетчера прописываем следующие строки:

from botlogic.handlers.events import start_bot, stop_bot

    dp.startup.register(start_bot)
    dp.shutdown.register(stop_bot)

Это встроенные методы диспетчера. Зарегистрировав события, когда в блоке try-finally запустится бот, он автоматически вызовет нашу функцию start_bot() и мы получим уведомление от бота. С остановкой бота аналогично.

Запустим бота и убедимся, что уведомления приходят, а в терминале появился лог событий.

Автор

    Нет комментариев

    Реклама