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/
|
env/
|
||||||
.vscode/
|
.vscode/
|
||||||
|
__pycache__/
|
||||||
.twitchcreds
|
.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
|
||||||
85
tbot.py
85
tbot.py
@ -2,6 +2,7 @@ import twitch
|
|||||||
import datetime
|
import datetime
|
||||||
import re
|
import re
|
||||||
import json
|
import json
|
||||||
|
import UserData
|
||||||
|
|
||||||
with open(".twitchcreds") as file:
|
with open(".twitchcreds") as file:
|
||||||
botSettings = json.loads(file.read())#
|
botSettings = json.loads(file.read())#
|
||||||
@ -9,31 +10,35 @@ with open(".twitchcreds") as file:
|
|||||||
UserID = botSettings[0]['OAUTH']
|
UserID = botSettings[0]['OAUTH']
|
||||||
PREFIX = '!'
|
PREFIX = '!'
|
||||||
BOTID = '[BOT]'
|
BOTID = '[BOT]'
|
||||||
|
CHANNEL = botSettings[1]["CHANNEL"]
|
||||||
|
|
||||||
#User limits
|
#Users
|
||||||
TIMEOUT = 30
|
Users = {}
|
||||||
MSG_LIMIT = 5
|
|
||||||
userstats = {}
|
|
||||||
|
|
||||||
permitURL = []
|
|
||||||
|
|
||||||
class UserData:
|
|
||||||
def __init__(self, username):
|
|
||||||
self.username = username
|
|
||||||
self.mod = username in botSettings[1]["MODS"]
|
|
||||||
|
|
||||||
def isURL(message):
|
def isURL(message):
|
||||||
rule = re.compile("http(|s)[;:]\/\/.*\..*")
|
rule = re.compile(r"http(|s)[;:]\/\/.*\..*")
|
||||||
return rule.findall(message)
|
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:
|
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'):
|
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"):
|
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"):
|
if message.text.startswith(PREFIX + "author"):
|
||||||
message.chat.send(f"{BOTID} I am written by an idiot who knows enough to cause trouble ;)")
|
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)
|
print(msg)
|
||||||
if '@' in message.text:
|
if '@' in message.text:
|
||||||
msg = msg.replace('@','')
|
msg = msg.replace('@','')
|
||||||
message.chat.send(f"permitting {msg}")
|
if checkUserExists(msg):
|
||||||
permitURL.append(msg)
|
message.chat.send(f"permitting {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):
|
#User Limits
|
||||||
print("Timout user for 1 second to remove URL message, needs to be fixed")
|
if Users[uname].checkUserMessageTimout():
|
||||||
message.chat.send(f"/timeout {message.user.display_name} 1")
|
Users[uname].setUserMessageCount()
|
||||||
message.chat.send(f"{BOTID} @{message.user.display_name} Please do not post messages with URL's unless permitted")
|
if Users[uname].messageCount >= Users[uname].messageLimit: # if the message limit has been reached
|
||||||
else:
|
message.chat.send(f"{BOTID} Timing out {uname} for 15 seconds, please no spam :(")
|
||||||
if isURL(message.text):
|
message.chat.send(f"/timeout {uname} 15")
|
||||||
permitURL.remove(message.user.display_name)
|
|
||||||
else:
|
#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
|
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)
|
# print(userstats)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@ -98,4 +98,3 @@ def main():
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
#print(isURL("https://google.com"))
|
#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