diff options
| author | 2019-07-02 21:38:31 +0100 | |
|---|---|---|
| committer | 2019-07-02 21:38:31 +0100 | |
| commit | cd15b06b65e69b771fc417c5e5f90b56feff5ce7 (patch) | |
| tree | f5d81675767a0d7aa0cf541359c7e4daa3b0716e /modules/channel_keys.py | |
| parent | use raw/unformatted Setting usage strings for require_setting output (diff) | |
| signature | ||
Intercept JOINs and attach known keys (channel_keys.py)
Diffstat (limited to 'modules/channel_keys.py')
| -rw-r--r-- | modules/channel_keys.py | 33 |
1 files changed, 33 insertions, 0 deletions
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 |
