diff options
| author | 2020-07-03 13:14:52 +0100 | |
|---|---|---|
| committer | 2020-07-03 13:14:52 +0100 | |
| commit | 74abbe7e5ca2d9d2d667269b21c2034789a93921 (patch) | |
| tree | bf4a8e38b91b74ad2b54338b754a7254ad1eff2a /modules/autojoin.py | |
| parent | remove channels from autojoin when they are ERR_LINKCHANNEL (470) (diff) | |
| signature | ||
rename channel_save.py to autojoin.py
Diffstat (limited to 'modules/autojoin.py')
| -rw-r--r-- | modules/autojoin.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/modules/autojoin.py b/modules/autojoin.py new file mode 100644 index 00000000..bbd08dfb --- /dev/null +++ b/modules/autojoin.py @@ -0,0 +1,49 @@ +from src import ModuleManager, utils + +BATCH_MAX = 10 + +class Module(ModuleManager.BaseModule): + @utils.hook("received.001") + def on_connect(self, event): + channels = event["server"].get_setting("autojoin", []) + if channels: + channel_batches = [channels[i:i+BATCH_MAX] for i in range( + 0, len(channels), BATCH_MAX)] + for channel_batch in channel_batches: + event["server"].send_joins(channel_batch) + + @utils.hook("self.join") + def on_join(self, event): + channels = event["server"].get_setting("autojoin", []) + channel_name = event["server"].irc_lower(event["channel"].name) + if not channel_name in channels: + channels.append(channel_name) + event["server"].set_setting("autojoin", channels) + + def _remove_channel(self, server, channel_name): + channels = server.get_setting("autojoin", []) + if channel_name in channels: + channels.remove(channel_name) + server.set_setting("autojoin", channels) + return True + else: + return False + + @utils.hook("self.part") + def on_part(self, event): + self._remove_channel(event["server"], event["channel"].name) + + @utils.hook("self.kick") + def on_kick(self, event): + self._remove_channel(event["server"], event["channel"].name) + + @utils.hook("raw.received.470") + def on_linkchannel(self, event): + initial = event["line"].args[1] + initial_lower = event["server"].irc_lower(initial) + linked = event["line"].args[2] + + if self._remove_channel(event["server"], initial_lower): + self.log.warn(f"{str(event['server'])} " + f"channel {initial} linked to {linked} " + "- removed from autojoin") |
