import socket, sys, time, threading, os, random
from collections import deque
-MAXLEN = 400 # arbitrary max length of a command generated by Bot.msg functions
-
if sys.version_info.major < 3:
timerbase = threading._Timer
stringbase = basestring
else:
self.msg(user, msg)
- def msg(self, target, msg, truncate=False):
+ """
+ Does the work for msg/slowmsg/fastmsg. Uses the append_callback to append to the correct queue.
+
+ In the case of fastmsg, self.conn.exceeded may be True, however, in this case append_callback=self.conn.send, so it will still be sent immediately.
+ """
+ def _msg(self, target, msg, truncate, append_callback):
if self.parent.cfg.getboolean('erebus', 'nofakelag'): return self.fastmsg(target, msg)
+
cmd = self._formatmsg(target, msg)
- if len(cmd) > MAXLEN:
+ if len(cmd) > self.conn.recvq:
if not truncate:
return False
else:
- cmd = cmd[:MAXLEN]
+ cmd = cmd[:self.conn.recvq]
+
if self.conn.exceeded or self.conn.bytessent+len(cmd) >= self.conn.recvq:
- self.msgqueue.append(cmd)
+ append_callback(cmd)
else:
self.conn.send(cmd)
+
self.conn.exceeded = True
return True
+ def msg(self, target, msg, truncate=False):
+ return self._msg(target, msg, truncate, self.msgqueue.append)
+
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:
- 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:
- self.conn.send(cmd)
- self.conn.exceeded = True
- return True
+ return self._msg(target, msg, truncate, self.slowmsgqueue.append)
def fastmsg(self, target, msg, truncate=False):
- cmd = self._formatmsg(target, msg)
- if len(cmd) > MAXLEN:
- if not truncate:
- return False
- else:
- cmd = cmd[:MAXLEN]
- self.conn.send(cmd)
- self.conn.exceeded = True
- return True
+ return self._msg(target, msg, truncate, self.conn.send)
def _formatmsg(self, target, msg):
if target is None or msg is None:
self.state = 0 # 0=disconnected, 1=registering, 2=connected
self.bytessent = 0
- self.recvq = 500
+ self.recvq = 400
self.exceeded = False
self._nowrite = False