Exemple #1
0
        /// <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;
                }
            }
        }
Exemple #2
0
        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);
        }