aboutsummaryrefslogtreecommitdiff
path: root/modules/line_handler.py
diff options
context:
space:
mode:
authorGravatar jesopo2019-02-22 10:14:23 +0000
committerGravatar jesopo2019-02-22 10:14:23 +0000
commit1ac8bf6ec1924ab0c4e23b07ac2e3766a833afd0 (patch)
treead86483fe2ae9a6520535094c6a2c5392f09af45 /modules/line_handler.py
parentRemove code duplication for checking if a PRIVMSG/NOTICE was sent by us (diff)
signature
Support echo-message TAGMSG
Diffstat (limited to 'modules/line_handler.py')
-rw-r--r--modules/line_handler.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/modules/line_handler.py b/modules/line_handler.py
index f434197c..1ba73ea8 100644
--- a/modules/line_handler.py
+++ b/modules/line_handler.py
@@ -584,16 +584,33 @@ class Module(ModuleManager.BaseModule):
# IRCv3 TAGMSG, used to send tags without any other information
@utils.hook("raw.received.tagmsg")
def tagmsg(self, event):
- user = event["server"].get_user(event["prefix"].nickname)
- target = event["args"][0]
+ from_self = self._from_self(event["server"], event["direction"],
+ event.get("prefix", None))
+ if from_self == None:
+ return
+ user = None
+ if "prefix" in event and not from_self:
+ user = event["server"].get_user(event["prefix"].nickname)
+
+ target = event["args"][0]
+ channel = None
if target[0] in event["server"].channel_types:
channel = event["server"].channels.get(target)
- self._event(event, "tagmsg.channel", channel=channel, user=user,
- tags=event["tags"], server=event["server"])
- elif event["server"].is_own_nickname(target):
- self._event(event, "tagmsg.private", user=user, tags=event["tags"],
- server=event["server"])
+
+ direction = "send" if from_self else "received"
+ context = "channel" if channel else "private"
+ hook = self.events.on(direction).on("tagmsg").on(context)
+
+ kwargs = {"server": event["server"], "tags": event["tags"]}
+
+ if channel:
+ hook.call(user=user, channel=channel, **kwargs)
+ elif event["server"].is_own_nickname(taget):
+ hook.call(user=user, **kwargs)
+ elif from_self:
+ user = event["server"].get_user(target)
+ hook.call(user=user, **kwargs)
# IRCv3 AWAY, used to notify us that a client we can see has changed /away
@utils.hook("raw.received.away")