תזכורות בבוט ============ סקירה קצרה ----------- מערכת התזכורות מאפשרת למשתמשי הבוט ליצור, לדחות ולנהל תזכורות אישיות דרך שיחה אינטראקטיבית או פקודות קצרות. המידע נשמר ב-MongoDB (`reminders/database.py`) ומנוהל דרך ישויות `Reminder` ו-`ReminderConfig`. פקודות עיקריות --------------- - ``/remind`` – פותח אשף אינטראקטיבי: כותרת → זמן → תיאור. - ``/remind "כותרת" tomorrow 10:00`` – יצירה מהירה עם פרמטרים בשורה אחת (סיומות נפוצות: ``tomorrow 10:00``, ``in 2 hours``, ``בעוד 30 דקות``). - ``/reminders`` – מציג רשימת תזכורות פעילות עם כפתורי השלמה/עריכה/מחיקה. - ``/cancel`` – ביטול האשף בכל שלב. איך הוויזרד עובד ---------------- 1. **כותרת** – חובה; עוברת ולידציה מול ``ReminderValidator``. 2. **בחירת זמן** – כפתורי קיצור (15/30 דקות, שעה, מחר 09:00, שבוע) או קלט חופשי שנפרש ע"י ``reminders.utils.parse_time``. 3. **תיאור** – אופציונלי; ניתן לדלג עם ``/skip`` או "דלג". 4. בסיום נוצרת רשומה חדשה דרך ``RemindersDB.create_reminder`` ומתוזמן job ייעודי ב-``JobQueue``. טיפים לשימוש בפקודה מהירה ------------------------- .. code-block:: text /remind "לעדכן לוגים" in 45 minutes /remind "פגישת סנכרון" 2025-01-15 14:00 /remind "לשלוח PR" בעעוד שעה המרכאות סביב הכותרת חובה כאשר משתמשים בנתיב המהיר. כל מה שלאחר הכותרת מתפרש כזמן. ניהול התזכורות -------------- - בחלון הרשימה מוצג לכל תזכורת כפתור ``✅`` (סימון כהושלמה), ``✏️`` (עריכה), ``🗑️`` (מחיקה). - בעת התראת "⏰ תזכורת" מתקבלים גם כפתורי דחייה (15/60/180 דקות או "מחר"). - עריכה מתבצעת בשני שלבים: בחירת שדה דרך כפתורים ואז שליחת קלט חופשי (כולל תמיכה ב-``/skip`` לניקוי תיאור). - ניתן לדחות תזכורת גם לאחר שנשלחה; המערכת תעדכן את ה-job הקיים ותשמור סטטוס ``SNOOZED``. מגבלות ומדיניות --------------- - עד ``50`` תזכורות פעילות למשתמש (``ReminderConfig.max_reminders_per_user``). - כותרת עד ``200`` תווים, תיאור עד ``1000`` תווים וללא תווים בעייתיים כמו ``<>[]{}``. - זמן חייב להיות בעתיד ולא יותר משנה קדימה. - ברירת המחדל לאזור זמן היא ``Asia/Jerusalem``; ניתן להתאים בעתיד דרך DB אם מוסיפים שדה ``user_timezone``. מתזמן והתאוששות ---------------- - ``reminders/scheduler.py`` טוען תזכורות ממתינות ואת אלה שמתוזמנות קדימה ומריץ אותן ב-``JobQueue``. - בעת אתחול, המתזמן מסמן תזכורות עבר שנשלחו אך לא הושלמו, כך שכפתורי השלמה עדיין עובדים. - תזכורות מחזוריות (Daily/Weekly/Monthly) נוצרות מחדש באמצעות ``handle_recurring_reminders`` שמופעל פעם בשעה. חיבור לקוד ---------- - חיבור ל-PTB: ``reminders.handlers.setup_reminder_handlers(application)`` מוסיף את האשף, רשימת התזכורות וטיפול ב-callbackים. - Scheduler: ``reminders.scheduler.setup_reminder_scheduler(application)`` מוודא שטעינת התזמונים מתבצעת אחרי עליית הבוט. קישורים -------- - :doc:`../api/reminders` - :doc:`../api/reminders.handlers` - :doc:`../api/reminders.scheduler` - :doc:`../api/reminders.database` - :doc:`../api/reminders.models` - :doc:`../api/reminders.validators` - :doc:`../api/reminders.utils`