Compare commits

...

8 Commits

Author SHA1 Message Date
Alex Orid
1e4ef223e1 Merge branch 'tookeymeddling' 2020-09-21 03:43:02 -04:00
dtookey
f25991641a Merge remote-tracking branch 'origin/tookeymeddling' into tookeymeddling 2020-09-20 13:52:37 -04:00
dtookey
68674de54e removed pyglet because playsound appears to work just fine
added documentation to several functions in tty.py
2020-09-20 13:52:29 -04:00
dtookey
0c3733e2c0 removed pyglet because playsound appears to work just fine
added documentation to several functions in tty.py
2020-09-20 13:51:14 -04:00
dtookey
f02bb4d3ee Merge remote-tracking branch 'origin/tookeymeddling' into tookeymeddling
# Conflicts:
#	config.py
#	requirements.txt
#	tests/test_twitch_script_class.py
#	tts.py
#	twitch_script_class.py
2020-09-20 13:36:18 -04:00
dtookey
17e1a092be updated tts.py
support both gtts and aws polly (we borrow from the streamlabs api)
moved some configuration stuff around
added one test method for creating file names, but it doesn't have any assertions, so it's useless
added enums for different configuration properties like tts engine, file naming, and poly voices
2020-09-20 13:35:53 -04:00
dtookey
3e24942d54 Let PEP8 do it's thing and reformat all the files.
Removed bots.py and slurs.py and moved them into config.py. twitch_script_class.py has been updated to handle this
added a test harness for twitch_script_class.py
contains_url and contains_slur are both validated
refactored contains_url to use a simple(ish) regex instead of an if cascade

Let PEP8 do it's thing and reformat all the files.
Removed bots.py and slurs.py and moved them into config.py. twitch_script_class.py has been updated to handle this
added a test harness for twitch_script_class.py
contains_url and contains_slur are both validated
refactored contains_url to use a simple(ish) regex instead of an if cascade
2020-09-20 11:48:15 -04:00
dtookey
453c1de0cc Let PEP8 do it's thing and reformat all the files.
Removed bots.py and slurs.py and moved them into config.py. twitch_script_class.py has been updated to handle this
added a test harness for twitch_script_class.py
contains_url and contains_slur are both validated
refactored contains_url to use a simple(ish) regex instead of an if cascade
2020-09-20 11:40:51 -04:00
14 changed files with 318 additions and 123 deletions

View File

@ -1 +0,0 @@
botList = ["Nightbot", "StreamElements", "Moobot", "praxis_bot"]

83
config.py Normal file
View File

@ -0,0 +1,83 @@
from enum import Enum
class Speaker(Enum):
GOOGLE_TEXT_TO_SPEECH = 1
STREAMLABS_API = 2
class FileNameStrategy(Enum):
TIME_BASED = 1
CONTENT_BASED = 2
class PollyVoices(Enum):
Aditi = "Aditi"
Amy = "Amy"
Astrid = "Astrid"
Bianca = "Bianca"
Brian = "Brian"
Camila = "Camila"
Carla = "Carla"
Carmen = "Carmen"
Celine = "Celine"
Chantal = "Chantal"
Conchita = "Conchita"
Cristiano = "Cristiano"
Dora = "Dora"
Emma = "Emma"
Enrique = "Enrique"
Ewa = "Ewa"
Filiz = "Filiz"
Geraint = "Geraint"
Giorgio = "Giorgio"
Gwyneth = "Gwyneth"
Hans = "Hans"
Ines = "Ines"
Ivy = "Ivy"
Jacek = "Jacek"
Jan = "Jan"
Joanna = "Joanna"
Joey = "Joey"
Justin = "Justin"
Karl = "Karl"
Kendra = "Kendra"
Kimberly = "Kimberly"
Lea = "Lea"
Liv = "Liv"
Lotte = "Lotte"
Lucia = "Lucia"
Lupe = "Lupe"
Mads = "Mads"
Maja = "Maja"
Marlene = "Marlene"
Mathieu = "Mathieu"
Matthew = "Matthew"
Maxim = "Maxim"
Mia = "Mia"
Miguel = "Miguel"
Mizuki = "Mizuki"
Naja = "Naja"
Nicole = "Nicole"
Penelope = "Penelope"
Raveena = "Raveena"
Ricardo = "Ricardo"
Ruben = "Ruben"
Russell = "Russell"
Salli = "Salli"
Seoyeon = "Seoyeon"
Takumi = "Takumi"
Tatyana = "Tatyana"
Vicki = "Vicki"
Vitoria = "Vitoria"
Zeina = "Zeina"
Zhiyu = "Zhiyu"
botList = ("Nightbot", "StreamElements", "Moobot", "praxis_bot")
slurList = ("fag", "faggot", "niga", "nigga", "nigger", "retard", "tard", "rtard", "coon")
currentSpeaker = Speaker.STREAMLABS_API
fileNameStrategy = FileNameStrategy.CONTENT_BASED
streamlabsVoice = PollyVoices.Justin

