Модуль для отправки уведомлений о возникших исключениях через Telegram-бота. Включает в себя класс для управления отправкой сообщений, а также декоратор, упрощающий процесс отслеживания исключений в функциях.
- Создайте виртуальное окружение:
- Для Windows:
python -m venv venv
- Для Linux или MacOS:
python3 -m venv venv
- Активируйте виртуальное окружение:
- Для Windows:
.\venv\Scripts\activate
- Для Linux или MacOS:
source venv/bin/activate
- Установите необходимые зависимости:
pip install -r requirements.txt
Перед использованием модуля выполните следующие шаги для настройки Telegram-бота и получения необходимых данных:
- Создание Telegram-бота и получение токена:
- Откройте Telegram и найдите бота @BotFather
- Начните диалог и отправьте команду /newbot для создания нового бота
- Следуйте инструкциям, задайте имя бота и уникальный username
- @BotFather предоставит вам токен для доступа к API. Сохраните этот токен, он потребуется для настройки модуля
- Получение chat_id (уникального идентификатора чата в Telegram.):
- Найдите своего бота в Telegram (используйте username, указанный при создании) и отправьте ему любое сообщение
- Откройте следующий URL в браузере, подставив токен вашего бота:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
- В полученном JSON-объекте найдите информацию о последнем сообщении - в нем будет указан chat_id отправителя (ваш): result -> message -> from -> id
- Сохраните этот chat_id, он понадобится для настройки модуля
- Сохранение псевдонима для chat_id:
- Для удобства вы можете присвоить удобный псевдоним полученному chat_id в свойстве user_base класса TelegramNotifier. Его можно будет использовать вместо chat_id при отправке сообщений
- Создание псевдонима для chat_id (опционально)
# telegram_error_notifier.py, метод __init__ класса TelegramNotifier:
self.user_base: Dict[str, str] = {
"your_alias": "your_chat_id"
}
- Использование декоратора catch
# division_by_zero.py
from telegram_error_notifier import catch
@catch(
token="YOUR_TELEGRAM_BOT_TOKEN",
receiver="your_chat_id", # receiver="your_alias", если был задан псевдоним
quiet=False
)
def divide(a, b):
return a / b
if __name__ == "__main__":
divide(10, 0)
- Запуск этого файла приведет к отправке Telegram-ботом сообщения с таким содержимым:
Произошел сбой при выполнении division_by_zero.py:
Traceback (most recent call last):
File "/home/demyan/Code/tools/TelegramErrorNotifier/telegram_error_notifier.py", line 130, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/demyan/Code/tools/TelegramErrorNotifier/division_by_zero.py", line 10, in divide
return a / b
~~^~~
ZeroDivisionError: division by zero