Handlers

תיעוד של כל ה-handlers בפרויקט.

זרימת פקודה בסיסית

התרשים הבא מציג את הזרימה הכללית של פקודה מהמשתמש ועד לתגובה:

        graph LR
    A[User Command] --> B{Permission Check}
    B -->|Authorized| C[Validate Args]
    B -->|Denied| D[Error Response]
    C --> E[Metrics Collection]
    E --> F[Execute Command]
    F --> G[Format Response]
    G --> H[Send to User]
    F --> I[Log Metrics]
    I --> J{Alert Check}
    J -->|Threshold Exceeded| K[Trigger Alert]
    J -->|Normal| L[Store Metrics]
    

שלבי הזרימה:

  1. Permission Check: בדיקת הרשאות המשתמש לפקודה

  2. Validate Args: אימות הפרמטרים שהועברו

  3. Metrics Collection: איסוף מטריקות לפני ביצוע

  4. Execute Command: הרצת הפקודה בפועל

  5. Log Metrics: רישום המטריקות לניטור

  6. Alert Check: בדיקה האם יש לשלוח התראה

ארכיטקטורת Handlers

התרשים הבא מציג את הקשר בין ה-Handlers השונים לשירותים:

        graph TB
    subgraph "Bot Interface"
        U[User Input] --> DP[Dispatcher]
    end

    subgraph "Command Handlers"
        DP --> SH[/status Handler]
        DP --> EH[/errors Handler]
        DP --> LH[/latency Handler]
        DP --> RH[/rate_limit Handler]
        DP --> TH[/triage Handler]
        DP --> DH[/dashboard Handler]
    end

    subgraph "Services Layer"
        SH --> HS[Health Service]
        EH --> MS[Metrics Service]
        LH --> MS
        RH --> GS[GitHub Service]
        TH --> IS[Investigation Service]
        DH --> AS[Aggregation Service]
    end

    subgraph "Data Layer"
        HS --> DB[(Database)]
        MS --> DB
        MS --> RC[(Redis)]
        GS --> GA[GitHub API]
        IS --> DB
        IS --> ES[Elastic/Logs]
        AS --> DB
    end
    

הסבר השכבות:

  • Bot Interface: קבלת קלט מהמשתמש וניתוב לפקודה המתאימה

  • Command Handlers: טיפול בפקודות ספציפיות (status, errors, latency וכו«)

  • Services Layer: שירותי הליבה שמבצעים את הלוגיקה העסקית

  • Data Layer: שכבת הנתונים - DB, Cache, APIs חיצוניים

ראה גם

Show Command

Drive Menu

File View Handler

Pagination Handler

handlers.pagination.build_pagination_row(page, total_items, page_size, callback_prefix)[מקור]

Return a row of pagination buttons [prev,next] or None if not needed.

  • page: current 1-based page index

  • total_items: total number of items

  • page_size: items per page

  • callback_prefix: for example files_page_ → formats as {prefix}{page_num}

Return type:

Optional[List[InlineKeyboardButton]]

פרמטרים:
  • page (int)

  • total_items (int)

  • page_size (int)

  • callback_prefix (str)

Save Flow Handler

handlers.save_flow.emit_event(event, severity='info', **fields)[מקור]
פרמטרים:
async handlers.save_flow.long_collect_timeout_job(context)[מקור]

קריאת טיימאאוט: מסכם ומתקדם לפי חלקים שנאספו.

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.start_save_flow(update, context)[מקור]
Return type:

int

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.start_add_code_menu(update, context)[מקור]

תפריט בחירת מצב הוספת קוד: רגיל או איסוף ארוך

Return type:

int

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.start_long_collect(update, context)[מקור]

כניסה למצב איסוף קוד ארוך

Return type:

int

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.long_collect_receive(update, context)[מקור]

קבלת חלק קוד נוסף במצב איסוף

Return type:

int

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.long_collect_done(update, context)[מקור]

סיום איסוף, איחוד ושילוב לזרימת שמירה רגילה

Return type:

int

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.get_code(update, context)[מקור]
Return type:

int

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.get_filename(update, context)[מקור]
Return type:

int

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.get_note(update, context)[מקור]
Return type:

int

פרמטרים:

context (telegram.ext.ContextTypes.DEFAULT_TYPE)

async handlers.save_flow.save_file_final(update, context, filename, user_id)[מקור]

States Handler

GitHub Handlers

החבילה handlers.github מרכזת את כל הפקודות, התפריטים ומסכי השיתוף/העלאה מול GitHub. קובץ __init__.py מחזיק תיעוד והגדרות משותפות (קבועים, Enums והפניות לאירועים), בעוד שהמודולים הפנימיים מטפלים בכל שלב בזרימת המשתמש – החל משליחת תפריט הבחירה ועד העלאת ZIP או ענף מלא. השתמשו בחבילה זו כשאתם צריכים להריץ Callback ספציפי באופן ידני מתוך טסטים או בוטי תחזוקה.

GitHub Menu Bridge

handlers.github.menu הוא שכבת תאימות דקה שמייצאת את GitHubMenuHandler מהמודול ההיסטורי github_menu_handler. כך ניתן לעדכן את הנתיבים בקוד החדש מבלי לשבור תלות קיימת בסקריפטים ו‑tests. המודול דואג שקריאה מ-handlers.github.menu או services.github_service.get_handler תחזיר את אותו Handler מרכזי שמטפל בכל תפריטי ה-GitHub בבוט.

Document Flow

Drive Utilities

חבילת Google Drive עושה שימוש בעזרי תזמון שמנרמלים נתונים ישנים מול מבנה ההעדפות החדש ב-UI. המודול handlers.drive.utils מספק פונקציה יחידה, extract_schedule_key, שמחלצת את מפתח התזמון (schedule / schedule_key) מתוך מילוני העדפות ורסטיליים. חשוב להשתמש בה לפני שמחשבנים גיבוי אוטומטי כדי להימנע ממצב בו משתמש ותיק נשאר עם ערך ריק.

handlers.drive.utils.extract_schedule_key(prefs)[מקור]

Normalize historic/new drive schedule preference structures.

Return type:

Optional[str]

פרמטרים:

prefs (Any)