31
db.py
View File

@ -1,10 +1,9 @@
import mysql.connector
import os
import db_cred as db_credentials import db_cred as db_credentials
import pandas as pd import pandas as pd
from sqlalchemy import create_engine from sqlalchemy import create_engine
class db_module(): class db_module():
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -15,27 +14,26 @@ class db_module():
self.engine = create_engine(db_credentials.engine_url) self.engine = create_engine(db_credentials.engine_url)
print("Engine Created") print("Engine Created")
def create_table(self, tableName:str = ""): def create_table(self, tableName: str = ""):
pass pass
def does_table_exist(self, tableName:str = ""): def does_table_exist(self, tableName: str = ""):
pass pass
def delete_table(self, tableName:str = ""): def delete_table(self, tableName: str = ""):
pass pass
#This was a old function used prior to the creation of this class. I need to remake it. # This was a old function used prior to the creation of this class. I need to remake it.
def get_data_old(self, tableName:str = "", key:str = ""): def get_data_old(self, tableName: str = "", key: str = ""):
table = '_channel_commands' table = '_channel_commands'
table = tableName table = tableName
df = pd.read_sql_query('SELECT * FROM ' + table, engine)
df = pd.read_sql_query('SELECT * FROM '+ table, engine)
stmt = "trigger == '" + key + "'" stmt = "trigger == '" + key + "'"
temp = df.query(stmt) temp = df.query(stmt)
result = temp.get("response") result = temp.get("response")
#print(result) # print(result)
i = len(temp.index.values) i = len(temp.index.values)
if i == 1: if i == 1:
@ -45,20 +43,19 @@ class db_module():
output = "$$None$$" output = "$$None$$"
return output return output
def get_data(self, tableName:str = "", key:str = ""): def get_data(self, tableName: str = "", key: str = ""):
pass pass
def insert_data(self, tableName:str = "", param:str = ""): def insert_data(self, tableName: str = "", param: str = ""):
pass pass
def edit_data(self, tableName:str = "", key:str = "", param:str = ""): def edit_data(self, tableName: str = "", key: str = "", param: str = ""):
pass pass
def delete_data(self, tableName:str = "", key:str = ""): def delete_data(self, tableName: str = "", key: str = ""):
pass pass
if __name__ == "__main__": if __name__ == "__main__":
db_connection = db_module() db_connection = db_module()
db_connection.setup_engine() db_connection.setup_engine()

View File

@ -1,6 +1,7 @@
import pygetwindow as gw import pygetwindow as gw
from pynput.keyboard import Key, Controller from pynput.keyboard import Key, Controller
import time import time
keyboard = Controller() keyboard = Controller()

15
main.py
View File

@ -1,12 +1,5 @@
# Install these: # I moved all the requirements into requirements.txt.
# pip install mysql-connector-python # you can install everything with pip install -r requirements.txt while you're in the directory
# pip install pynput
# pip install twitch-python
# pip install SQLAlchemy
# pip install pandas
# pip install numpy
# pip install gTTS
# pip install playsound
import sys import sys
import time import time
@ -17,6 +10,7 @@ import utilities_script as utility
twitch_chat: twitch_script_class.Twitch_Module twitch_chat: twitch_script_class.Twitch_Module
def main(): def main():
print("Connecting to Channels...") print("Connecting to Channels...")
@ -24,9 +18,8 @@ def main():
twitch_chat = twitch_script_class.Twitch_Module() twitch_chat = twitch_script_class.Twitch_Module()
twitch_chat.join_channel("thecuriousnerd") twitch_chat.join_channel("thecuriousnerd")
#twitch_chat.send_message("activated") # twitch_chat.send_message("activated")
if __name__ == "__main__": if __name__ == "__main__":
main() main()

