update group invite to lock per group not global and rollback libra

This commit is contained in:
Madpeterz 2020-12-01 16:05:28 +00:00
parent 422b753c3d
commit da6b1a7a8d
2 changed files with 32 additions and 21 deletions

View file

@ -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;
}

View file

@ -88,7 +88,7 @@ namespace BSB.bottypes
protected Dictionary<string, string> Scripts_content = new Dictionary<string, string>();
protected Dictionary<string, string> notecards_content = new Dictionary<string, string>();
protected Dictionary<UUID, long> group_invite_lockout_timer = new Dictionary<UUID, long>();
protected Dictionary<UUID, Dictionary<UUID, long>> group_invite_lockout_timer = new Dictionary<UUID, Dictionary<UUID, long>>();
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<UUID, long>());
}
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<UUID> clear_locks = new List<UUID>();
foreach(KeyValuePair<UUID,long> 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<UUID> clear_locks = new List<UUID>();
foreach (KeyValuePair<UUID, long> 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)