Praxis_Bot/cooldowns.py
2021-04-27 18:47:51 -04:00

127 lines
3.6 KiB
Python

import random
import re
import datetime
from datetime import timedelta
import time
from time import sleep
import os
import praxis_logging
praxis_logger_obj = praxis_logging.praxis_logger()
praxis_logger_obj.init(os.path.basename(__file__))
praxis_logger_obj.log("\n -Starting Logs: " + os.path.basename(__file__))
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 Cooldown_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)
if selectedCooldown == None:
return None
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)
praxis_logger_obj.log("CD Test 0: ")
for x in range(20):
testCD.actionTrigger("cdName")
sleep(0)
praxis_logger_obj.log(testCD.isCooldownActive("cdName"))
praxis_logger_obj.log("//Test Done//")
sleep(2)
praxis_logger_obj.log("CD Test 1: ")
for x in range(20):
testCD.actionTrigger(cdName)
sleep(0)
praxis_logger_obj.log(testCD.isCooldownActive("test"))
praxis_logger_obj.log("//Test Done//")
sleep(2)
praxis_logger_obj.log("CD Test 2: ")
for x in range(10):
testCD.actionTrigger(cdName)
sleep(0)
praxis_logger_obj.log(testCD.isCooldownActive(cdName))
praxis_logger_obj.log("//Test Done//")
sleep(2)
praxis_logger_obj.log("CD Test 3: ")
for x in range(20):
testCD.actionTrigger(cdName)
sleep(0.05)
praxis_logger_obj.log(testCD.isCooldownActive(cdName))
praxis_logger_obj.log("//Test Done//")
sleep(2)
praxis_logger_obj.log("CD Test 4: ")
for x in range(20):
testCD.actionTrigger(cdName)
sleep(0.6)
praxis_logger_obj.log(testCD.isCooldownActive(cdName))
praxis_logger_obj.log("//Test Done//")