diff --git a/channel_rewards/implemented/ChannelReward_Hydration.py b/channel_rewards/implemented/ChannelReward_Hydration.py index c7d20ab..747e0b7 100644 --- a/channel_rewards/implemented/ChannelReward_Hydration.py +++ b/channel_rewards/implemented/ChannelReward_Hydration.py @@ -8,6 +8,8 @@ import requests import threading +import random + class ChannelReward_Hydration(AbstractChannelRewards, metaclass=ABCMeta): """ this is the hydration reward. @@ -30,7 +32,8 @@ class ChannelReward_Hydration(AbstractChannelRewards, metaclass=ABCMeta): self.threads.append(thread_) thread_.start() if self.is_ChannelReward_enabled: - thread_ = threading.Thread(target=self.send_TTS, args=(user, rewardPrompt)) + prompt_ = self.get_Phrase(rewardPrompt) + thread_ = threading.Thread(target=self.send_TTS, args=(user, prompt_)) thread_.daemon = True self.threads.append(thread_) thread_.start() @@ -72,5 +75,13 @@ class ChannelReward_Hydration(AbstractChannelRewards, metaclass=ABCMeta): # todo handle failed requests pass + def get_Phrase(self, defaultRewardPrompt, + phrases = ["I demand you drink at once!", "I reccomend you drink some water uwu!", "Get a bucket and a mop cuz you need hydration!", "Hi, I think you look dehydrated, so go get some water!"]): + + phrases.append(defaultRewardPrompt) + totalPhrases = len(phrases) - 1 + targetPhrase = phrases[random.randint(0,totalPhrases)] + return targetPhrase + def get_help(self): return self.help \ No newline at end of file diff --git a/channel_rewards/implemented/ChannelReward_RubiksCube.py b/channel_rewards/implemented/ChannelReward_RubiksCube.py index 17ab4f9..be0950d 100644 --- a/channel_rewards/implemented/ChannelReward_RubiksCube.py +++ b/channel_rewards/implemented/ChannelReward_RubiksCube.py @@ -8,6 +8,8 @@ import requests import threading +import random + class ChannelReward_RubiksCube(AbstractChannelRewards, metaclass=ABCMeta): """ this is the hydration reward. @@ -31,7 +33,8 @@ class ChannelReward_RubiksCube(AbstractChannelRewards, metaclass=ABCMeta): self.threads.append(thread_) thread_.start() if self.is_ChannelReward_enabled: - thread_ = threading.Thread(target=self.send_TTS, args=(user, rewardPrompt)) + prompt_ = self.get_Phrase(rewardPrompt) + thread_ = threading.Thread(target=self.send_TTS, args=(user, prompt_)) thread_.daemon = True self.threads.append(thread_) thread_.start() @@ -73,5 +76,13 @@ class ChannelReward_RubiksCube(AbstractChannelRewards, metaclass=ABCMeta): # todo handle failed requests pass + def get_Phrase(self, defaultRewardPrompt, + phrases = [""]): + + phrases.append(defaultRewardPrompt) + totalPhrases = len(phrases) - 1 + targetPhrase = phrases[random.randint(0,totalPhrases)] + return targetPhrase + def get_help(self): return self.help \ No newline at end of file diff --git a/channel_rewards/implemented/ChannelReward_twitchBits.py b/channel_rewards/implemented/ChannelReward_twitchBits.py index ca85a4b..fafbeb0 100644 --- a/channel_rewards/implemented/ChannelReward_twitchBits.py +++ b/channel_rewards/implemented/ChannelReward_twitchBits.py @@ -8,6 +8,8 @@ import requests import threading +import random + class ChannelReward_TwitchBits(AbstractChannelRewards, metaclass=ABCMeta): """ this is the hydration reward. @@ -16,7 +18,7 @@ class ChannelReward_TwitchBits(AbstractChannelRewards, metaclass=ABCMeta): def __init__(self): super().__init__(ChannelReward_TwitchBits.ChannelRewardName, n_args=1, ChannelRewardType=AbstractChannelRewards.ChannelRewardsType.twitch_bits) - self.help = ["This is a hydration channel point reward."] + self.help = ["This is a TwitchBits reward."] self.isChannelRewardEnabled = True self.threads = [] @@ -24,13 +26,13 @@ class ChannelReward_TwitchBits(AbstractChannelRewards, metaclass=ABCMeta): #print("sending:",user, 16, "!lights hydration") try: + #if self.is_ChannelReward_enabled: + #thread_ = threading.Thread(target=self.dothething, args=(user, 16, "!lights hydration", "")) + #thread_.daemon = True + #self.threads.append(thread_) + #thread_.start() if self.is_ChannelReward_enabled: - thread_ = threading.Thread(target=self.dothething, args=(user, 16, "!lights hydration", "")) - thread_.daemon = True - self.threads.append(thread_) - thread_.start() - if self.is_ChannelReward_enabled: - thread_ = threading.Thread(target=self.send_TTS, args=(user, rewardPrompt)) + thread_ = threading.Thread(target=self.send_TTS, args=("", user + " showered the stream with " + userInput + " bits and says: " + rewardPrompt)) thread_.daemon = True self.threads.append(thread_) thread_.start() @@ -72,5 +74,26 @@ class ChannelReward_TwitchBits(AbstractChannelRewards, metaclass=ABCMeta): # todo handle failed requests pass + def get_bitsAmount(self, dataToParse:dict): + try: + getData = str(dataToParse['data']['message']['data']['bits_used']) + except: + getData = "Error" + return getData + + def get_bitsMessage(self, dataToParse:dict): + try: + getData = str(dataToParse['data']['message']['data']['chat_message']) + except: + getData = "Error" + return getData + + def get_Phrase(self, defaultRewardPrompt, + phrases = [""]): + phrases.append(defaultRewardPrompt) + totalPhrases = len(phrases) - 1 + targetPhrase = phrases[random.randint(0,totalPhrases)] + return targetPhrase + def get_help(self): return self.help \ No newline at end of file diff --git a/channel_rewards/implemented/ChannelReward_twitchSubs.py b/channel_rewards/implemented/ChannelReward_twitchSubs.py index a1dcbb9..67617b8 100644 --- a/channel_rewards/implemented/ChannelReward_twitchSubs.py +++ b/channel_rewards/implemented/ChannelReward_twitchSubs.py @@ -8,6 +8,8 @@ import requests import threading +import random + class ChannelReward_TwitchSubs(AbstractChannelRewards, metaclass=ABCMeta): """ this is the TwitchSubs reward. @@ -16,7 +18,7 @@ class ChannelReward_TwitchSubs(AbstractChannelRewards, metaclass=ABCMeta): def __init__(self): super().__init__(ChannelReward_TwitchSubs.ChannelRewardName, n_args=1, ChannelRewardType=AbstractChannelRewards.ChannelRewardsType.twitch_subs) - self.help = ["This is a hydration channel point reward."] + self.help = ["This is a TwitchSub reward."] self.isChannelRewardEnabled = True self.threads = [] @@ -25,12 +27,13 @@ class ChannelReward_TwitchSubs(AbstractChannelRewards, metaclass=ABCMeta): #print("sending:",user, 16, "!lights hydration") try: if self.is_ChannelReward_enabled: - thread_ = threading.Thread(target=self.dothething, args=(user, 16, "!lights hydration", "")) + thread_ = threading.Thread(target=self.dothething, args=(user, 16, "!lights ravemode", "")) thread_.daemon = True self.threads.append(thread_) thread_.start() if self.is_ChannelReward_enabled: - thread_ = threading.Thread(target=self.send_TTS, args=(user, rewardPrompt)) + prompt_ = self.get_Phrase("a funny") + thread_ = threading.Thread(target=self.send_TTS, args=("", user + " is " + prompt_ + " nerd! Thank you for your support!")) thread_.daemon = True self.threads.append(thread_) thread_.start() @@ -72,5 +75,13 @@ class ChannelReward_TwitchSubs(AbstractChannelRewards, metaclass=ABCMeta): # todo handle failed requests pass + def get_Phrase(self, defaultRewardPrompt, + phrases = ["an amazing", "a special", "an inquisitive", "a thoughtful", "a curious", "a hyper focusing", "a trend setting", "an artistic"]): + phrases.append(defaultRewardPrompt) + totalPhrases = len(phrases) - 1 + targetPhrase = phrases[random.randint(0,totalPhrases)] + return targetPhrase + + def get_help(self): return self.help \ No newline at end of file diff --git a/standalone_twitch_pubsub.py b/standalone_twitch_pubsub.py index e50e2d1..37ebfad 100644 --- a/standalone_twitch_pubsub.py +++ b/standalone_twitch_pubsub.py @@ -32,13 +32,15 @@ class Twitch_Pubsub(): self.credential : credentials.Twitch_Credential() self.twitch : Twitch() self.pubsub: PubSub() - self.target_scope = [AuthScope.WHISPERS_READ, AuthScope.CHANNEL_READ_REDEMPTIONS] + self.target_scope = [AuthScope.WHISPERS_READ, AuthScope.CHANNEL_READ_REDEMPTIONS, AuthScope.BITS_READ, AuthScope.CHANNEL_READ_SUBSCRIPTIONS] - self.uuid_1 = None - self.uuid_2 = None + self.uuid_whisper = None + self.uuid_channelPoints = None + self.uuid_bits = None + self.uuid_subs = None self.cooldownModule: Cooldown_Module = Cooldown_Module() - self.cooldownModule.setupCooldown("twitchChat", 20, 32) + self.cooldownModule.setupCooldown("twitchpubsub", 20, 32) def setup(self): self.twitch.authenticate_app(self.target_scope) @@ -69,13 +71,17 @@ class Twitch_Pubsub(): user_id = self.twitch.get_users(logins=[config.autoJoin_TwitchChannel])['data'][0]['id'] if user_id is not None: print("found user_id") print(user_id) - self.uuid_1 = self.pubsub.listen_whispers(user_id, self.callback_whisper) - self.uuid_2 = self.pubsub.listen_channel_points(user_id, self.callback_channelPoints) + self.uuid_whisper = self.pubsub.listen_whispers(user_id, self.callback_whisper) + self.uuid_channelPoints = self.pubsub.listen_channel_points(user_id, self.callback_channelPoints) + self.uuid_bits = self.pubsub.listen_bits(user_id, self.callback_bits) + self.uuid_subs = self.pubsub.listen_channel_subscriptions(user_id, self.callback_subs) #input('press ENTER to close...') def stop(self): - self.pubsub.unlisten(self.uuid_1) - self.pubsub.unlisten(self.uuid_2) + self.pubsub.unlisten(self.uuid_whisper) + self.pubsub.unlisten(self.uuid_channelPoints) + self.pubsub.unlisten(self.uuid_bits) + self.pubsub.unlisten(self.uuid_subs) self.pubsub.stop() def callback_whisper(self, uuid: UUID, data: dict) -> None: @@ -109,22 +115,53 @@ class Twitch_Pubsub(): userinput, data) + def callback_bits(self, uuid: UUID, data: dict) -> None: print("Bits Redemption") print('got callback for UUID ' + str(uuid)) pprint(data) + praxis_logger_obj.log(data['data']['user_name']) + + try: + userinput = data['data']['chat_message'] + praxis_logger_obj.log(data['data']['chat_message']) + except: + userinput = "" + praxis_logger_obj.log(data) + + self.callback_EXEC( + data['data']['user_name'], + "TwitchBits", + AbstractChannelRewards.ChannelRewardsType.twitch_bits, + userinput, + data['data']['bits_used'], + data) + def callback_subs(self, uuid: UUID, data: dict) -> None: print("Subs Redemption") print('got callback for UUID ' + str(uuid)) pprint(data) + try: + userinput = data['data']['message']['sub_message']['message'] + except: + userinput = "" + + self.callback_EXEC( + data['data']['message']['display_name'], + "TwitchBits", + AbstractChannelRewards.ChannelRewardsType.twitch_subs, + userinput, + "", + data) + def callback_EXEC(self, sender, rewardName:str, rewardType, rewardPrompt, userInput, raw_data): try: is_actionable = self.is_reward(rewardName, rewardType) if is_actionable: praxis_logger_obj.log("Trying to do the thing") - if self.cooldownModule.isCooldownActive("twitchChat") == False: + if self.cooldownModule.isCooldownActive("twitchpubsub") == False: self.exec_reward(sender, rewardName, rewardType, rewardPrompt, userInput, raw_data) except: print("something went wrong with a reward") diff --git a/twitch_generate_credentials.py b/twitch_generate_credentials.py index cfabaee..0173910 100644 --- a/twitch_generate_credentials.py +++ b/twitch_generate_credentials.py @@ -16,7 +16,7 @@ class Twitch_Credential_Maker(): super().__init__() self.credential : credentials.Twitch_Credential() self.twitch : Twitch() - self.target_scope = [AuthScope.WHISPERS_READ, AuthScope.CHANNEL_READ_REDEMPTIONS] + self.target_scope = [AuthScope.WHISPERS_READ, AuthScope.CHANNEL_READ_REDEMPTIONS, AuthScope.BITS_READ, AuthScope.CHANNEL_READ_SUBSCRIPTIONS] def get_tokens(self): self.twitch.authenticate_app(self.target_scope)