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.

34 lines
879 B

  1. from logging import WARN
  2. from typing import Dict
  3. from paircd.client import Client
  4. from paircd.command_handler import CommandHandler
  5. from paircd.log import log_client
  6. from paircd.message import Message
  7. from paircd.server import Server
  8. from paircd.handler.join import JOIN
  9. from paircd.handler.nick import NICK
  10. from paircd.handler.privmsg import PRIVMSG
  11. from paircd.handler.user import USER
  12. ALL_HANDLERS = [
  13. JOIN,
  14. NICK,
  15. PRIVMSG,
  16. USER,
  17. ]
  18. CMD_HANDLERS: Dict[str, CommandHandler] = {}
  19. def register_cmd_handlers() -> None:
  20. for handler in ALL_HANDLERS:
  21. CMD_HANDLERS[handler.cmd] = handler
  22. async def handle_cmd(server: Server, client: Client, msg: Message) -> None:
  23. if msg.cmd not in CMD_HANDLERS:
  24. log_client(client, f"used unknown command {msg.cmd}", level=WARN)
  25. return
  26. await CMD_HANDLERS[msg.cmd].handler(server, client, msg)