from telegram import Update from telegram.ext import ContextTypes from bot.models.database import Session from bot.models.reminder import Reminder from bot.models.user import User from bot.utils.keyboards import list_item_keyboard async def list_reminders(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: user = update.effective_user session = Session() try: user_obj = User.get_or_create(session, user.id, user.username) reminders = Reminder.get_user_reminders(session, user_obj.id) if not reminders: await update.message.reply_text( "你还没有创建任何提醒。\n发送 /new 创建第一个提醒吧!" ) return await update.message.reply_text(f"📋 *你的提醒列表*(共 {len(reminders)} 个)", parse_mode="Markdown") for reminder in reminders: status = "✅ 活跃" if reminder.is_active else "⏸ 已暂停" text = ( f"*{_escape(reminder.title)}*\n" f"类型:{reminder.type_display()}\n" f"时间:{reminder.schedule_summary()}\n" f"跳过节假日:{'是' if reminder.skip_holidays else '否'}\n" f"状态:{status}" ) if reminder.description: text += f"\n描述:{_escape(reminder.description)}" await update.message.reply_text( text, parse_mode="Markdown", reply_markup=list_item_keyboard(reminder.id, reminder.is_active), ) finally: Session.remove() def _escape(text: str) -> str: for ch in ["_", "*", "`", "["]: text = text.replace(ch, f"\\{ch}") return text