Praxis_Bot/cooldowns.py
2020-10-15 06:40:42 -04:00

110 lines
2.9 KiB
Python

import random
import re
import datetime
from datetime import timedelta
import time
from time import sleep
class Cooldown_Action:
def __init__(self):
self.tag:str = ""
self.time = datetime.datetime.now()
class Cooldown:
def __init__(self):
self.cooldownName:str = ""
self.cooldownActionLimit:int = 0
self.cooldownDuration:int = 0 #Seconds
self.actionList:list = []
def setupCooldown(self, name, limit, duration):
self.cooldownName = name
self.cooldownActionLimit = limit
self.cooldownDuration = duration
class Cooldowns_Module:
def __init__(self):
super().__init__()
self.cooldownList:list = []
def setupCooldown(self, name, limit, duration):
newCD:Cooldown = Cooldown()
newCD.setupCooldown(name, limit, duration)
self.cooldownList.append(newCD)
def getCooldown(self, name:str):
returnCD:bool = False
for cd in self.cooldownList:
if cd.cooldownName == name:
returnCD = True
return cd
if returnCD == False:
return None
def isCooldownActive(self, name:str):
isCooldownActivated:bool = False
selectedCooldown:Cooldown = self.getCooldown(name)
timenow = datetime.datetime.now()
if len(selectedCooldown.actionList) >= selectedCooldown.cooldownActionLimit:
actionCount = len(selectedCooldown.actionList)
maxTmpIndex = actionCount - selectedCooldown.cooldownActionLimit
maxRecentAction:Cooldown_Action = selectedCooldown.actionList[maxTmpIndex]
timeDiff = timenow - maxRecentAction.time
maxTimeAllowed = timedelta(seconds = selectedCooldown.cooldownDuration)
if timeDiff < maxTimeAllowed:
isCooldownActivated = True
return isCooldownActivated
def actionTrigger(self, name:str = "", tag:str = ""):
newAction = Cooldown_Action()
newAction.tag = tag
targetCD = self.getCooldown(name)
if targetCD != None:
targetCD.actionList.append(newAction)
if __name__ == "__main__":
testCD = Cooldowns_Module()
cdName = "test"
testCD.setupCooldown(cdName, 20, 2)
print("CD Test 1: ")
for x in range(20):
testCD.actionTrigger(cdName)
sleep(0)
print(testCD.isCooldownActive(cdName))
print("//Test Done//")
sleep(2)
print("CD Test 2: ")
for x in range(10):
testCD.actionTrigger(cdName)
sleep(0)
print(testCD.isCooldownActive(cdName))
print("//Test Done//")
sleep(2)
print("CD Test 3: ")
for x in range(20):
testCD.actionTrigger(cdName)
sleep(0.05)
print(testCD.isCooldownActive(cdName))
print("//Test Done//")
sleep(2)
print("CD Test 4: ")
for x in range(20):
testCD.actionTrigger(cdName)
sleep(0.6)
print(testCD.isCooldownActive(cdName))
print("//Test Done//")