diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/channel_save.py | 37 | ||||
| -rw-r--r-- | modules/nickserv.py | 38 |
2 files changed, 60 insertions, 15 deletions
diff --git a/modules/channel_save.py b/modules/channel_save.py index cb950ed2..713a7cb5 100644 --- a/modules/channel_save.py +++ b/modules/channel_save.py @@ -1,18 +1,29 @@ class Module(object): - def __init__(self, bot): - bot.events.on("self").on("join").hook(self.on_join) - bot.events.on("received").on("numeric").on("366").hook( - self.on_connect) + def __init__(self, bot): + bot.events.on("self").on("part").hook(self.on_self_part) + bot.events.on("self").on("join").hook(self.on_join) + bot.events.on("received").on("numeric").on("366").hook( + self.on_identify_trigger) + bot.events.on("received").on("numeric").on("001").hook( + self.on_identify_trigger) - def on_join(self, event): - channels = set(event["server"].get_setting("autojoin", [])) - channels.add(event["channel"].name) - event["server"].set_setting("autojoin", list(channels)) + def on_self_part(self, event): + pass - def on_connect(self, event): - if event["line_split"][3].lower() == "#bitbot": - channels = event["server"].get_setting("autojoin", []) - for channel in channels: - event["server"].send_join(channel) + def on_join(self, event): + channels = set(event["server"].get_setting("autojoin", [])) + channels.add(event["channel"].name) + event["server"].set_setting("autojoin", list(channels)) + + def on_identify_trigger(self, event): + if event["number"]=="001" and not event["server"].sasl_success: return + if event["line_split"][3].lower() == "#bitbot" or event["number"]=="001": + channels = event["server"].get_setting("autojoin", []) + chan_keys = event["server"].get_setting("channel_keys", {}) + for channel in channels: + if channel in chan_keys: + event["server"].send_join(channel, key=chan_keys[channel]) + else: + event["server"].send_join(channel) diff --git a/modules/nickserv.py b/modules/nickserv.py index 6f1b87b3..149dc961 100644 --- a/modules/nickserv.py +++ b/modules/nickserv.py @@ -1,18 +1,28 @@ - +import base64 class Module(object): def __init__(self, bot): + bot.events.on("new").on("server").hook(self.on_new_server) bot.events.on("received").on("numeric").on("001" ).hook(self.on_connect) bot.events.on("received").on("command").on("setnickserv" ).hook(self.set_nickserv, min_args=1, permission="setnickserv", help="Set bot's nickserv password", usage="<password>", private_only=True) + bot.events.on("received").on("cap").hook(self.on_cap) + bot.events.on("received").on("authenticate").hook(self.on_authenticate) + for code in ["902", "903", "904", "905", "906", "907", "908"]: + bot.events.on("received").on("numeric").on(code).hook(self.on_90x) + + def on_new_server(self, event): + event["server"].attempted_auth = False + event["server"].sasl_success = False def on_connect(self, event): nickserv_password = event["server"].get_setting( "nickserv-password") - if nickserv_password: + if nickserv_password and not event["server"].sasl_success: + event["server"].attempted_auth = True event["server"].send_message("nickserv", "identify %s" % nickserv_password) @@ -20,3 +30,27 @@ class Module(object): nickserv_password = event["args"] event["server"].set_setting("nickserv-password", nickserv_password) event["stdout"].write("Nickserv password saved") + + def on_cap(self, event): + if event["subcommand"] == "NAK": + event["server"].send_capability_end() + elif event["subcommand"] == "ACK": + event["server"].send_authenticate("PLAIN") + else: + pass + + def on_authenticate(self, event): + if event["message"] != "+": + event["server"].send_authenticate("*") + else: + nick = event["server"].original_nickname + password = event["server"].get_setting("nickserv-password") + event["server"].attempted_auth = True + event["server"].send_authenticate( + base64.b64encode(("%s\0%s\0%s" % (nick, nick, password)).encode("utf8")).decode("utf8") + ) + + def on_90x(self, event): + if event["number"]=="903": + event["server"].sasl_success = True + event["server"].send_capability_end() |
