aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/channel_save.py37
-rw-r--r--modules/nickserv.py38
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()