8
requirements.txt Normal file
View File

@ -0,0 +1,8 @@
mysql-connector-python
pynput
twitch-python
SQLAlchemy
pandas
numpy
gTTS
playsound

View File

@ -1 +0,0 @@
slurList = ["fag", "faggot", "niga", "nigga", "nigger", "retard", "tard", "rtard", "coon"]

12
tests/test_tts.py Normal file
View File

@ -0,0 +1,12 @@
import unittest
import tts
class TTSTest(unittest.TestCase):
def test_file_name(self):
tts.create_file_name("test", "mp3")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,35 @@
import unittest
import twitch_script_class
import twitch
testValidUrls = ['https://shady.ru', 'http://stolencards.zn', 'https://i.imgur.com/FL6slHd.jpg']
testInvalidUrls = ['this is just a sentence. With a period', 'gotta have some other stuff', 'bad punctuation.does not produces false positives']
class TwitchBotTest(unittest.TestCase):
def setUp(self):
self.bot = twitch_script_class.Twitch_Module()
def test_find_url(self):
bot = self.bot
for link in testInvalidUrls:
msg = twitch.chat.Message("", "", link)
t = bot.contains_url(msg)
assert not t
for link in testValidUrls:
msg = twitch.chat.Message("", "", link)
t = bot.contains_url(msg)
assert t
def test_find_slur(self):
nonSlurMessage = twitch.chat.Message("", "", "hey look, a normal sentence")
slurMessage = twitch.chat.Message("", "", "fag is a hateful word that shouldn't be used anymore")
assert not self.bot.contains_slur(nonSlurMessage)
assert self.bot.contains_slur(slurMessage)
if __name__ == '__main__':
unittest.main()

102
tts.py
View File

@ -1,31 +1,105 @@
from gtts import gTTS import datetime
import hashlib
import os import os
import datetime import requests
from gtts import gTTS
from playsound import playsound from playsound import playsound
import config
def tts(inputText:str, *args): streamLabsUrl = "https://streamlabs.com/polly/speak"
destPath = os.getcwd() + "\\tts\\" def tts(inputText: str, *args):
time = datetime.datetime.now() outpath = create_speech_file(inputText)
fileName:str = time.strftime("%m-%d-%Y_%H-%M-%S") + "_tts.mp3" playsound(outpath)
if len(args) == 1:
fileName = args[0] + "_tts.mp3"
tts = gTTS(text=inputText, lang='en') def create_speech_gtts(input_text: str):
tts.save(destPath + fileName) """
Will create a sound file for the provided text by using gTTS
:param input_text: any reasonable english text
:return: returns the path of the file for the sound
"""
path = os.path.join(get_tts_dir(), create_file_name(input_text, "mp3"))
if not os.path.exists(path):
sound_digest = gTTS(text=input_text, lang='en')
sound_digest.save(path)
return path
playsound(destPath + fileName)
#os.system(filename) def create_speech_streamlabs(text: str):
"""
Will create a sound file for the provided text by querying and downloading a file from streamlabs
:param text: any reasonable english text
:return: returns the path of the file for the sound
"""
path = os.path.join(get_tts_dir(), create_file_name(text, "ogg"))
if not os.path.exists(path):
body = {"voice": config.streamlabsVoice.value, "text": text}
resp = requests.post(streamLabsUrl, data=body).json()
sound_file_url = resp["speak_url"]
if sound_file_url is not None:
sound_bytes = requests.get(sound_file_url, stream=True)
f = open(path, "+wb")
f.write(sound_bytes.content)
f.close()
return path
speechCreationFunctions = { # this is a mapping of the Speaker enum to function pointers
config.Speaker.STREAMLABS_API: create_speech_streamlabs,
config.Speaker.GOOGLE_TEXT_TO_SPEECH: create_speech_gtts
}
def create_speech_file(text: str):
"""
Helper function that will create a sound file for the provided text. This will use the configuration in config.py
to use TTS engines and name the file
:param text: the text you would like to turn into a sound file
:return: returns the path of the sound file
"""
text_creation_function = speechCreationFunctions.get(config.currentSpeaker)
output_path = text_creation_function(text)
return output_path
def create_file_name(text: str, ext: str):
"""
:param text: the content of the message. using the CONTENT_BASED FileNameStrategy, this will (ostensibly) produce a
unique file name based on the content of the message. Two messages of equal content will produce the same name
:param ext: the desired file extension i.e. mp3, ogg, wav, etc...
:return: returns the formatted filename i.e. 01-01-20_01-01-01_tts.mp3
"""
if config.fileNameStrategy == config.FileNameStrategy.CONTENT_BASED:
unique_id = hashlib.md5(bytes(text, 'utf-8')).hexdigest()
return "%s_tts.%s" % (unique_id, ext)
elif config.fileNameStrategy == config.FileNameStrategy.TIME_BASED:
time = datetime.datetime.now()
return "%s_tts.%s" % (time.strftime("%m-%d-%Y_%H-%M-%S"), ext)
else:
return "unconfigured_tts.%s" % ext
def play_speech(fileName): def play_speech(fileName):
destPath = os.getcwd() + "\\tts\\" destPath = get_tts_dir()
playsound(destPath + fileName) playsound(destPath + fileName)
def get_tts_dir():
"""
Checks for the tts directory, and will create it if it does not exist
:return: the relative file path of the tts dir
"""
dir = os.path.join(os.getcwd(), "tts") # this is platform-agnostic
if not os.path.exists(dir):
os.mkdir(dir)
return dir
if __name__ == "__main__": if __name__ == "__main__":
print("Enter Text: ") print("Enter Text: ")
textInput = str(input()) textInput = str(input())

