from utils.database import USER_DATA from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton from telegram.ext import CommandHandler, MessageHandler, filters, CallbackContext from utils.logger import logger from utils.user_data import get_user_info from utils.parsing import parse_names_helper from utils.prefixes import PREFIXES from utils.message_sender import send_message from utils.formating import format_names from messages import WELCOME_MSG user_shure_keyboard = InlineKeyboardMarkup([ [ InlineKeyboardButton(text="Да", callback_data="user_clear_yes"), InlineKeyboardButton(text="Нет", callback_data="user_clear_no") ] ]) user_keyboard = InlineKeyboardMarkup([ [ InlineKeyboardButton(text="О здравии", callback_data="user_life"), InlineKeyboardButton(text="За упокой", callback_data="user_dead"), InlineKeyboardButton(text="Комментарий", callback_data="user_comment") ], [ InlineKeyboardButton(text="Ваши записки", callback_data="user_show"), InlineKeyboardButton(text="Очистить", callback_data="user_clear") ] ]) user_note_keyboard = InlineKeyboardMarkup([ [ InlineKeyboardButton(text="Сохранить", callback_data="user_save"), InlineKeyboardButton(text="Очистить", callback_data="user_clear_type") ],[ InlineKeyboardButton(text="Назад", callback_data="user_names_menu_back") ] ]) async def user_shure_dialog(update: Update, context: CallbackContext) -> None: #try: if 'type' in context.user_data: typen = context.user_data['type'] logger.info(f"Shure_dialog, typen is {context.user_data['type']}") else: typen="" #except: # typen = "" #logger.error(f"Ошибка при обработке: {e}") if typen: message = f"Вы уверены, что хотите удалить записку \"{typen}\"?" else: message = f"Вы уверены, что хотите удалить все свои записки??" await send_message(update,context, message, reply_markup=user_shure_keyboard) async def user_start(update: Update, context: CallbackContext) -> None: # handlers/user_handlers.py global USER_DATA if 'type' in context.user_data: del context.user_data['type'] if 'status' in context.user_data: del context.user_data['status'] user_info = await get_user_info(update, context) user_name = user_info["name"] user_id = user_info["id"] if user_id in USER_DATA: TEMP_UDATA = USER_DATA[user_id] else: TEMP_UDATA = {} context.user_data["TEMP_UDATA"] = TEMP_UDATA message = f"Здравствуйте, {user_name}\n" message += WELCOME_MSG await send_message(update,context, message, reply_markup=user_keyboard) async def names_menu(update: Update, context: CallbackContext) -> None: #handlers/callback_handlers.py message = "У Вас нет записей" TEMP_UDATA=context.user_data["TEMP_UDATA"] # context.user_data['state'] = 'names_menu' try: typen = context.user_data['type'] except: typen = "" user_info = await get_user_info(update, context) user_id = user_info["id"] if typen in ["О здравии", "За упокой"]: if typen in TEMP_UDATA: message = f"Ваши имена в записке {typen}:\n" message += format_names(TEMP_UDATA[typen],numbering_type="•") else: message = "Список имён пуст" message += f"\nВводите следующие имена:" elif typen == "Комментарий": if typen in TEMP_UDATA: message = "Ваш комментарий:\n" message +=TEMP_UDATA[typen] else: message = "У Вас нет комментария" message += f"\nВведите текст комментария:" else: logger.error("Тип записки не определён") context.user_data["status"]="input_names" await send_message(update, context, message, reply_markup=user_note_keyboard) async def parse(update: Update, context: CallbackContext) -> None: try: if 'status' in context.user_data: if context.user_data['status'] == "input_names": # Ввод имён logger.info("input_names_yes") TEMP_UDATA=context.user_data["TEMP_UDATA"] typen = context.user_data['type'] user_info = await get_user_info(update, context) user_id = user_info["id"] # Для комментария сохраняем весь текст if typen == "Комментарий": names = update.message.text.strip() if names: TEMP_UDATA[typen] = names context.user_data["TEMP_UDATA"] = TEMP_UDATA await send_message(update, context, f"Комментарий добавлен. Сохраните, или измените его.") else: # Парсим имена для других типов names = parse_names_helper(update.message.text) if names: if typen in TEMP_UDATA: TEMP_UDATA[typen].extend(names) else: TEMP_UDATA[typen] = names context.user_data["TEMP_UDATA"] = TEMP_UDATA await send_message(update,context,f"Новые имена были добавлены в записку.\n Сохраните записку, чтобы отправить её священнику, или добавьте ещё имена.") except Exception as e: logger.error(f"Ошибка при обработке: {e}") await send_message(update, context, "Произошла ошибка при обработке данных") await names_menu(update, context) # await user_keyboard(update, context) # del context.user_data['type'] def register_handlers(app): app.add_handler(CommandHandler("start", user_start)) app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, parse)) # другие базовые команды