From da6b1a7a8dd9f10a747af5a03b7b3dcf6231b4c6 Mon Sep 17 00:00:00 2001 From: Madpeterz <57852827+Madpeterz@users.noreply.github.com> Date: Tue, 1 Dec 2020 16:05:28 +0000 Subject: [PATCH] update group invite to lock per group not global and rollback libra --- Core/Commands/Group/GroupInvite.cs | 4 +-- Core/bottypes/CommandsBot.cs | 49 ++++++++++++++++++------------ 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/Core/Commands/Group/GroupInvite.cs b/Core/Commands/Group/GroupInvite.cs index 1955b55..9d119a8 100644 --- a/Core/Commands/Group/GroupInvite.cs +++ b/Core/Commands/Group/GroupInvite.cs @@ -33,9 +33,9 @@ namespace BSB.Commands.Group { if (bot.MyGroups.ContainsKey(target_group) == true) { - if (bot.GetAllowGroupInvite(target_avatar) == true) + if (bot.GetAllowGroupInvite(target_avatar, target_group) == true) { - bot.GroupInviteLockoutArm(target_avatar); // enable 120 sec cooldown + bot.GroupInviteLockoutArm(target_avatar,target_group); // enable 120 sec cooldown ForRealGroupInvite(args, target_group, target_avatar); return true; } diff --git a/Core/bottypes/CommandsBot.cs b/Core/bottypes/CommandsBot.cs index e62ba7d..31d3f28 100644 --- a/Core/bottypes/CommandsBot.cs +++ b/Core/bottypes/CommandsBot.cs @@ -88,7 +88,7 @@ namespace BSB.bottypes protected Dictionary Scripts_content = new Dictionary(); protected Dictionary notecards_content = new Dictionary(); - protected Dictionary group_invite_lockout_timer = new Dictionary(); + protected Dictionary> group_invite_lockout_timer = new Dictionary>(); protected long last_cleanup_commands; public override string GetStatus() @@ -102,35 +102,46 @@ namespace BSB.bottypes CommandsInterface.StatusTick(); return base.GetStatus(); } - public bool GetAllowGroupInvite(UUID avatar) + public bool GetAllowGroupInvite(UUID avatar, UUID group) { - return !group_invite_lockout_timer.ContainsKey(avatar); + if (group_invite_lockout_timer.ContainsKey(group) == true) + { + return !group_invite_lockout_timer[group].ContainsKey(avatar); + } + return true; } - public void GroupInviteLockoutArm(UUID avatar) - { - if (group_invite_lockout_timer.ContainsKey(avatar) == false) + public void GroupInviteLockoutArm(UUID avatar, UUID group) + { + if (group_invite_lockout_timer.ContainsKey(group) == false) + { + group_invite_lockout_timer.Add(group, new Dictionary()); + } + if (group_invite_lockout_timer[group].ContainsKey(avatar) == false) { - group_invite_lockout_timer.Add(avatar,0); + group_invite_lockout_timer[group].Add(avatar,0); } - group_invite_lockout_timer[avatar] = helpers.UnixTimeNow(); + group_invite_lockout_timer[group][avatar] = helpers.UnixTimeNow(); } protected void PurgeOldGroupinviteLockouts() { long now = helpers.UnixTimeNow(); - List clear_locks = new List(); - foreach(KeyValuePair Glock in group_invite_lockout_timer) - { - long dif = now - Glock.Value; - if(dif >= 120) - { - clear_locks.Add(Glock.Key); + foreach (UUID group in group_invite_lockout_timer.Keys) + { + List clear_locks = new List(); + foreach (KeyValuePair Glock in group_invite_lockout_timer[group]) + { + long dif = now - Glock.Value; + if (dif >= 120) + { + clear_locks.Add(Glock.Key); + } + } + foreach (UUID glock in clear_locks) + { + group_invite_lockout_timer[group].Remove(glock); } } - foreach(UUID glock in clear_locks) - { - group_invite_lockout_timer.Remove(glock); - } } protected void custom_commands_loop(string command,string arg,UUID caller)