55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
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)
|
|
def _set_key(self, channel, key):
|
|
channel.set_setting("key", key)
|
|
def _unset_key(self, channel):
|
|
channel.del_setting("key")
|
|
|
|
@utils.hook("preprocess.send.join")
|
|
def preprocess_send_join(self, event):
|
|
if event["line"].args:
|
|
channels = event["line"].args[0].split(",")
|
|
|
|
init_keys = False
|
|
if len(event["line"].args) > 1:
|
|
init_keys = True
|
|
keys = event["line"].args[1].split(",")
|
|
else:
|
|
keys = []
|
|
|
|
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)
|
|
if not init_keys:
|
|
event["line"].args.append(None)
|
|
event["line"].args[1] = ",".join(keys_out)
|
|
|
|
@utils.hook("received.324")
|
|
@utils.hook("received.mode.channel")
|
|
def on_modes(self, event):
|
|
for mode, arg in event["modes"]:
|
|
if mode == "+k":
|
|
self._set_key(event["channel"], arg)
|
|
elif mode == "-k":
|
|
self._unset_key(event["channel"])
|