import re import time import telebot import backend_bot import bot_database import telezab def validate_chat_id(chat_id): """Validate that chat_id is composed only of digits.""" return chat_id.isdigit() def validate_telegram_id(telegram_id): """Validate that telegram_id starts with '@'.""" return telegram_id.startswith('@') def validate_email(email): """Validate that email domain is '@rtmis.ru'.""" return re.match(r'^[\w.-]+@rtmis\.ru$', email) is not None def format_message(data): try: priority_map = { 'High': '⚠️', 'Disaster': '⛔️' } priority = priority_map.get(data['severity']) msg = escape_telegram_chars(data['msg']) if data['status'].upper() == "PROBLEM": message = ( f"{priority} {data['host']} ({data['ip']})\n" f"Описание: {msg}\n" f"Критичность: {data['severity']}\n" f"Время возникновения: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(data['date_reception'])))} Мск\n" ) if 'link' in data: message += f'URL: Ссылка на график' return message else: message = ( f"✅ {data['host']} ({data['ip']})\n" f"Описание: {msg}\n" f"Критичность: {data['severity']}\n" f"Проблема устранена!\n" f"Время устранения: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(data['date_reception'])))} Мск\n" ) if 'link' in data: message += f'URL: Ссылка на график' return message except KeyError as e: raise ValueError(f"Missing key in data: {e}") def extract_region_number(host): # Используем регулярное выражение для извлечения цифр после первого символа и до первой буквы match = re.match(r'^.\d+', host) if match: return match.group(0)[1:] # Возвращаем строку без первого символа return None def escape_telegram_chars(text): """ Экранирует запрещённые символы для Telegram API: < -> < > -> > & -> & Также проверяет на наличие запрещённых HTML-тегов и другие проблемы с форматированием. """ replacements = { '&': '&', '<': '<', '>': '>', '"': '"', # Для кавычек } # Применяем замены for char, replacement in replacements.items(): text = text.replace(char, replacement) return text def show_main_menu(chat_id): markup = telebot.types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) if bot_database.is_whitelisted(chat_id): telezab.state.set_state(chat_id, "MAIN_MENU") markup.add('Настройки', 'Помощь', 'Активные события') else: telezab.state.set_state(chat_id, "REGISTRATION") markup.add('Регистрация') backend_bot.bot.send_message(chat_id, "Выберите действие:", reply_markup=markup) def create_settings_keyboard(): markup = telebot.types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) markup.row('Подписаться', 'Отписаться') markup.row('Мои подписки', 'Режим уведомлений') markup.row('Назад') return markup def show_settings_menu(chat_id): if not bot_database.is_whitelisted(chat_id): telezab.state.set_state(chat_id, "REGISTRATION") backend_bot.bot.send_message(chat_id, "Вы неавторизованы для использования этого бота") return markup = create_settings_keyboard() backend_bot.bot.send_message(chat_id, "Вы находитесь в режиме настроек. Выберите действие:", reply_markup=markup)