72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
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()
|