From de5baf562b192c2b9a69261bef59dae950aa3058 Mon Sep 17 00:00:00 2001 From: Mark Veidemanis Date: Sun, 19 Aug 2018 16:02:14 +0100 Subject: [PATCH] Fix monitors to work properly with multiple groups --- modules/monitor.py | 48 ++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/modules/monitor.py b/modules/monitor.py index 513c97c..48b01c3 100644 --- a/modules/monitor.py +++ b/modules/monitor.py @@ -3,16 +3,21 @@ import modules.keyword as keyword from copy import deepcopy def testNetTarget(name, target): + called = False for i in main.monitor.keys(): if "sources" in main.monitor[i].keys(): if name in main.monitor[i]["sources"]: if main.monitor[i]["sources"][name] == True: - return i + yield i + called = True elif target in main.monitor[i]["sources"][name]: - return i + yield i + called = True else: - return i - return False + yield i + called = True + if not called: + return False def magicFunction(A, B): if "send" in B.keys(): @@ -22,21 +27,22 @@ def magicFunction(A, B): return all(A[k] in B[k] for k in set(A) & set(B)) and set(B) <= set(A) def event(name, target, cast): - monitorGroup = testNetTarget(name, target) - if monitorGroup == False: + monitorGroups = testNetTarget(name, target) + if monitorGroups == False: return - matcher = magicFunction(deepcopy(cast), deepcopy(main.monitor[monitorGroup])) - if matcher == True: - if "send" in main.monitor[monitorGroup].keys(): - for i in main.monitor[monitorGroup]["send"].keys(): - if isinstance(main.monitor[monitorGroup]["send"][i], bool): - keyword.sendMaster("ERRDELIV MONITOR [%s] (%s/%s) %s " % (monitorGroup, name, target, cast)) - continue - if not i in main.pool.keys(): - keyword.sendMaster("ERROR on monitor %s: No such name: %s" % (monitorGroup, i)) - if not i in main.IRCPool.keys(): - keyword.sendMaster("ERROR on monitor %s: No such instance: %s" % (monitorGroup, i)) - for x in main.monitor[monitorGroup]["send"][i]: - main.IRCPool[i].msg(x, "MONITOR [%s] (%s/%s) %s" % (monitorGroup, name, target, cast)) - else: - keyword.sendMaster("MONITOR [%s] (%s/%s) %s " % (monitorGroup, name, target, cast)) + for monitorGroup in monitorGroups: + matcher = magicFunction(deepcopy(cast), deepcopy(main.monitor[monitorGroup])) + if matcher == True: + if "send" in main.monitor[monitorGroup].keys(): + for i in main.monitor[monitorGroup]["send"].keys(): + if isinstance(main.monitor[monitorGroup]["send"][i], bool): + keyword.sendMaster("ERRDELIV MONITOR [%s] (%s/%s) %s " % (monitorGroup, name, target, cast)) + continue + if not i in main.pool.keys(): + keyword.sendMaster("ERROR on monitor %s: No such name: %s" % (monitorGroup, i)) + if not i in main.IRCPool.keys(): + keyword.sendMaster("ERROR on monitor %s: No such instance: %s" % (monitorGroup, i)) + for x in main.monitor[monitorGroup]["send"][i]: + main.IRCPool[i].msg(x, "MONITOR [%s] (%s/%s) %s" % (monitorGroup, name, target, cast)) + else: + keyword.sendMaster("MONITOR [%s] (%s/%s) %s " % (monitorGroup, name, target, cast))