bot_of_pray/python-bot/handlers/user_handlers.py

147 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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))
# другие базовые команды