|
|
- from asyncio import Queue
- from dataclasses import dataclass, field
- from typing import Dict, List
-
- from paircd.client import Client
- from paircd.message import Message
-
-
- @dataclass
- class Channel:
- name: str
- clients_by_nick: Dict[str, Client] = field(default_factory=dict)
- msg_queue: Queue = field(default_factory=Queue)
-
- def add_client(self, client: Client) -> None:
- self.clients_by_nick[client.nickname] = client
-
- def remove_client_by_nick(self, nick: str) -> None:
- del self.clients_by_nick[nick]
-
- async def process(self) -> None:
- while True:
- msg = await self.msg_queue.get()
- for client in self.clients_by_nick.values():
- # Don't broadcast client's messages back to themselves
- if msg.cmd == "PRIVMSG" and msg.prefix == client.id():
- continue
- client.write_message(msg)
-
- def write_message(self, msg: Message) -> None:
- self.msg_queue.put_nowait(msg)
-
- def get_modes(self) -> List[str]:
- return []
|