72 lines
4.5 KiB
Python
72 lines
4.5 KiB
Python
import telebot
|
||
from telebot import types
|
||
|
||
import backend_bot
|
||
import bot_database
|
||
from utilities.telegram_utilities import show_settings_menu
|
||
|
||
|
||
def handle_my_subscriptions_button(message):
|
||
chat_id = message.chat.id
|
||
username = f"@{message.from_user.username}" if message.from_user.username else "N/A"
|
||
if not bot_database.is_whitelisted(chat_id):
|
||
backend_bot.bot.send_message(chat_id, "Вы не авторизованы для использования этого бота.")
|
||
telebot.logger.info(f"Unauthorized access attempt by {username} {chat_id}")
|
||
return
|
||
|
||
user_regions = bot_database.get_user_subscribed_regions(chat_id)
|
||
if not user_regions:
|
||
backend_bot.bot.send_message(chat_id, "Вы не подписаны ни на один регион.")
|
||
telebot.logger.debug(f"Запрашиваем {user_regions} for {username} {chat_id}")
|
||
else:
|
||
user_regions.sort(key=lambda x: int(x[0])) # Сортировка по числовому значению region_id
|
||
regions_list = bot_database.format_regions_list(user_regions)
|
||
backend_bot.bot.send_message(chat_id, f"Ваши активные подписки:\n{regions_list}")
|
||
telebot.logger.debug(f"Запрашиваем {user_regions} for {username} {chat_id}")
|
||
show_settings_menu(chat_id)
|
||
|
||
|
||
def handle_active_regions_button(message):
|
||
chat_id = message.chat.id
|
||
username = f"@{message.from_user.username}" if message.from_user.username else "N/A"
|
||
if not bot_database.is_whitelisted(chat_id):
|
||
backend_bot.bot.send_message(chat_id, "Вы не авторизованы для использования этого бота.")
|
||
telebot.logger.info(f"Unauthorized access attempt by {username} {chat_id}")
|
||
return
|
||
|
||
regions = bot_database.get_sorted_regions() # Используем функцию для получения отсортированных регионов
|
||
if not regions:
|
||
backend_bot.bot.send_message(chat_id, "Нет активных регионов.")
|
||
else:
|
||
regions_list = bot_database.format_regions_list(regions)
|
||
backend_bot.bot.send_message(chat_id, f"Активные регионы:\n{regions_list}")
|
||
show_settings_menu(chat_id)
|
||
|
||
|
||
def handle_notification_mode_button(message):
|
||
chat_id = message.chat.id
|
||
username = f"@{message.from_user.username}" if message.from_user.username else "N/A"
|
||
|
||
telebot.logger.debug(f"Handling notification mode button for user {username} ({chat_id}).")
|
||
|
||
if not bot_database.is_whitelisted(chat_id):
|
||
backend_bot.bot.send_message(chat_id, "Вы неавторизованы для использования этого бота")
|
||
telebot.logger.warning(f"Unauthorized access attempt by {username} ({chat_id})")
|
||
return
|
||
|
||
# Логируем успешное авторизованное использование бота
|
||
telebot.logger.info(f"User {username} ({chat_id}) is authorized and is selecting a notification mode.")
|
||
|
||
# Отправляем клавиатуру выбора режима уведомлений
|
||
markup = types.InlineKeyboardMarkup()
|
||
markup.add(types.InlineKeyboardButton(text="Критические события", callback_data="notification_mode_disaster"))
|
||
markup.add(types.InlineKeyboardButton(text="Все события", callback_data="notification_mode_all"))
|
||
|
||
backend_bot.bot.send_message(chat_id,
|
||
"Выберите уровень событий мониторинга, уведомление о которых хотите получать:\n"
|
||
'1. <b>Критические события</b> (приоритет "DISASTER") - события, являющиеся потенциальными авариями и требующие оперативного решения.\nВ Zabbix обязательно имеют тег "CALL" для оперативного привлечения инженеров к устранению.\n\n'
|
||
'2. <b>Все события (По умолчанию)</b> - критические события, а также события Zabbix высокого ("HIGH") приоритета, имеющие потенциально значительное влияние на сервис и требующее устранение в плановом порядке.',
|
||
reply_markup=markup, parse_mode="HTML")
|
||
|
||
telebot.logger.info(f"Sent notification mode selection message to {username} ({chat_id}).")
|