]> jfr.im git - erebus.git/blobdiff - bot.py
fix error handling in reddark
[erebus.git] / bot.py
diff --git a/bot.py b/bot.py
index a42c9ab9235c9292c33e21c15124ee21acc6fb45..4b0ecc04b277fdea46dbc9e38d01271ff84e4f43 100644 (file)
--- a/bot.py
+++ b/bot.py
@@ -58,6 +58,7 @@ class Bot(object):
                self.slowmsgqueue = deque()
                self._makemsgtimer()
                self._msgtimer.start()
+               self.joined_chans = False
 
        def __del__(self):
                try:
@@ -159,14 +160,16 @@ class Bot(object):
 
                self.conn.send("MODE %s +x" % (pieces[2]))
                if self.authname is not None and self.authpass is not None:
-                       self.conn.send("AUTH %s %s" % (self.authname, self.authpass))
+                       self.conn.send(self.parent.cfg.get('erebus', 'auth_command', "AUTH %s %s") % (self.authname, self.authpass))
                if not self.parent.cfg.getboolean('erebus', 'wait_for_hidden_host'):
                        for c in self.chans:
                                self.join(c.name)
+                       self.joined_chans = True
        def _gotHiddenHost(self, pieces):
-               if self.parent.cfg.getboolean('erebus', 'wait_for_hidden_host'):
+               if not self.joined_chans and self.parent.cfg.getboolean('erebus', 'wait_for_hidden_host'):
                        for c in self.chans:
                                self.join(c.name)
+                       self.joined_chans = True
        def _gotprivmsg(self, pieces):
                nick = pieces[0].split('!')[0][1:]
                user = self.parent.user(nick)
@@ -499,7 +502,13 @@ class BotConnection(object):
                self._nowrite = False
 
        def connect(self):
-               self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+               if self.parent.parent.cfg.getboolean('erebus', 'tls'):
+                       import ssl
+                       undersocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+                       context = ssl.create_default_context()
+                       self.socket = context.wrap_socket(undersocket, server_hostname=self.server)
+               else:
+                       self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                self.socket.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) # Does Python make SOL_TCP portable? Who knows, it's not documented, and it appears to come from the _socket C lib.
                self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 0, 0))
                self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)