aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar jesopo2018-10-01 17:26:31 +0100
committerGravatar jesopo2018-10-01 17:26:31 +0100
commit976b6ae335fc7563f35bc6e50d33779f4d69136e (patch)
tree0ce1f72b77532562b5e3639092b4a02e0aca7aa4 /src
parentEventHook._call takes 3 args (diff)
signature
Better support for msgtags with PRIVMSGs; put functionality in to
modules/commands.py to reply to specific messages by use of msgids
Diffstat (limited to 'src')
-rw-r--r--src/IRCBuffer.py7
-rw-r--r--src/IRCChannel.py4
-rw-r--r--src/IRCServer.py18
-rw-r--r--src/IRCUser.py5
4 files changed, 23 insertions, 11 deletions
diff --git a/src/IRCBuffer.py b/src/IRCBuffer.py
index 12a82ada..b3825178 100644
--- a/src/IRCBuffer.py
+++ b/src/IRCBuffer.py
@@ -2,10 +2,11 @@ import re
from . import Utils
class BufferLine(object):
- def __init__(self, sender, message, action, from_self):
+ def __init__(self, sender, message, action, tags, from_self):
self.sender = sender
self.message = message
self.action = action
+ self.tags = tags
self.from_self = from_self
class Buffer(object):
@@ -15,9 +16,9 @@ class Buffer(object):
self.lines = []
self.max_lines = 64
self._skip_next = False
- def add_line(self, sender, message, action, from_self=False):
+ def add_line(self, sender, message, action, tags, from_self=False):
if not self._skip_next:
- line = BufferLine(sender, message, action, from_self)
+ line = BufferLine(sender, message, action, tags, from_self)
self.lines.insert(0, line)
if len(self.lines) > self.max_lines:
self.lines.pop()
diff --git a/src/IRCChannel.py b/src/IRCChannel.py
index 78484a66..6569450f 100644
--- a/src/IRCChannel.py
+++ b/src/IRCChannel.py
@@ -105,8 +105,8 @@ class Channel(IRCObject.Object):
return self.bot.database.user_channel_settings.find_all_by_setting(
self.id, setting, default)
- def send_message(self, text, prefix=None):
- self.server.send_message(self.name, text, prefix=prefix)
+ def send_message(self, text, prefix=None, tags={}):
+ self.server.send_message(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 886062cd..d6f79b31 100644
--- a/src/IRCServer.py
+++ b/src/IRCServer.py
@@ -351,9 +351,19 @@ class Server(IRCObject.Object):
def send_quit(self, reason="Leaving"):
self.send("QUIT :%s" % reason)
- def send_message(self, target, message, prefix=None):
+ def send_message(self, target, message, prefix=None, tags={}):
+ tag_str = ""
+ for tag, value in tags.items():
+ if tag_str:
+ tag_str += ","
+ tag_str += tag
+ if value:
+ tag_str += "=%s" % value
+ if tag_str:
+ tag_str = "@%s " % tag_str
+
full_message = message if not prefix else prefix+message
- self.send("PRIVMSG %s :%s" % (target, full_message))
+ self.send("%sPRIVMSG %s :%s" % (tag_str, target, full_message))
action = full_message.startswith("\01ACTION "
) and full_message.endswith("\01")
@@ -364,13 +374,13 @@ 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, True)
+ channel.buffer.add_line(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, True)
+ user.buffer.add_line(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)
diff --git a/src/IRCUser.py b/src/IRCUser.py
index 93554e16..3f2eb260 100644
--- a/src/IRCUser.py
+++ b/src/IRCUser.py
@@ -56,8 +56,9 @@ class User(IRCObject.Object):
return self.bot.database.user_channel_settings.find_by_setting(
self.get_id(), setting, default)
- def send_message(self, message, prefix=None):
- self.server.send_message(self.nickname, message, prefix=prefix)
+ def send_message(self, message, prefix=None, tags={}):
+ self.server.send_message(self.nickname, message, prefix=prefix,
+ tags=tags)
def send_notice(self, message):
self.server.send_notice(self.nickname, message)
def send_ctcp_response(self, command, args):