aboutsummaryrefslogtreecommitdiff
path: root/IRCServer.py
diff options
context:
space:
mode:
authorGravatar Evelyn2017-07-12 10:00:27 +0100
committerGravatar Evelyn2017-07-12 10:00:45 +0100
commite232ad5daec113b0e72ca36465589908fb9a4e3c (patch)
tree5ea223327058b402e6e16c2082129ecd5a295a36 /IRCServer.py
parentSun Tzu*2, optimism (ha) (diff)
Add IRCv3→SASL support for nickserv auth, added optional module whitelist, added server option for recording channel keys, increased flexibility for event raising in linehandler, probably other things too
Diffstat (limited to 'IRCServer.py')
-rw-r--r--IRCServer.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/IRCServer.py b/IRCServer.py
index 7154a326..16659381 100644
--- a/IRCServer.py
+++ b/IRCServer.py
@@ -52,8 +52,14 @@ class Server(object):
return self.cached_fileno if fileno == -1 else fileno
def connect(self):
self.socket.connect((self.target_hostname, self.port))
+
if self.password:
self.send_pass(self.password)
+ # In principle, this belongs in the NS module. In reality, it's more practical to put this
+ # One-off case here for SASL
+ if "Nickserv" in self.bot.modules.modules and self.get_setting("nickserv-password"):
+ self.send_capability_request("sasl")
+
self.send_user(self.original_username, self.original_realname)
self.send_nick(self.original_nickname)
self.connected = True
@@ -172,6 +178,14 @@ class Server(object):
self.send("USER %s - - :%s" % (username, realname))
def send_nick(self, nickname):
self.send("NICK %s" % nickname)
+
+ def send_capability_request(self, capname):
+ self.send("CAP REQ :%s" % capname)
+ def send_capability_end(self):
+ self.send("CAP END")
+ def send_authenticate(self, text):
+ self.send("AUTHENTICATE %s" % text)
+
def send_pass(self, password):
self.send("PASS %s" % password)
def send_ping(self, nonce="hello"):