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