Remove pause/delete buttons from reminder notification popup (manage
via "我的提醒" list instead). Reorder delete operation to remove
scheduler job before DB record, preventing orphaned list entries.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace IntervalTrigger with OrTrigger of CronTriggers for interval
reminders, ensuring triggers align to window start each day without drift
- Refactor executor to extract _send_reminder_message helper, removing
the runtime window check (now handled at scheduling layer)
- Change "done" button to only acknowledge the notification without
deactivating the reminder
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add snooze.py handler: prompts user for snooze minutes and schedules
a one-shot job with a cancel button (cancel_snooze_<id>)
- Refactor callback.py: support compound action prefix parsing for
cancel_snooze_*, switch snooze action to prompt-based flow
- Add snooze_action_keyboard() in keyboards.py; update snooze button label
- Register handle_snooze_input in group=1 to avoid ConversationHandler conflict
- Filter completed once-type reminders from get_user_reminders()
- Fix DateTrigger: compare and localize once_time in UTC consistently
Co-Authored-By: claude-sonnet-4-6 <noreply@anthropic.com>