/// <summary> /// Sets or updates a cooldown for a user. /// </summary> public void SetCooldown(CooldownType type, string name, TimeSpan duration) { DateTime expiresOn = DateTime.UtcNow.Add(duration); string id = $"{type.ToString().ToLower()}:{name}"; if (type.EqualsAny(CooldownType.Command, CooldownType.Global, CooldownType.Notify)) { if (!InternalCooldowns.TryAdd(id, expiresOn)) { InternalCooldowns[id] = expiresOn; } } if (type == CooldownType.Claimable) { Claimable info = Engine.GetClaimable(name); if (Cooldowns.ContainsKey(id)) { // if you can set a claimable cooldown. bool canUpdate = (Cooldowns[id] - DateTime.UtcNow) <= TimeSpan.Zero; if (canUpdate) { // Set up/update the streak stats if ((DateTime.UtcNow - Cooldowns[id]) >= info.Preservation) // if the streak will reset. { SetStat(info.StreakId, 1); } else { UpdateStat(info.StreakId, 1); } Cooldowns[id] = DateTime.UtcNow.Add(info.Cooldown); // set new expiration. } } else { SetStat(info.StreakId, 1); Cooldowns[id] = DateTime.UtcNow.Add(info.Cooldown); } } if (type == CooldownType.Item) { if (!Cooldowns.TryAdd(id, expiresOn)) { Cooldowns[id] = expiresOn; } } }
public bool IsOnCooldown(string id) { if (Cooldowns.ContainsKey(id)) { return(DateTime.UtcNow.Subtract(Cooldowns[id]).TotalSeconds > 0); } if (InternalCooldowns.ContainsKey(id)) { return(DateTime.UtcNow.Subtract(InternalCooldowns[id]).TotalSeconds > 0); } return(false); }