File size: 1,132 Bytes
0157ac7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
"""Command parsing and dispatch for messaging handlers."""

from __future__ import annotations

from typing import Any

from .commands import handle_clear_command, handle_stats_command, handle_stop_command
from .models import IncomingMessage


def parse_command_base(text: str | None) -> str:
    """Return the slash command without bot mention suffix."""
    parts = (text or "").strip().split()
    cmd = parts[0] if parts else ""
    return cmd.split("@", 1)[0] if cmd else ""


def message_kind_for_command(command_base: str) -> str:
    """Return the persistence kind for an incoming message."""
    return "command" if command_base.startswith("/") else "content"


async def dispatch_command(
    handler: Any,
    incoming: IncomingMessage,
    command_base: str,
) -> bool:
    """Dispatch a known command and return whether it was handled."""
    commands = {
        "/clear": handle_clear_command,
        "/stop": handle_stop_command,
        "/stats": handle_stats_command,
    }
    command = commands.get(command_base)
    if command is None:
        return False
    await command(handler, incoming)
    return True