aboutsummaryrefslogtreecommitdiff
path: root/src/IRCLine.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/IRCLine.py')
-rw-r--r--src/IRCLine.py26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/IRCLine.py b/src/IRCLine.py
index e5a58707..6aba7ed6 100644
--- a/src/IRCLine.py
+++ b/src/IRCLine.py
@@ -4,11 +4,14 @@ from src import IRCObject, utils
LINE_CUTOFF = 450
class Line(IRCObject.Object):
- def __init__(self, send_time: datetime.datetime, line: str):
+ def __init__(self, server: "IRCServer.Server", send_time: datetime.datetime,
+ line: str):
+ self.server = server
self._line = line
self.send_time = send_time
- data, truncated = utils.encode_truncate(line, "utf8", LINE_CUTOFF)
+ data, truncated = utils.encode_truncate(line, "utf8",
+ self._char_limit())
self._data = data
self._truncated = truncated
@@ -20,11 +23,26 @@ class Line(IRCObject.Object):
def __str__(self) -> str:
return self._data
+ def _char_limit(self):
+ return LINE_CUTOFF-len(":%s " % self.server.hostmask())
+
+ def data(self) -> bytes:
+ return b"%s\r\n" % self._data
+ def decoded_data(self) -> bytes:
+ return self._data.decode("utf8")
+ def truncated(self) -> str:
+ return self._truncated
+
def on_send(self, func: typing.Callable[[], None]):
self._on_send.append(func)
def sent(self):
for func in self._on_send[:]:
func()
- def data(self) -> bytes:
- return b"%s\r\n" % self._data
+ def end_replace(self, s: str):
+ s_encoded = s.encode("utf8")
+ s_len = len(s_encoded)
+
+ removed = self._data[-s_len:].decode("utf8")
+ self._truncated = removed+self._truncated
+ self._data = self._data[:-s_len]+s_encoded