import logging
|
|
from typing import Any, Awaitable, Callable, Dict
|
|
|
|
from paircd.client import Client
|
|
from paircd.log import log_client
|
|
from paircd.message import Message
|
|
from paircd.server import Server
|
|
|
|
CMD_HANDLERS: Dict[str, Any] = {}
|
|
CMD_EXPECTED_ARGC: Dict[str, int] = {}
|
|
|
|
CmdHandler = Callable[
|
|
[Server, Client, Message],
|
|
Awaitable[None],
|
|
]
|
|
|
|
|
|
def register_cmd_handler(cmd: str, argc: int, handler: CmdHandler) -> None:
|
|
CMD_EXPECTED_ARGC[cmd] = argc
|
|
CMD_HANDLERS[cmd] = handler
|
|
|
|
|
|
async def handle_cmd(server: Server, client: Client, msg: Message) -> None:
|
|
if msg.cmd not in CMD_HANDLERS:
|
|
log_client(client, f"used unknown command {msg.cmd}", level=logging.WARN)
|
|
return
|
|
await CMD_HANDLERS[msg.cmd](server, client, msg)
|