aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jesopo2018-09-03 22:17:34 +0100
committerGravatar jesopo2018-09-03 22:17:34 +0100
commit1c474771c513beaaecea90ec30e732d8c8cdc9c0 (patch)
tree08b622db9e328a58897649759bcb3f23a2c67709
parentKeep a list of CAP capabilities in IRCServer (diff)
signature
Support IRCv3's echo-message
-rw-r--r--IRCLineHandler.py32
-rw-r--r--IRCServer.py37
2 files changed, 42 insertions, 27 deletions
diff --git a/IRCLineHandler.py b/IRCLineHandler.py
index 082aa884..045bc33d 100644
--- a/IRCLineHandler.py
+++ b/IRCLineHandler.py
@@ -8,7 +8,8 @@ RE_CHANTYPES = re.compile(r"\bCHANTYPES=(\W+)(?:\b|$)")
RE_MODES = re.compile(r"[-+]\w+")
CAPABILITIES = {"message-tags", "multi-prefix", "chghost", "invite-notify",
- "account-tag", "account-notify", "extended-join", "away-notify"}
+ "account-tag", "account-notify", "extended-join", "away-notify",
+ "echo-message"}
class LineHandler(object):
def __init__(self, bot, events):
@@ -372,17 +373,30 @@ class LineHandler(object):
action = message.startswith("\01ACTION ") and message.endswith("\01")
if action:
message = message.replace("\01ACTION ", "", 1)[:-1]
+
+ kwargs = {"message": message, "message_split": message_split,
+ "server": event["server"], "tags": event["tags"],
+ "action": action}
+
if target[0] in event["server"].channel_types:
channel = event["server"].get_channel(event["args"][0])
- self.events.on("received").on("message").on("channel").call(
- user=user, message=message, message_split=message_split,
- channel=channel, action=action, server=event["server"],
- tags=event["tags"])
- channel.buffer.add_line(user.nickname, message, action)
+
+ if not event["server"].is_own_nickname(nickname):
+ self.events.on("received.message.channel").call(
+ user=user, channel=channel, **kwargs)
+ channel.buffer.add_line(user.nickname, message, action)
+ else:
+ # supporting echo-message
+ self.events.on("self.message.channel").call(
+ channel=channel, **kwargs)
+ channel.buffer.add_line(user.nickname, message, action, True)
+ elif event["server"].is_own_nickname(nickname):
+ # supporting echo-message
+ self.events.on("self.message.private").call(
+ user=event["server"].get_user(target), **kwargs)
elif event["server"].is_own_nickname(target):
- self.events.on("received").on("message").on("private").call(
- user=user, message=message, message_split=message_split,
- action=action, server=event["server"], tags=event["tags"])
+ self.events.on("received.message.private").call(
+ user=user, **kwargs)
user.buffer.add_line(user.nickname, message, action)
# we've received a notice
diff --git a/IRCServer.py b/IRCServer.py
index dbfbdf8e..a1d42476 100644
--- a/IRCServer.py
+++ b/IRCServer.py
@@ -329,27 +329,28 @@ class Server(object):
def send_message(self, target, message, prefix=None):
full_message = message if not prefix else prefix+message
-
self.send("PRIVMSG %s :%s" % (target, full_message))
- action = full_message.startswith("\01ACTION "
- ) and full_message.endswith("\01")
- if action:
- message = full_message.split("\01ACTION ", 1)[1][:-1]
+ if not "echo-message" in self.capabilities:
+ action = full_message.startswith("\01ACTION "
+ ) and full_message.endswith("\01")
- full_message_split = full_message.split()
- if self.has_channel(target):
- channel = self.get_channel(target)
- channel.buffer.add_line(None, message, action, True)
- self.events.on("self").on("message").on("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)
- self.events.on("self").on("message").on("private").call(
- message=full_message, message_split=full_message_split,
- user=user, action=action, server=self)
+ if action:
+ message = full_message.split("\01ACTION ", 1)[1][:-1]
+
+ full_message_split = full_message.split()
+ if self.has_channel(target):
+ channel = self.get_channel(target)
+ channel.buffer.add_line(None, message, action, True)
+ self.events.on("self").on("message").on("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)
+ self.events.on("self").on("message").on("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))