X-Git-Url: https://jfr.im/git/erebus.git/blobdiff_plain/3296dba1501001a004e95145372ec8050ee2537b..010ab29074aa4ddac81f1ba80510472c8785b309:/bot.py?ds=inline diff --git a/bot.py b/bot.py index 1f8c710..416934b 100644 --- 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")