From 19dc0c8c1ff2fe6089bfe7cf8eb1483264176308 Mon Sep 17 00:00:00 2001 From: Madpeterz <57852827+Madpeterz@users.noreply.github.com> Date: Sat, 22 May 2021 14:52:48 +0100 Subject: [PATCH] Update onevent.cs adds lockout support --- BetterSecondbot/OnEvents/onevent.cs | 88 +++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 4 deletions(-) diff --git a/BetterSecondbot/OnEvents/onevent.cs b/BetterSecondbot/OnEvents/onevent.cs index e1fe60b..d0a7180 100644 --- a/BetterSecondbot/OnEvents/onevent.cs +++ b/BetterSecondbot/OnEvents/onevent.cs @@ -24,7 +24,27 @@ namespace BetterSecondbot.OnEvents protected Dictionary> group_membership_update_q = new Dictionary>(); protected List Events = new List(); protected Dictionary> GroupMembership = new Dictionary>(); + protected Dictionary Lockout = new Dictionary(); + protected void CleanupLockout() + { + List purgeEntrys = new List(); + lock(Lockout) + { + long now = helpers.UnixTimeNow(); + foreach(KeyValuePair entry in Lockout) + { + if(entry.Value < now) + { + purgeEntrys.Add(entry.Key); + } + } + foreach(UUID a in purgeEntrys) + { + Lockout.Remove(a); + } + } + } protected void TriggerEvent(string trigger, Dictionary args, bool enableCronArgs = false) { if (controler.BotReady() == true) @@ -61,13 +81,53 @@ namespace BetterSecondbot.OnEvents protected void actionEvents(OnEvent E, Dictionary args) { - foreach(string a in E.Actions) + foreach (string a in E.Actions) { string wip = UpdateBits(a, args); - string[] bits = wip.Split("|||",StringSplitOptions.None); + if (wip.StartsWith("lockout=") == true) + { + processLockout(wip); + continue; + } + string[] bits = wip.Split("|||", StringSplitOptions.None); + if (bits.Length == 2) + { + controler.getBot().CallAPI(bits[0], bits[1].Split("~#~")); + } + + } + } + + protected void processLockout(string lockoutString) + { + lock(Lockout) + { + string[]bits = lockoutString.Split("=", StringSplitOptions.None); if(bits.Length == 2) { - controler.getBot().CallAPI(bits[0],bits[1].Split("~#~")); + string[]subbits= bits[1].Split("+", StringSplitOptions.None); + if(subbits.Length == 2) + { + if(int.TryParse(subbits[1],out int addsecs) == true) + { + if(addsecs < 60) + { + addsecs = 60; + } + if (addsecs > 9999) + { + addsecs = 9999; + } + if (UUID.TryParse(subbits[0],out UUID addUUID) == true) + { + if(Lockout.ContainsKey(addUUID) == true) + { + Lockout.Remove(addUUID); + } + Lockout.Add(addUUID, helpers.UnixTimeNow() + addsecs); + } + } + } } } } @@ -191,7 +251,7 @@ namespace BetterSecondbot.OnEvents { "CRON", "IN_GROUP", "NOT_IN_GROUP", "IS", "NOT", "IS_EMPTY", "HAS", "MISSING", - "IS_UUID", "CRON" + "IS_UUID", "CRON", "LOCKOUT" }; foreach (string A in E.Where) { @@ -234,6 +294,25 @@ namespace BetterSecondbot.OnEvents break; } } + else if(filter == "LOCKOUT") + { + if (bool.TryParse(bits[1], out bool status) == false) + { + WherePassed = false; + break; + } + if(UUID.TryParse(bits[0], out UUID leftUUID) == false) + { + WherePassed = false; + break; + } + bool check = Lockout.ContainsKey(leftUUID); + if (check != status) + { + WherePassed = false; + break; + } + } else if (filter == "IS") { if(bits[0] != bits[1]) @@ -707,6 +786,7 @@ namespace BetterSecondbot.OnEvents { lastMinTick = Dt.Minute; ClockEvent(); + CleanupLockout(); if(requestedGroupdetails == false) { requestedGroupdetails = true;