AIOgram3 6. Информирование администратора
В этом посте, сделаем оповещение администратора о запуске или остановке бота и продолжим формировать структуру.
Дополнительные материалы
Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в Telegram-боте по коду: 270319
Реклама
Перейдём в файл 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()
и мы получим уведомление от бота. С остановкой бота аналогично.
Запустим бота и убедимся, что уведомления приходят, а в терминале появился лог событий.
Все статьи