From 5f5496c9189e7dc1f3c3364679b61d634c034087 Mon Sep 17 00:00:00 2001 From: Alex Orid Date: Thu, 15 Oct 2020 01:27:51 -0400 Subject: [PATCH] added cooldowns class --- cooldowns.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ twitch_script.py | 11 +++++-- 2 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 cooldowns.py diff --git a/cooldowns.py b/cooldowns.py new file mode 100644 index 0000000..5764024 --- /dev/null +++ b/cooldowns.py @@ -0,0 +1,81 @@ +from os import name +import random +import re + +import datetime +from datetime import timedelta + +import time +from time import sleep +from typing import Optional + +class Cooldown_Action: + def __init__(self): + self.name:str = "" + self.time = datetime.datetime.now() + +class Cooldowns_Module: + def __init__(self): + super().__init__() + 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 + + + def isCooldownActive(self): + isCoolDownActivated:bool = False + + timenow = datetime.datetime.now() + timepast = timenow.fromtimestamp + + if len(self.actionList) > self.coolDownActionLimit: + actionCount = len(self.actionList) + + maxTmpIndex = actionCount - self.coolDownActionLimit - 1 + maxRecentAction:Cooldown_Action = self.actionList[maxTmpIndex] + + minTmpIndex = actionCount - 1 + mostRecentAction:Cooldown_Action = self.actionList[minTmpIndex] + + timeDiff = mostRecentAction.time - maxRecentAction.time + + maxTimeAllowed = timedelta(seconds = self.coolDownDuration) + if timeDiff >= maxTimeAllowed: + isCoolDownActivated = True + + return isCoolDownActivated + + def actionTrigger(self, name:str = ""): + newAction = Cooldown_Action() + newAction.name = name + self.actionList.append(newAction) + +if __name__ == "__main__": + testCD = Cooldowns_Module() + testCD.setupCooldown("test", 20, 1) + + print("CD Test 1: ") + for x in range(10): + testCD.actionTrigger() + sleep(0) + print(testCD.isCooldownActive()) + + print("CD Test 2: ") + for x in range(21): + testCD.actionTrigger() + sleep(0.08) + print(testCD.isCooldownActive()) + + print("CD Test 3: ") + for x in range(40): + testCD.actionTrigger() + sleep(0.02) + print(testCD.isCooldownActive()) \ No newline at end of file diff --git a/twitch_script.py b/twitch_script.py index 50e1bce..6b8676b 100644 --- a/twitch_script.py +++ b/twitch_script.py @@ -1,3 +1,4 @@ +from typing import Sequence import random import re @@ -12,6 +13,7 @@ import commands.loader as command_loader import credentials from commands.command_base import AbstractCommand +from cooldowns import Cooldowns_Module class Twitch_Module(): def __init__(self): @@ -30,6 +32,9 @@ class Twitch_Module(): self._urlMatcher = re.compile( "(https?:(/{1,3}|[a-z0-9%])|[a-z0-9.-]+[.](com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw))") + self.twitchChat_cooldown:Cooldowns_Module = Cooldowns_Module() + self.twitchChat_cooldown.setupCooldown("twitchChat", 20, 30) + def join_channel(self, credential: credentials.Twitch_Credential, channel_name:str): channel_name = "#" + channel_name print("Connecting to Channel: " + channel_name) @@ -53,7 +58,9 @@ class Twitch_Module(): self.chat.irc.socket.close() def send_message(self, message): - self.chat.send(message) + if self.twitchChat_cooldown.isCooldownActive() == False: + self.chat.send(message) + self.twitchChat_cooldown.actionTrigger() def send_whisper(self, user, message): pass @@ -74,7 +81,7 @@ class Twitch_Module(): #first_space_idx = message.text.index(' ') # This fixes a error where if you send a command without arguments it fails because - # it cant find the substring. + # it cant find the substring. if message.text.find(" ") != -1: first_space_idx = message.text.index(' ') else: