ReminderBot/bot/handlers/list.py
leo f453a7917e Initial commit: add reminderBot project structure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 11:40:58 +08:00

50 lines
1.7 KiB
Python

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