Reimplemented user limits with User class

Flesshed out user class
This commit is contained in:
Benjamyn Love 2019-12-31 01:59:39 +11:00
parent ba66b7935b
commit 5936bdf379
4 changed files with 81 additions and 43 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
env/
.vscode/
__pycache__/
.twitchcreds

36
UserData.py Normal file
View File

@ -0,0 +1,36 @@
import datetime
MSG_TIMEOUT = 30
MSG_LIMIT = 5
class UserData:
def __init__(self, username, ismod):
self.username = username
self.mod = ismod
self.messageCount = 0
self.messageTime = 0
self.messageLimit = MSG_LIMIT
self.URLPermit = False
def setUserTimeout(self):
if self.messageTime == 0:
self.messageTime = int(datetime.datetime.now().timestamp()) #Sets messagetime to now (Unix Timestamp)
def checkUserMessageTimout(self):
if self.messageTime >= self.messageTime + MSG_TIMEOUT:
self.messageTime = 0
return False
else:
return True
def setUserMessageCount(self, amt = 1):
if self.checkUserMessageTimout():
self.messageCount += amt
def checkUserMessageCount(self):
return self.messageCount >= MSG_LIMIT
def addURLPermit(self):
self.URLPermit = True
def removeURLPermit(self):
self.URLPermit = False

85
tbot.py
View File

@ -2,6 +2,7 @@ import twitch
import datetime
import re
import json
import UserData
with open(".twitchcreds") as file:
botSettings = json.loads(file.read())#
@ -9,31 +10,35 @@ with open(".twitchcreds") as file:
UserID = botSettings[0]['OAUTH']
PREFIX = '!'
BOTID = '[BOT]'
CHANNEL = botSettings[1]["CHANNEL"]
#User limits
TIMEOUT = 30
MSG_LIMIT = 5
userstats = {}
permitURL = []
class UserData:
def __init__(self, username):
self.username = username
self.mod = username in botSettings[1]["MODS"]
#Users
Users = {}
def isURL(message):
rule = re.compile("http(|s)[;:]\/\/.*\..*")
rule = re.compile(r"http(|s)[;:]\/\/.*\..*")
return rule.findall(message)
def addUser(username):
Users[username] = UserData.UserData(username, username in botSettings[1]["MODS"])
def checkUserExists(username):
if username in Users:
pass
else:
addUser(username)
return True
def handle_message(message: twitch.chat.Message) -> None:
#print(message.chat
uname = message.user.display_name
if uname not in Users:
Users[uname] = UserData.UserData(uname, uname in botSettings[1]["MODS"])
if message.text.startswith(PREFIX + 'views'):
message.chat.send(f'{BOTID} @{message.user.display_name}, you have {message.user.view_count} views.')
message.chat.send(f'{BOTID} @{uname}, you have {message.user.view_count} views.')
if message.text.startswith(PREFIX + "hello"):
message.chat.send(f"{BOTID} Hello @{message.user.display_name}, how are you?")
message.chat.send(f"{BOTID} Hello @{uname}, how are you?")
if message.text.startswith(PREFIX + "author"):
message.chat.send(f"{BOTID} I am written by an idiot who knows enough to cause trouble ;)")
@ -52,37 +57,32 @@ def handle_message(message: twitch.chat.Message) -> None:
print(msg)
if '@' in message.text:
msg = msg.replace('@','')
message.chat.send(f"permitting {msg}")
permitURL.append(msg)
print(permitURL)
if checkUserExists(msg):
message.chat.send(f"permitting {msg}")
Users[msg].addURLPermit()
# User limits
if message.user.display_name not in userstats:
timeOut = int(datetime.datetime.now().timestamp())
userstats[message.user.display_name] = [0, timeOut, timeOut + TIMEOUT]
userstats[message.user.display_name][0] += 1
else:
userstats[message.user.display_name][0] += 1
currTime = int(datetime.datetime.now().timestamp())
if currTime >= userstats[message.user.display_name][1]:
userstats[message.user.display_name][1] = currTime
userstats[message.user.display_name][1] = currTime + TIMEOUT
userstats[message.user.display_name][0] = 0
if currTime < userstats[message.user.display_name][2] and userstats[message.user.display_name][0] > MSG_LIMIT:
message.chat.send(f"{BOTID} Timing out {message.user.display_name} for 15 seconds, please no spam :(")
message.chat.send(f"/timeout {message.user.display_name} 15")
print(f"{userstats[message.user.display_name][2]}:{currTime}")
if message.user.display_name not in permitURL and isURL(message.text):
print("Timout user for 1 second to remove URL message, needs to be fixed")
message.chat.send(f"/timeout {message.user.display_name} 1")
message.chat.send(f"{BOTID} @{message.user.display_name} Please do not post messages with URL's unless permitted")
else:
if isURL(message.text):
permitURL.remove(message.user.display_name)
else:
#User Limits
if Users[uname].checkUserMessageTimout():
Users[uname].setUserMessageCount()
if Users[uname].messageCount >= Users[uname].messageLimit: # if the message limit has been reached
message.chat.send(f"{BOTID} Timing out {uname} for 15 seconds, please no spam :(")
message.chat.send(f"/timeout {uname} 15")
#URL Permits
if Users[uname].URLPermit and isURL(message.text):
Users[uname].removeURLPermit()
elif not Users[uname].URLPermit and isURL(message.text):
if f"https://www.twitch.tv/{CHANNEL}/clip" in message.text:
pass
else:
message.chat.send(f"/timeout {uname} 1")
message.chat.send(f"{BOTID} @{uname} Please do not post messages with URL's unless permitted")
# print(userstats)
def main():
@ -98,4 +98,3 @@ def main():
if __name__ == '__main__':
main()
#print(isURL("https://google.com"))
print(test.mod)

2
twitchcreds Normal file
View File

@ -0,0 +1,2 @@
[{"OAUTH":"oauth:OAUTHCODE", "CLIENTID":"TWITCHCLIENTID"},
{"MODS":["MODERATORS", "GOHERE"], "CHANNEL":"CHANNELNAME"}]