]> jfr.im git - erebus.git/blobdiff - bot.py
trivia - show streak breaker, fix streak calc
[erebus.git] / bot.py
diff --git a/bot.py b/bot.py
index 1f8c710157444eb7038ac5918caeee6fc14db48f..416934b2caf5b0b1218e897d6a5c49d056a2b5b3 100644 (file)
--- a/bot.py
+++ b/bot.py
@@ -93,6 +93,7 @@ class Bot(object):
                        'ERROR': self._goterror,
                }
                one = { #things to look for after source
+                       'NOTICE': self._gotconnected,
                        '001': self._got001,
                        '376': self._gotRegistered,
                        '422': self._gotRegistered,
@@ -128,8 +129,11 @@ class Bot(object):
                self.conn.send("PONG %s" % (pieces[1]))
                self._checknick()
        def _goterror(self, pieces):
+               # TODO: better handling, just reconnect that single bot
                try:
                        self.quit("Error detected: %s" % ' '.join(pieces))
+               except: pass
+               try:
                        curs = self.parent.query("UPDATE bots SET connected = 0")
                        curs.close()
                except: pass
@@ -369,10 +373,14 @@ class Bot(object):
                else:
                        self.msg(user, msg)
 
-       def msg(self, target, msg):
+       def msg(self, target, msg, truncate=False):
                if self.parent.cfg.getboolean('erebus', 'nofakelag'): return self.fastmsg(target, msg)
                cmd = self._formatmsg(target, msg)
-               if len(cmd) > MAXLEN: return False
+               if len(cmd) > MAXLEN:
+                       if not truncate:
+                               return False
+                       else:
+                               cmd = cmd[:MAXLEN]
                if self.conn.exceeded or self.conn.bytessent+len(cmd) >= self.conn.recvq:
                        self.msgqueue.append(cmd)
                else:
@@ -380,10 +388,14 @@ class Bot(object):
                self.conn.exceeded = True
                return True
 
-       def slowmsg(self, target, msg):
+       def slowmsg(self, target, msg, truncate=False):
                if self.parent.cfg.getboolean('erebus', 'nofakelag'): return self.fastmsg(target, msg)
                cmd = self._formatmsg(target, msg)
-               if len(cmd) > MAXLEN: return False
+               if len(cmd) > MAXLEN:
+                       if not truncate:
+                               return False
+                       else:
+                               cmd = cmd[:MAXLEN]
                if self.conn.exceeded or self.conn.bytessent+len(cmd) >= self.conn.recvq:
                        self.slowmsgqueue.append(cmd)
                else:
@@ -391,9 +403,13 @@ class Bot(object):
                self.conn.exceeded = True
                return True
 
-       def fastmsg(self, target, msg):
+       def fastmsg(self, target, msg, truncate=False):
                cmd = self._formatmsg(target, msg)
-               if len(cmd) > MAXLEN: return False
+               if len(cmd) > MAXLEN:
+                       if not truncate:
+                               return False
+                       else:
+                               cmd = cmd[:MAXLEN]
                self.conn.send(cmd)
                self.conn.exceeded = True
                return True
@@ -483,7 +499,10 @@ class BotConnection(object):
                if self.parent.parent.cfg.getboolean('debug', 'io'):
                        self.parent.log('O', line)
                self.bytessent += len(line)
-               self._write(line)
+               try:
+                       self._write(line)
+               except socket.error as e:
+                       self.parent._goterror(repr(e))
 
        def _write(self, line):
                self.socket.sendall(line.encode('utf-8', 'backslashreplace')+b"\r\n")