aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/commands/outs.py27
-rw-r--r--src/IRCLine.py6
-rw-r--r--src/IRCServer.py4
-rw-r--r--src/utils/irc/protocol.py2
4 files changed, 27 insertions, 12 deletions
diff --git a/modules/commands/outs.py b/modules/commands/outs.py
index 7df60436..7ed49cd6 100644
--- a/modules/commands/outs.py
+++ b/modules/commands/outs.py
@@ -14,6 +14,10 @@ class Out(object):
self._text = ""
self.written = False
self._tags = tags
+ self._assured = False
+
+ def assure(self):
+ self._assured = True
def write(self, text):
self._text += text
@@ -27,20 +31,25 @@ class Out(object):
prefix = utils.consts.RESET + "[%s] " % self.prefix()
full_text = "%s%s" % (prefix, self._text)
+ line_factory = None
if method == "PRIVMSG":
- line = self.server.send_message(self._target_str, full_text,
- tags=self._tags)
+ line_factory = utils.irc.protocol.privmsg
elif method == "NOTICE":
- line = self.server.send_notice(self._target_str, full_text,
- tags=self._tags)
+ line_factory = utils.irc.protocol.notice
else:
raise ValueError("Unknown command method '%s'" % method)
- line.truncate_marker = STR_MORE
- if line.truncated():
- self._text = "%s%s" % (STR_CONTINUED, line.truncated())
- else:
- self._text = ""
+ line = line_factory(self._target_str, full_text, tags=self._tags)
+ if self._assured:
+ line.assure()
+ sent_line = self.server.send(line)
+
+ if sent_line:
+ line.truncate_marker = STR_MORE
+ if line.truncated():
+ self._text = "%s%s" % (STR_CONTINUED, line.truncated())
+ else:
+ self._text = ""
def set_prefix(self, prefix):
self.module_name = prefix
diff --git a/src/IRCLine.py b/src/IRCLine.py
index 9e1d85fb..c0263d20 100644
--- a/src/IRCLine.py
+++ b/src/IRCLine.py
@@ -47,6 +47,7 @@ class ParsedLine(object):
self.source = source
self.tags = {} if tags == None else tags
self._valid = True
+ self._assured = False
def __repr__(self):
return "ParsedLine(%s)" % self.__str__()
@@ -58,6 +59,11 @@ class ParsedLine(object):
def invalidate(self):
self._valid = False
+ def assured(self) -> bool:
+ return self._assured
+ def assure(self):
+ self._assured = True
+
def _tag_str(self, tags: typing.Dict[str, str]) -> str:
tag_pieces = []
for tag, value in tags.items():
diff --git a/src/IRCServer.py b/src/IRCServer.py
index a5c4c34c..debe8f76 100644
--- a/src/IRCServer.py
+++ b/src/IRCServer.py
@@ -268,7 +268,7 @@ class Server(IRCObject.Object):
self.events.on("preprocess.send").call_unsafe(server=self,
line=line_parsed, events=line_events)
- if line_parsed.valid():
+ if line_parsed.valid() or line_parsed.assured():
line = line_parsed.format()
line_obj = IRCLine.SentLine(line_events, datetime.datetime.utcnow(),
self.hostmask(), line_parsed)
@@ -352,7 +352,7 @@ class Server(IRCObject.Object):
def send_message(self, target: str, message: str, tags: dict={}
) -> IRCLine.SentLine:
- return self.send(utils.irc.protocol.message(target, message, tags))
+ return self.send(utils.irc.protocol.privmsg(target, message, tags))
def send_notice(self, target: str, message: str, tags: dict={}
) -> IRCLine.SentLine:
diff --git a/src/utils/irc/protocol.py b/src/utils/irc/protocol.py
index 0ccf684f..66b4028c 100644
--- a/src/utils/irc/protocol.py
+++ b/src/utils/irc/protocol.py
@@ -33,7 +33,7 @@ def part(channel_name: str, reason: str=None) -> IRCLine.ParsedLine:
def quit(reason: str=None) -> IRCLine.ParsedLine:
return IRCLine.ParsedLine("QUIT", [reason] if reason else [])
-def message(target: str, message: str, tags: typing.Dict[str, str]={}
+def privmsg(target: str, message: str, tags: typing.Dict[str, str]={}
) -> IRCLine.ParsedLine:
return IRCLine.ParsedLine("PRIVMSG", [target, message], tags=tags)
def notice(target: str, message: str, tags: typing.Dict[str, str]={}