From 2e04a2c426ed6d0e7bcde70f37b48ab0fdbf5318 Mon Sep 17 00:00:00 2001 From: Forest Belton Date: Tue, 22 Jun 2021 03:33:22 -0400 Subject: [PATCH] Implement handler for PING command --- paircd/handler/ping.py | 14 ++++++++++++++ paircd/handlers.py | 2 ++ paircd/reply.py | 5 +++-- 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 paircd/handler/ping.py diff --git a/paircd/handler/ping.py b/paircd/handler/ping.py new file mode 100644 index 0000000..8e87f70 --- /dev/null +++ b/paircd/handler/ping.py @@ -0,0 +1,14 @@ +from paircd.reply import PONG +from paircd.client import Client +from paircd.command_handler import CommandHandler +from paircd.message import Message +from paircd.server import Server + + +class PingHandler(CommandHandler): + def __init__(self) -> None: + super().__init__("PING", 1) + + async def handle(self, server: Server, client: Client, msg: Message) -> None: + token = msg.args[0] + client.write_message(PONG(token)) diff --git a/paircd/handlers.py b/paircd/handlers.py index 7df5b27..5ca0cba 100644 --- a/paircd/handlers.py +++ b/paircd/handlers.py @@ -9,6 +9,7 @@ from paircd.server import Server from paircd.handler.join import JoinHandler from paircd.handler.mode import ModeHandler from paircd.handler.nick import NickHandler +from paircd.handler.ping import PingHandler from paircd.handler.privmsg import PrivmsgHandler from paircd.handler.user import UserHandler from paircd.handler.who import WhoHandler @@ -17,6 +18,7 @@ HANDLER_CLASSES = [ JoinHandler, ModeHandler, NickHandler, + PingHandler, PrivmsgHandler, UserHandler, WhoHandler, diff --git a/paircd/reply.py b/paircd/reply.py index 5af2201..8868a66 100644 --- a/paircd/reply.py +++ b/paircd/reply.py @@ -4,12 +4,12 @@ from paircd.message import Message def cmd_fn(cmd: str, tmpl: str) -> Callable: - def fn(prefix: Optional[str] = None, *args: List[Any]) -> Message: + def fn(*args: List[Any], prefix: Optional[str] = None) -> Message: msg = tmpl.format(*args) return ( Message(cmd=cmd, args=[msg], prefix=prefix) if prefix is not None - else Message(cmd=str(cmd), args=[msg]) + else Message(cmd=cmd, args=[msg]) ) return fn @@ -26,6 +26,7 @@ def reply_fn(cmd: Union[int, str], tmpl: str) -> Callable: # Commands JOIN = cmd_fn("JOIN", "{0}") MODE = cmd_fn("MODE", "{0} {1}") +PONG = cmd_fn("PONG", ":{0}") PRIVMSG = cmd_fn("PRIVMSG", "{0} :{1}") # Error replies