from paircd.client import Client from paircd.command_handler import CommandHandler from paircd.message import Message from paircd.reply import ( ERR_NOSUCHNICK, ERR_NOTEXTTOSEND, PRIVMSG, RPL_AWAY, ) from paircd.server import Server class PrivmsgHandler(CommandHandler): def __init__(self) -> None: super().__init__("PRIVMSG", 2) async def handle(self, server: Server, client: Client, msg: Message) -> None: recipient, raw_msg = msg.args if len(raw_msg) == 0: client.write_message(ERR_NOTEXTTOSEND(client.nickname)) return out = PRIVMSG(recipient, raw_msg, prefix=client.id()) # Directly message a user if recipient in server.clients_by_nick: other_client = server.clients_by_nick[recipient] if other_client.away: client.write_message( RPL_AWAY(client.nickname, recipient, other_client.away) ) other_client.write_message(out) return # Broadcast to channel if recipient in server.channels_by_name: server.channels_by_name[recipient].write_message(out) return client.write_message(ERR_NOSUCHNICK(client.nickname, recipient))