From a9b6086c70c38558ef116361752c755054a7ba19 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 11 Nov 2018 14:53:16 +0000 Subject: Split out Channels in to IRCChannels.Channels, not IRCChannel.Channels --- src/IRCChannels.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/IRCChannels.py (limited to 'src/IRCChannels.py') diff --git a/src/IRCChannels.py b/src/IRCChannels.py new file mode 100644 index 00000000..8038788a --- /dev/null +++ b/src/IRCChannels.py @@ -0,0 +1,54 @@ +from src import EventManager, IRCBot, IRCChannel, IRCServer + +class Channels(object): + def __init__(self, server: "IRCServer.Server", bot: "IRCBot.Bot", + events: EventManager.EventHook): + self._server = server + self._bot = bot + self._events = events + self._channels = {} # type: typing.Dict[str, Channel] + + def __iter__(self) -> typing.Iterable[Channel]: + return (channel for channel in self._channels.values()) + def __contains__(self, name: str) -> bool: + return self.contains(name) + def __len__(self) -> int: + return len(self._channels) + def __getitem__(self, name: str): + return self.get(name) + + def _get_id(self, channel_name: str) -> int: + self._bot.database.channels.add(self._server.id, channel_name) + return self._bot.database.channels.get_id(self._server.id, channel_name) + + def _name_lower(self, channel_name: str) -> str: + return utils.irc.lower(self._server.case_mapping, channel_name) + + def contains(self, name: str) -> bool: + lower = self._name_lower(name) + return name[0] in self._server.channel_types and lower in self._channels + + def add(self, name: str) -> Channel: + id = self._get_id(name) + lower = self._name_lower(name) + new_channel = Channel(lower, id, self._server, self._bot) + self._channels[lower] = new_channel + self._events.on("new.channel").call(channel=new_channel, server=self) + return new_channel + + def remove(self, channel: Channel): + lower = self._name_lower(channel.name) + del self._channels[lower] + + def get(self, name: str): + return self._channels[self._name_lower(name)] + + def rename(self, old_name, new_name): + old_lower = self._name_lower(old_name) + new_lower = self._name_lower(new_name) + + channel = self.channels.pop(old_lower) + channel.name = new_name + self._channels[new_name] = channel + + self._bot.database.channels.rename(channel.id, new_lower) -- cgit v1.3.1-10-gc9f91