Reimplemented user limits with User class
Flesshed out user class
This commit is contained in:
parent
ba66b7935b
commit
5936bdf379
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
env/
|
||||
.vscode/
|
||||
__pycache__/
|
||||
.twitchcreds
|
||||
36
UserData.py
Normal file
36
UserData.py
Normal 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
|
||||
83
tbot.py
83
tbot.py
@ -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('@','')
|
||||
if checkUserExists(msg):
|
||||
message.chat.send(f"permitting {msg}")
|
||||
permitURL.append(msg)
|
||||
print(permitURL)
|
||||
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
2
twitchcreds
Normal file
@ -0,0 +1,2 @@
|
||||
[{"OAUTH":"oauth:OAUTHCODE", "CLIENTID":"TWITCHCLIENTID"},
|
||||
{"MODS":["MODERATORS", "GOHERE"], "CHANNEL":"CHANNELNAME"}]
|
||||
Loading…
x
Reference in New Issue
Block a user