From 850b4c3f6981deca9f552e8b5b51ef6797b09ad5 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 22 Sep 2023 13:30:08 +0200 Subject: [PATCH] MessageParser: Log and skip current regexp on error --- plugins/MessageParser/plugin.py | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/plugins/MessageParser/plugin.py b/plugins/MessageParser/plugin.py index baca48ad4..062e07916 100644 --- a/plugins/MessageParser/plugin.py +++ b/plugins/MessageParser/plugin.py @@ -192,20 +192,23 @@ class MessageParser(callbacks.Plugin, plugins.ChannelDBHandler): return max_triggers = self.registryValue('maxTriggers', channel, irc.network) for (channel, regexp, action) in results: - for match in re.finditer(regexp, msg.args[1]): - if match is not None: - thisaction = action - self._updateRank(irc.network, channel, regexp) - for (i, j) in enumerate(match.groups()): - if match.group(i+1) is not None: - # Need a lambda to prevent re.sub from - # interpreting backslashes in the replacement - thisaction = re.sub(r'\$' + str(i+1), lambda _: match.group(i+1), thisaction) - actions.append((regexp, thisaction)) - if max_triggers != 0 and max_triggers == len(actions): - break - if max_triggers != 0 and max_triggers == len(actions): - break + try: + for match in re.finditer(regexp, msg.args[1]): + if match is not None: + thisaction = action + self._updateRank(irc.network, channel, regexp) + for (i, j) in enumerate(match.groups()): + if match.group(i+1) is not None: + # Need a lambda to prevent re.sub from + # interpreting backslashes in the replacement + thisaction = re.sub(r'\$' + str(i+1), lambda _: match.group(i+1), thisaction) + actions.append((regexp, thisaction)) + if max_triggers != 0 and max_triggers == len(actions): + break + if max_triggers != 0 and max_triggers == len(actions): + break + except Exception: + self.log.exception('Error while handling %r', regexp) for (regexp, action) in actions: