aboutsummaryrefslogtreecommitdiff
path: root/modules/line_handler
diff options
context:
space:
mode:
authorGravatar jesopo2019-06-03 11:03:12 +0100
committerGravatar jesopo2019-06-03 11:03:12 +0100
commitd610282c9e2ca9a55d1d79c36b9dfb732b07f810 (patch)
treee15235a9652d7200b689a7fe2a87c123b424a223 /modules/line_handler
parentclarify what "enforce version" refers to (it's python version) in CHANGELOG (diff)
signature
Consolidate PRIVMSG, NOTICE and TAGMSG handlers in to 1 function
Diffstat (limited to 'modules/line_handler')
-rw-r--r--modules/line_handler/__init__.py24
-rw-r--r--modules/line_handler/message.py178
2 files changed, 66 insertions, 136 deletions
diff --git a/modules/line_handler/__init__.py b/modules/line_handler/__init__.py
index 73057b55..aee4e05a 100644
--- a/modules/line_handler/__init__.py
+++ b/modules/line_handler/__init__.py
@@ -10,8 +10,9 @@ class Module(ModuleManager.BaseModule):
default_events.append(hook.kwargs.get("default_event", False))
default_event = any(default_events)
- kwargs = {"args": line.args, "tags": line.tags, "server": server,
- "prefix": line.prefix, "direction": utils.Direction.Recv}
+ kwargs = {"command": line.command, "args": line.args, "tags": line.tags,
+ "server": server, "prefix": line.prefix,
+ "direction": utils.Direction.Recv}
self.events.on("raw.received").on(line.command).call_unsafe(**kwargs)
if default_event or not hooks:
@@ -29,8 +30,9 @@ class Module(ModuleManager.BaseModule):
@utils.hook("raw.send")
def handle_send(self, event):
self.events.on("raw.send").on(event["line"].command).call_unsafe(
- args=event["line"].args, tags=event["line"].tags,
- server=event["server"], direction=utils.Direction.Send)
+ command=event["line"].command, args=event["line"].args,
+ tags=event["line"].tags, server=event["server"],
+ direction=utils.Direction.Send)
# ping from the server
@utils.hook("raw.received.ping")
@@ -153,22 +155,14 @@ class Module(ModuleManager.BaseModule):
def invite(self, event):
core.invite(self.events, event)
- # we've received/sent a message
+ # we've received/sent a PRIVMSG, NOTICE or TAGMSG
@utils.hook("raw.received.privmsg")
@utils.hook("raw.send.privmsg")
- def privmsg(self, event):
- message.privmsg(self.events, event)
-
- # we've received/sent a notice
@utils.hook("raw.received.notice")
@utils.hook("raw.send.notice")
- def notice(self, event):
- message.notice(self.events, event)
-
- # IRCv3 TAGMSG, used to send tags without any other information
@utils.hook("raw.received.tagmsg")
- def tagmsg(self, event):
- message.tagmsg(self.events, event)
+ def message(self, event):
+ message.message(self.events, event)
# IRCv3 AWAY, used to notify us that a client we can see has changed /away
@utils.hook("raw.received.away")
diff --git a/modules/line_handler/message.py b/modules/line_handler/message.py
index 4fb507ca..369a72dc 100644
--- a/modules/line_handler/message.py
+++ b/modules/line_handler/message.py
@@ -12,152 +12,88 @@ def _from_self(server, direction, prefix):
else:
return False
-def privmsg(events, event):
+def message(events, event):
from_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)
-
- message = event["args"][1]
target_str = event["args"][0]
- # strip prefix_symbols from the start of target, for when people use
- # e.g. 'PRIVMSG +#channel :hi' which would send a message to only
- # voiced-or-above users
- target = target_str.lstrip("".join(event["server"].prefix_symbols.keys()))
-
- channel = None
- if target[0] in event["server"].channel_types:
- if not target in event["server"].channels:
- return
- channel = event["server"].channels.get(target)
-
- action = False
- event_type = "message"
- ctcp_message = utils.irc.parse_ctcp(message)
- if ctcp_message:
- message = ctcp_message.message
- if ctcp_message.command == "ACTION":
- action = True
- message = ctcp_message.message
- else:
- event_type = "ctcp.%s" % ctcp_message.command
-
- if user and "account" in event["tags"]:
- user.identified_account = event["tags"]["account"]
- user.identified_account_id = event["server"].get_user(
- event["tags"]["account"]).get_id()
-
- kwargs = {"message": message, "message_split": message.split(" "),
- "server": event["server"], "tags": event["tags"],
- "action": action, "target_str": target_str}
-
- direction = "send" if from_self else "received"
- context = "channel" if channel else "private"
- hook = events.on(direction).on(event_type).on(context)
-
- user_nickname = None
- if user:
- user_nickname = None if from_self else user.nickname
-
- if channel:
- hook.call(user=user, channel=channel, **kwargs)
- channel.buffer.add_message(user_nickname, message, action,
- event["tags"], user==None)
- elif from_self:
- # a message we've sent to a user
- user = event["server"].get_user(target)
- hook.call(user=user, **kwargs)
- user.buffer.add_message(user_nickname, message, action,
- event["tags"], True)
- elif event["server"].is_own_nickname(target):
- hook.call(user=user, **kwargs)
- user.buffer.add_message(user_nickname, message, action,
- event["tags"], False)
-
-def notice(events, event):
- from_self = _from_self(event["server"], event["direction"],
- event.get("prefix", None))
- if from_self == None:
- return
+ message = None
+ if len(event["args"]) > 1:
+ message = event["args"][1]
- message = event["args"][1]
- target = event["args"][0]
-
- if "prefix" in event and (
+ if not from_self and (
not event["prefix"] or
not event["server"].name or
event["prefix"].hostmask == event["server"].name or
- target == "*"):
+ target_str == "*"):
if event["prefix"]:
event["server"].name = event["prefix"].hostmask
events.on("received.server-notice").call(message=message,
message_split=message.split(" "), server=event["server"])
+ return
+
+ if from_self:
+ user = event["server"].get_user(event["server"].nickname)
else:
- user = None
- if "prefix" in event and not from_self:
- user = event["server"].get_user(event["prefix"].nickname)
+ user = event["server"].get_user(event["prefix"].nickname)
- channel = None
- if target[0] in event["server"].channel_types:
- channel = event["server"].channels.get(target)
+ # strip prefix_symbols from the start of target, for when people use
+ # e.g. 'PRIVMSG +#channel :hi' which would send a message to only
+ # voiced-or-above users
+ target = target_str.lstrip("".join(event["server"].prefix_symbols.keys()))
- direction = "send" if from_self else "received"
- context = "channel" if channel else "private"
- hook = events.on(direction).on("notice").on(context)
+ is_channel = False
- user_nickname = None
- if user:
- user_nickname = None if from_self else user.nickname
+ if target[0] in event["server"].channel_types:
+ is_channel = True
+ if not target in event["server"].channels:
+ return
+ target_obj = event["server"].channels.get(target)
+ else:
+ target_obj = event["server"].get_user(target)
- kwargs = {"message": message, "message_split": message.split(" "),
- "server": event["server"], "tags": event["tags"]}
+ kwargs = {"server": event["server"], "target": target_obj,
+ "target_str": target_str, "user": user, "tags": event["tags"]}
- if channel:
- hook.call(user=user, channel=channel, **kwargs)
- channel.buffer.add_notice(user_nickname, message, event["tags"],
- user==None)
- elif from_self:
- # a notice we've sent to a user
- user = event["server"].get_user(target)
- hook.call(user=user, **kwargs)
- user.buffer.add_notice(user_nickname, message, event["tags"],
- True)
- elif event["server"].is_own_nickname(target):
- hook.call(user=user, **kwargs)
- user.buffer.add_notice(user_nickname, message, event["tags"],
- False)
+ action = False
+ ctcp_message = utils.irc.parse_ctcp(message)
-def tagmsg(events, event):
- from_self = _from_self(event["server"], event["direction"],
- event.get("prefix", None))
- if from_self == None:
- return
+ if ctcp_message:
+ if not ctcp_message.command == "ACTION" or not event["command"
+ ] == "PRIVMSG":
+ if event["command"] == "PRIVMSG":
+ direction = "request"
+ else:
+ direction = "response"
+ events.on("received.ctcp").on(direction).on(ctcp_message.command
+ ).call(message=ctcp_message.message, **kwargs)
+ return
+ else:
+ message = ctcp_message.message
+ action = True
- user = None
- if "prefix" in event and not from_self:
- user = event["server"].get_user(event["prefix"].nickname)
+ if not message == None:
+ kwargs["message"] = message
+ kwargs["message_split"] = message.split(" ")
+ kwargs["action"] = action
- target = event["args"][0]
- channel = None
- if target[0] in event["server"].channel_types:
- channel = event["server"].channels.get(target)
+ event_type = event["command"].lower()
+ if event["command"] == "PRIVMSG":
+ event_type = "message"
direction = "send" if from_self else "received"
- context = "channel" if channel else "private"
- hook = events.on(direction).on("tagmsg").on(context)
-
- kwargs = {"server": event["server"], "tags": event["tags"]}
+ context = "channel" if is_channel else "private"
+ hook = events.on(direction).on(event_type).on(context)
- if channel:
- hook.call(user=user, channel=channel, **kwargs)
- elif event["server"].is_own_nickname(target):
- hook.call(user=user, **kwargs)
- elif from_self:
- user = event["server"].get_user(target)
- hook.call(user=user, **kwargs)
+ if is_channel:
+ hook.call(channel=target_obj, **kwargs)
+ target_obj.buffer.add_message(user.nickname, message, action,
+ event["tags"], from_self)
+ else:
+ hook.call(**kwargs)
+ target_obj.buffer.add_message(user.nickname, message, action,
+ event["tags"], True)