switch message_filter.py to use utils.parse.sed
This commit is contained in:
parent
29f0a282a8
commit
4870d32fee
1 changed files with 12 additions and 32 deletions
|
@ -6,27 +6,6 @@ from src import ModuleManager, utils
|
||||||
class Module(ModuleManager.BaseModule):
|
class Module(ModuleManager.BaseModule):
|
||||||
_name = "Filter"
|
_name = "Filter"
|
||||||
|
|
||||||
def _split(self, s):
|
|
||||||
backslash = False
|
|
||||||
forward_slash = []
|
|
||||||
for i, c in enumerate(s):
|
|
||||||
if not backslash:
|
|
||||||
if c == "/":
|
|
||||||
forward_slash.append(i)
|
|
||||||
if c == "\\":
|
|
||||||
backslash = True
|
|
||||||
else:
|
|
||||||
backslash = False
|
|
||||||
if forward_slash and (not forward_slash[-1] == (len(s)-1)):
|
|
||||||
forward_slash.append(len(s))
|
|
||||||
|
|
||||||
last = 0
|
|
||||||
out = []
|
|
||||||
for i in forward_slash:
|
|
||||||
out.append(s[last:i])
|
|
||||||
last = i+1
|
|
||||||
return out
|
|
||||||
|
|
||||||
def _get_filters(self, server, target):
|
def _get_filters(self, server, target):
|
||||||
filters = self.bot.get_setting("message-filters", [])
|
filters = self.bot.get_setting("message-filters", [])
|
||||||
filters.extend(server.get_setting("message-filters", []))
|
filters.extend(server.get_setting("message-filters", []))
|
||||||
|
@ -37,8 +16,8 @@ class Module(ModuleManager.BaseModule):
|
||||||
@utils.hook("preprocess.send.notice")
|
@utils.hook("preprocess.send.notice")
|
||||||
def channel_message(self, event):
|
def channel_message(self, event):
|
||||||
message = event["line"].args[1]
|
message = event["line"].args[1]
|
||||||
message_plain = utils.irc.strip_font(message)
|
|
||||||
original_message = message
|
original_message = message
|
||||||
|
message_plain = utils.irc.strip_font(message)
|
||||||
target_name = event["line"].args[0]
|
target_name = event["line"].args[0]
|
||||||
|
|
||||||
# strip off any STATUSMSG chars
|
# strip off any STATUSMSG chars
|
||||||
|
@ -51,17 +30,18 @@ class Module(ModuleManager.BaseModule):
|
||||||
|
|
||||||
filters = self._get_filters(event["server"], target)
|
filters = self._get_filters(event["server"], target)
|
||||||
for filter in filters:
|
for filter in filters:
|
||||||
type, pattern, *args = self._split(filter)
|
sed = utils.parse.sed.parse_sed(filter)
|
||||||
if type == "m":
|
type, out = utils.parse.sed.sed(sed, message)
|
||||||
if re.search(pattern, message_plain):
|
|
||||||
self.log.info("Message matched filter, dropping: %s"
|
if type == "m" and out:
|
||||||
% event["line"].format())
|
self.log.info("Message matched filter, dropping: %s"
|
||||||
event["line"].invalidate()
|
% event["line"].format())
|
||||||
return
|
event["line"].invalidate()
|
||||||
|
return
|
||||||
elif type == "s":
|
elif type == "s":
|
||||||
replace, *args = args
|
message = out
|
||||||
message = re.sub(pattern, replace, message)
|
|
||||||
if not message == message_plain:
|
if not message == original_message:
|
||||||
event["line"].args[1] = message
|
event["line"].args[1] = message
|
||||||
|
|
||||||
@utils.hook("received.command.cfilter", channel_only=True)
|
@utils.hook("received.command.cfilter", channel_only=True)
|
||||||
|
|
Loading…
Reference in a new issue