python ircd using asyncio
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

22 lines
650 B

  1. import logging
  2. from typing import Any, Dict
  3. from paircd.client import Client
  4. from paircd.log import log_client
  5. from paircd.message import Message
  6. from paircd.server import Server
  7. CMD_HANDLERS: Dict[str, Any] = {}
  8. CMD_EXPECTED_ARGC: Dict[str, int] = {}
  9. def register_cmd_handler(cmd: str, argc: int, handler) -> None:
  10. CMD_EXPECTED_ARGC[cmd] = argc
  11. CMD_HANDLERS[cmd] = handler
  12. async def handle_cmd(server: Server, client: Client, msg: Message) -> None:
  13. if msg.cmd not in CMD_HANDLERS:
  14. log_client(client, f"used unknown command {msg.cmd}", level=logging.WARN)
  15. return
  16. await CMD_HANDLERS[msg.cmd](server, client, msg)