bitbot-3.11-fork/modules/commands/outs.py
2019-02-09 17:52:51 +00:00

68 lines
2 KiB
Python

import re
from src import utils
OUT_CUTOFF = 400
REGEX_CUTOFF = re.compile(r"^.{1,%d}(?:\s|$)" % OUT_CUTOFF)
STR_MORE = "%s (more...)" % utils.consts.RESET
STR_CONTINUED = "(...continued) "
class Out(object):
def __init__(self, server, module_name, target, msgid, statusmsg):
self.server = server
self.module_name = module_name
self._hide_prefix = False
self.target = target
self._text = ""
self.written = False
self._msgid = msgid
self._statusmsg = statusmsg
def write(self, text):
self._text += text
self.written = True
return self
def send(self, method):
if self.has_text():
text = self._text
text_encoded = text.encode("utf8")
if len(text_encoded) > OUT_CUTOFF:
text = "%s%s" % (text_encoded[:OUT_CUTOFF].decode("utf8"
).rstrip(), STR_MORE)
self._text = "%s%s" % (STR_CONTINUED, text_encoded[OUT_CUTOFF:
].decode("utf8").lstrip())
else:
self._text = ""
tags = {}
if self._msgid:
tags["+draft/reply"] = self._msgid
prefix = ""
if not self._hide_prefix:
prefix = utils.consts.RESET + "[%s] " % self.prefix()
target_str = "%s%s" % (self._statusmsg, self.target.name)
full_text = "%s%s" % (prefix, text)
if method == "PRIVMSG":
self.server.send_message(target_str, full_text, tags=tags)
elif method == "NOTICE":
self.server.send_notice(target_str, full_text, tags=tags)
def set_prefix(self, prefix):
self.module_name = prefix
def hide_prefix(self):
self._hide_prefix = True
def has_text(self):
return bool(self._text)
class StdOut(Out):
def prefix(self):
return utils.irc.color(self.module_name, utils.consts.GREEN)
class StdErr(Out):
def prefix(self):
return utils.irc.color("!"+self.module_name, utils.consts.RED)