Update onevent.cs

adds lockout support
This commit is contained in:
Madpeterz 2021-05-22 14:52:48 +01:00
parent a7f096acd9
commit 19dc0c8c1f

View file

@ -24,7 +24,27 @@ namespace BetterSecondbot.OnEvents
protected Dictionary<UUID, KeyValuePair<long, int>> group_membership_update_q = new Dictionary<UUID, KeyValuePair<long, int>>(); protected Dictionary<UUID, KeyValuePair<long, int>> group_membership_update_q = new Dictionary<UUID, KeyValuePair<long, int>>();
protected List<OnEvent> Events = new List<OnEvent>(); protected List<OnEvent> Events = new List<OnEvent>();
protected Dictionary<UUID, List<UUID>> GroupMembership = new Dictionary<UUID, List<UUID>>(); protected Dictionary<UUID, List<UUID>> GroupMembership = new Dictionary<UUID, List<UUID>>();
protected Dictionary<UUID, long> Lockout = new Dictionary<UUID, long>();
protected void CleanupLockout()
{
List<UUID> purgeEntrys = new List<UUID>();
lock(Lockout)
{
long now = helpers.UnixTimeNow();
foreach(KeyValuePair<UUID,long> 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<string, string> args, bool enableCronArgs = false) protected void TriggerEvent(string trigger, Dictionary<string, string> args, bool enableCronArgs = false)
{ {
if (controler.BotReady() == true) if (controler.BotReady() == true)
@ -64,11 +84,51 @@ namespace BetterSecondbot.OnEvents
foreach (string a in E.Actions) foreach (string a in E.Actions)
{ {
string wip = UpdateBits(a, args); string wip = UpdateBits(a, args);
if (wip.StartsWith("lockout=") == true)
{
processLockout(wip);
continue;
}
string[] bits = wip.Split("|||", StringSplitOptions.None); string[] bits = wip.Split("|||", StringSplitOptions.None);
if (bits.Length == 2) if (bits.Length == 2)
{ {
controler.getBot().CallAPI(bits[0], bits[1].Split("~#~")); 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)
{
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", "CRON", "IN_GROUP", "NOT_IN_GROUP",
"IS", "NOT", "IS_EMPTY", "HAS", "MISSING", "IS", "NOT", "IS_EMPTY", "HAS", "MISSING",
"IS_UUID", "CRON" "IS_UUID", "CRON", "LOCKOUT"
}; };
foreach (string A in E.Where) foreach (string A in E.Where)
{ {
@ -234,6 +294,25 @@ namespace BetterSecondbot.OnEvents
break; 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") else if (filter == "IS")
{ {
if(bits[0] != bits[1]) if(bits[0] != bits[1])
@ -707,6 +786,7 @@ namespace BetterSecondbot.OnEvents
{ {
lastMinTick = Dt.Minute; lastMinTick = Dt.Minute;
ClockEvent(); ClockEvent();
CleanupLockout();
if(requestedGroupdetails == false) if(requestedGroupdetails == false)
{ {
requestedGroupdetails = true; requestedGroupdetails = true;