from datetime import datetime, timedelta, timezone import pytz from telegram import Update from telegram.ext import ContextTypes from bot.models.database import Session from bot.models.reminder import Reminder from bot.scheduler.job_manager import add_reminder_job, remove_reminder_job async def handle_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: query = update.callback_query await query.answer() data = query.data action, reminder_id_str = data.split("_", 1) reminder_id = int(reminder_id_str) session = Session() try: reminder = session.get(Reminder, reminder_id) if reminder is None: await query.edit_message_text("提醒不存在或已被删除。") return if action == "done": reminder.is_active = False session.commit() remove_reminder_job(reminder_id) await query.edit_message_text(f"✅ 已完成提醒:{reminder.title}") elif action == "snooze": # Snooze for 10 minutes - send another reminder from bot.scheduler.executor import execute_reminder snooze_time = datetime.now(timezone.utc) + timedelta(minutes=10) context.job_queue.run_once( lambda ctx: execute_reminder(reminder_id, ctx.bot), when=snooze_time, ) tz = pytz.timezone("Asia/Shanghai") display_time = snooze_time.astimezone(tz).strftime('%H:%M') await query.edit_message_text( f"⏰ 已延期10分钟,将在 {display_time} 再次提醒。" ) elif action == "pause": reminder.is_active = False session.commit() remove_reminder_job(reminder_id) await query.edit_message_text(f"⏸ 已暂停提醒:{reminder.title}") elif action == "resume": reminder.is_active = True session.commit() add_reminder_job(reminder_id) await query.edit_message_text(f"▶️ 已恢复提醒:{reminder.title}") elif action == "delete": title = reminder.title session.delete(reminder) session.commit() remove_reminder_job(reminder_id) await query.edit_message_text(f"🗑 已删除提醒:{title}") except Exception: session.rollback() await query.edit_message_text("操作失败,请稍后重试。") finally: Session.remove()