50 lines
1.7 KiB
Python
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
|