From cd15b06b65e69b771fc417c5e5f90b56feff5ce7 Mon Sep 17 00:00:00 2001 From: jesopo Date: Tue, 2 Jul 2019 21:38:31 +0100 Subject: Intercept JOINs and attach known keys (channel_keys.py) --- modules/channel_keys.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 modules/channel_keys.py (limited to 'modules/channel_keys.py') diff --git a/modules/channel_keys.py b/modules/channel_keys.py new file mode 100644 index 00000000..801393b4 --- /dev/null +++ b/modules/channel_keys.py @@ -0,0 +1,33 @@ +from src import ModuleManager, utils + +@utils.export("channelset", utils.Setting("key", "Channel key (password)", + example="hunter2")) +class Module(ModuleManager.BaseModule): + def _get_key(self, server, channel_name): + channel_id = server.channels.get_id(channel_name) + return self.bot.database.channel_settings.get(channel_id, "key", None) + + @utils.hook("preprocess.send.join") + def preprocess_send_join(self, event): + if event["line"].args: + channels = event["line"].args[0].split(",") + keys = event["line"].args[1:] + + with_keys = {} + for channel in channels: + if keys: + with_keys[channel] = keys.pop(0) + else: + with_keys[channel] = self._get_key(event["server"], channel) + + channels_out = [] + keys_out = [] + + # sort such that channels with keys are at the start + for channel_name, key in sorted(with_keys.items(), + key=lambda item: not bool(item[1])): + channels_out.append(channel_name) + if key: + keys_out.append(key) + event["line"].args[0] = ",".join(channels_out) + event["line"].args[1:] = keys_out -- cgit v1.3.1-10-gc9f91