View File

@ -1,3 +1,5 @@
# So I'm a little conflicted here. My nit-picky self says that this should be a class you have to instantiate rather
# than static variables... I'll leave this alone for now, but you may wish to refactor this in future
username = "" username = ""
helix = "" helix = ""

View File

@ -1,22 +1,26 @@
import random import random
import re
import twitch import twitch
import twitch.chat import twitch.chat
import config as config
import db
import tts
import twitch_cred as twitch_credentials import twitch_cred as twitch_credentials
import bots as botList
import slurs as slurList
import tts
import db
class Twitch_Module(): class Twitch_Module():
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.chat: twitch.Chat self.chat: twitch.Chat
self.tts_enabled:bool = False self.tts_enabled: bool = False
self.tts_whitelist_enabled:bool = False self.tts_whitelist_enabled: bool = False
self.links_allowed:bool = True self.links_allowed: bool = True
self.whitelisted_users:list = ["thecuriousnerd", "theredpoint", "lakotor"] self.whitelisted_users: list = ["thecuriousnerd", "theredpoint", "lakotor"]
# don't freak out, this is *merely* a regex for matching urls that will hit just about everything
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))")
def join_channel(self, channel_name): def join_channel(self, channel_name):
channel_name = "#" + channel_name channel_name = "#" + channel_name
@ -31,10 +35,8 @@ class Twitch_Module():
print("Connected to Channel: ", channel_name) print("Connected to Channel: ", channel_name)
def leave_channel(self): def leave_channel(self):
print("Leaving Channel",self.chat.channel) print("Leaving Channel", self.chat.channel)
self.chat.irc.leave_channel(self.chat.channel) self.chat.irc.leave_channel(self.chat.channel)
self.chat.irc.socket.close() self.chat.irc.socket.close()
@ -44,19 +46,18 @@ class Twitch_Module():
def send_whisper(self, user, message): def send_whisper(self, user, message):
pass pass
#This reacts to messages # This reacts to messages
def twitch_chat(self, message: twitch.chat.Message) -> None: def twitch_chat(self, message: twitch.chat.Message) -> None:
print("[#"+ message.channel + "](" + message.sender + ")> " + message.text) print("[#" + message.channel + "](" + message.sender + ")> " + message.text)
if message.channel == "thecuriousnerd": if message.channel == "thecuriousnerd":
if self.isSenderBot(message) == False: if not self.isSenderBot(message):
if message.sender.lower() == "thecuriousnerd": if message.sender.lower() == "thecuriousnerd":
self.eval_commands(message) self.eval_commands(message)
self.tts_message(message) self.tts_message(message)
def eval_commands(self, message: twitch.chat.Message): def eval_commands(self, message: twitch.chat.Message):
containsURL:bool = self.contains_url(message) containsURL: bool = self.contains_url(message)
if message.text.startswith('!tts start'): if message.text.startswith('!tts start'):
print("tts activated on #" + message.channel) print("tts activated on #" + message.channel)
@ -71,7 +72,7 @@ class Twitch_Module():
if message.text.startswith('!test'): if message.text.startswith('!test'):
print("!test Detected") print("!test Detected")
message.chat.send("test acknowledged") message.chat.send("test acknowledged")
#message.chat.send(f'@{message.user().display_name}, you have {message.user().view_count} views.') # message.chat.send(f'@{message.user().display_name}, you have {message.user().view_count} views.')
if message.text.startswith('!roll'): if message.text.startswith('!roll'):
try: try:
@ -80,81 +81,72 @@ class Twitch_Module():
self.send_message("{something went wrong}") self.send_message("{something went wrong}")
print("{something went wrong}") print("{something went wrong}")
def tts_message(self, message: twitch.chat.Message): def tts_message(self, message: twitch.chat.Message):
if self.contains_slur(message) == False: if not self.contains_slur(message):
if self.tts_enabled == True: if self.tts_enabled:
if message.text.startswith('!') == False: if not message.text.startswith('!'):
if message.sender.lower() == message.channel: text_to_say: str = "%s says, %s" % (message.sender, message.text)
tts.tts(message.sender + " says, " + message.text) channel_text = "%s user msg" % message.channel
else:
#tts.tts(message.sender + " says, " + message.text) if message.sender.lower() == message.channel:
tts.tts(message.sender + " says, " + message.text, message.channel + " user msg") tts.tts(text_to_say)
else:
# tts.tts(message.sender + " says, " + message.text)
tts.tts(text_to_say, channel_text)
def contains_url(self, message: twitch.chat.Message): def contains_url(self, message: twitch.chat.Message):
containsURL:bool = False containsURL = re.search(self._urlMatcher, message.text.lower()) is not None
if message.text.lower().find("http") != -1: if containsURL:
containsURL = True print("<{ link detected! }> " + " [#" + message.channel + "](" + message.sender + ") sent a link in chat")
if message.text.lower().find("https") != -1:
containsURL = True
if message.text.lower().find(".com") != -1:
containsURL = True
if message.text.lower().find(".net") != -1:
containsURL = True
if message.text.lower().find(".org") != -1:
containsURL = True
if message.text.lower().find(".tv") != -1:
containsURL = True
if message.text.lower().find(".io") != -1:
containsURL = True
if containsURL == True:
print("<{ link detected! }> " + " [#"+ message.channel + "](" + message.sender + ") sent a link in chat")
return containsURL return containsURL
#Checks if Sender is bot. # Checks if Sender is bot.
def isSenderBot(self, message: twitch.chat.Message): def isSenderBot(self, message: twitch.chat.Message):
isBot = False isBot = False
for bot in botList.botList: for bot in config.botList:
if message.sender.lower() == bot.lower(): if message.sender.lower() == bot.lower():
isBot = True isBot = True
print("<{ bot detected! }> " + " [#"+ message.channel + "](" + message.sender + ") is a bot") print("<{ bot detected! }> " + " [#" + message.channel + "](" + message.sender + ") is a bot")
return isBot return isBot
#Checks for basic slurs. # Checks for basic slurs.
def contains_slur(self, message: twitch.chat.Message): def contains_slur(self, message: twitch.chat.Message):
containsSlur:bool = False containsSlur: bool = False
parsedMessage = message.text.split(" ") parsedMessage = message.text.split(" ")
for word in parsedMessage: for word in parsedMessage:
for slur in slurList.slurList: for slur in config.slurList:
if word.lower() == slur: if word.lower() == slur:
containsSlur = True containsSlur = True
break # we want to immediately escape if we found a slur
if containsSlur:
break
if containsSlur == True: if containsSlur:
print("<{ slur detected! }> " + " [#"+ message.channel + "](" + message.sender + ") used a slur in chat") print("<{ slur detected! }> " + " [#" + message.channel + "](" + message.sender + ") used a slur in chat")
return containsSlur return containsSlur
#Rolls Dice. # Rolls Dice.
def dice_roll(self, message: twitch.chat.Message): def dice_roll(self, message: twitch.chat.Message):
diceRoll:str = "" diceRoll: str = ""
self.send_message("Rolling Dice...") self.send_message("Rolling Dice...")
print("Rolling Dice...") print("Rolling Dice...")
temp_preParsedMessage = message.text.split("+") temp_preParsedMessage = message.text.split("+")
tempParsedMessage = temp_preParsedMessage[0].split(" ") tempParsedMessage = temp_preParsedMessage[0].split(" ")
temp_dice_stmt:str = tempParsedMessage[1] temp_dice_stmt: str = tempParsedMessage[1]
parsedMessage = temp_dice_stmt.lower().split("d") parsedMessage = temp_dice_stmt.lower().split("d")
loopBool:bool = False loopBool: bool = False
if parsedMessage[0] != "": if parsedMessage[0] != "":
loopBool = True loopBool = True
if loopBool == True: if loopBool == True:
if int(parsedMessage[0]) == 1: if int(parsedMessage[0]) == 1:
loopBool = False loopBool = False
#If roll is in xdx+x format # If roll is in xdx+x format
if loopBool == True: if loopBool == True:
rolls:list = [] rolls: list = []
for x in range(int(parsedMessage[0])): for x in range(int(parsedMessage[0])):
rolls.append(random.randint(1, int(parsedMessage[1]))) rolls.append(random.randint(1, int(parsedMessage[1])))
@ -162,18 +154,20 @@ class Twitch_Module():
for roll in rolls: for roll in rolls:
rollTotal = rollTotal + roll rollTotal = rollTotal + roll
diceRoll = diceRoll + str(roll) + ", " diceRoll = diceRoll + str(roll) + ", "
diceRoll = diceRoll[:-2] #This removes the last two characters in the string diceRoll = diceRoll[:-2] # This removes the last two characters in the string
if len(temp_preParsedMessage) == 2: if len(temp_preParsedMessage) == 2:
diceRoll = diceRoll + " + " + temp_preParsedMessage[1] + " = " + str(rollTotal + int(temp_preParsedMessage[1])) diceRoll = diceRoll + " + " + temp_preParsedMessage[1] + " = " + str(
rollTotal + int(temp_preParsedMessage[1]))
else: else:
diceRoll = diceRoll + " = " + str(rollTotal) diceRoll = diceRoll + " = " + str(rollTotal)
#If roll is in dx+x format # If roll is in dx+x format
if loopBool == False: if loopBool == False:
roll:int = random.randint(1, int(parsedMessage[1])) roll: int = random.randint(1, int(parsedMessage[1]))
if len(temp_preParsedMessage) == 2: if len(temp_preParsedMessage) == 2:
diceRoll = str(roll) + " + " + temp_preParsedMessage[1] + " = " + str(roll + int(temp_preParsedMessage[1])) diceRoll = str(roll) + " + " + temp_preParsedMessage[1] + " = " + str(
roll + int(temp_preParsedMessage[1]))
else: else:
diceRoll = str(roll) diceRoll = str(roll)
@ -182,8 +176,8 @@ class Twitch_Module():
self.send_message(diceRoll) self.send_message(diceRoll)
#This is a old function used prior to the creation of the Twitch_Module class above. # This is a old function used prior to the creation of the Twitch_Module class above.
#I need to make a new one for the class. # I need to make a new one for the class.
def main_chat_commands_check(channel, sender, text): def main_chat_commands_check(channel, sender, text):
response = db.basic_command_trigger(channel, sender, text) response = db.basic_command_trigger(channel, sender, text)
if response == "$$None$$": if response == "$$None$$":
@ -193,7 +187,6 @@ def main_chat_commands_check(channel, sender, text):
print(response) print(response)
if __name__ == "__main__": if __name__ == "__main__":
testChat = Twitch_Module() testChat = Twitch_Module()
testChat.join_channel("thecuriousnerd") testChat.join_channel("thecuriousnerd")

View File

@ -1,4 +1,3 @@
import os import os
clearScreen = lambda : os.system('cls' if os.name == 'nt' else 'clear') clearScreen = lambda: os.system('cls' if os.name == 'nt' else 'clear')