from typing import Any, Callable, List from paircd.message import Message def reply_fn(cmd: int, tmpl: str) -> Callable: def fn(target: str, *args: List[Any]) -> Message: msg = f"{target} {tmpl.format(*args)}" return Message(cmd=str(cmd), args=[msg]) return fn # Error replies ERR_NOSUCHNICK = reply_fn(401, "{0} :No such nick/channel") ERR_NOSUCHSERVER = reply_fn(402, "{0}: No such server") # Command responses RPL_WHOISUSER = reply_fn(311, "{0} {1} {2} * :{3}") RPL_ENDOFWHO = reply_fn(315, "{0} :End of /WHO list") RPL_ENDOFWHOIS = reply_fn(318, "{0} :End of /WHOIS list") RPL_CHANNELMODEIS = reply_fn(324, "{0} {1}{2}") RPL_TOPIC = reply_fn(332, "{0} :{1}") RPL_WHOREPLY = reply_fn(352, "{0} ~{1} {2} {3} {4} {5} :{6} {7}") RPL_NAMREPLY = reply_fn(353, "{0} {1} :{2}") RPL_ENDOFNAMES = reply_fn(366, "{0} :End of /NAMES list")