aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar jesopo2018-10-02 21:40:34 +0100
committerGravatar jesopo2018-10-02 21:40:34 +0100
commit9118af5e9c9c0e80507fd2bc8bc6cd840fad2c2f (patch)
tree8eace1a7d271b4f317d4009744a0ed0f8e970f0a /src
parentSimplify Utils.seperate_hostmask (diff)
signature
Support changing command responses from PRIVMSG to NOTICE
Diffstat (limited to 'src')
-rw-r--r--src/IRCBuffer.py13
-rw-r--r--src/IRCChannel.py2
-rw-r--r--src/IRCServer.py23
3 files changed, 29 insertions, 9 deletions
diff --git a/src/IRCBuffer.py b/src/IRCBuffer.py
index b3825178..f5e6fa70 100644
--- a/src/IRCBuffer.py
+++ b/src/IRCBuffer.py
@@ -2,12 +2,13 @@ import re
from . import Utils
class BufferLine(object):
- def __init__(self, sender, message, action, tags, from_self):
+ def __init__(self, sender, message, action, tags, from_self, method):
self.sender = sender
self.message = message
self.action = action
self.tags = tags
self.from_self = from_self
+ self.method = method
class Buffer(object):
def __init__(self, bot, server):
@@ -16,13 +17,19 @@ class Buffer(object):
self.lines = []
self.max_lines = 64
self._skip_next = False
- def add_line(self, sender, message, action, tags, from_self=False):
+
+ def _add_message(self, sender, message, action, tags, from_self, method):
if not self._skip_next:
- line = BufferLine(sender, message, action, tags, from_self)
+ line = BufferLine(sender, message, action, tags, from_self, method)
self.lines.insert(0, line)
if len(self.lines) > self.max_lines:
self.lines.pop()
self._skip_next = False
+ def add_message(self, sender, message, action, tags, from_self=False):
+ self._add_message(sender, message, action, tags, from_self, "PRIVMSG")
+ def add_notice(self, sender, message, tags, from_self=False):
+ self._add_message(sender, message, False, tags, from_self, "NOTICE")
+
def get(self, index=0, **kwargs):
from_self = kwargs.get("from_self", True)
for line in self.lines:
diff --git a/src/IRCChannel.py b/src/IRCChannel.py
index ed7064d7..02622380 100644
--- a/src/IRCChannel.py
+++ b/src/IRCChannel.py
@@ -107,6 +107,8 @@ class Channel(IRCObject.Object):
def send_message(self, text, prefix=None, tags={}):
self.server.send_message(self.name, text, prefix=prefix, tags=tags)
+ def send_notice(self, text, prefix=None, tags={}):
+ self.server.send_notice(self.name, text, prefix=prefix, tags=tags)
def send_mode(self, mode=None, target=None):
self.server.send_mode(self.name, mode, target)
def send_kick(self, target, reason=None):
diff --git a/src/IRCServer.py b/src/IRCServer.py
index d6f79b31..55e1e3ca 100644
--- a/src/IRCServer.py
+++ b/src/IRCServer.py
@@ -351,7 +351,7 @@ class Server(IRCObject.Object):
def send_quit(self, reason="Leaving"):
self.send("QUIT :%s" % reason)
- def send_message(self, target, message, prefix=None, tags={}):
+ def _tag_str(self, tags):
tag_str = ""
for tag, value in tags.items():
if tag_str:
@@ -361,9 +361,12 @@ class Server(IRCObject.Object):
tag_str += "=%s" % value
if tag_str:
tag_str = "@%s " % tag_str
+ return tag_str
+ def send_message(self, target, message, prefix=None, tags={}):
full_message = message if not prefix else prefix+message
- self.send("%sPRIVMSG %s :%s" % (tag_str, target, full_message))
+ self.send("%sPRIVMSG %s :%s" % (self._tag_str(tags), target,
+ full_message))
action = full_message.startswith("\01ACTION "
) and full_message.endswith("\01")
@@ -374,19 +377,27 @@ class Server(IRCObject.Object):
full_message_split = full_message.split()
if self.has_channel(target):
channel = self.get_channel(target)
- channel.buffer.add_line(None, message, action, tags, True)
+ channel.buffer.add_message(None, message, action, tags, True)
self.events.on("self.message.channel").call(
message=full_message, message_split=full_message_split,
channel=channel, action=action, server=self)
else:
user = self.get_user(target)
- user.buffer.add_line(None, message, action, tags, True)
+ user.buffer.add_message(None, message, action, tags, True)
self.events.on("self.message.private").call(
message=full_message, message_split=full_message_split,
user=user, action=action, server=self)
- def send_notice(self, target, message):
- self.send("NOTICE %s :%s" % (target, message))
+ def send_notice(self, target, message, prefix=None, tags={}):
+ full_message = message if not prefix else prefix+message
+ self.send("%sNOTICE %s :%s" % (self._tag_str(tags), target,
+ full_message))
+ if self.has_channel(target):
+ self.get_channel(target).buffer.add_notice(None, message, tags,
+ True)
+ else:
+ self.get_user(target).buffer.add_notice(None, message, tags,
+ True)
def send_mode(self, target, mode=None, args=None):
self.send("MODE %s%s%s" % (target, "" if mode == None else " %s" % mode,