From 41afb81df073b9fc4d58f12fc239955c6151a521 Mon Sep 17 00:00:00 2001 From: Alex Orid Date: Tue, 27 Apr 2021 16:28:21 -0400 Subject: [PATCH] Lights API Commands --- Dockerfile_standalone_channelRewards | 2 +- Dockerfile_standalone_lights | 11 +++ .../implemented/ChannelReward_Hydration.py | 21 ++++ docker-compose.yaml | 6 ++ makedockerimages.bat | 1 + standalone_channelrewards.py | 19 ++-- standalone_lights.py | 95 ++++++++++--------- 7 files changed, 103 insertions(+), 52 deletions(-) create mode 100644 Dockerfile_standalone_lights diff --git a/Dockerfile_standalone_channelRewards b/Dockerfile_standalone_channelRewards index b5d541e..67dac01 100644 --- a/Dockerfile_standalone_channelRewards +++ b/Dockerfile_standalone_channelRewards @@ -1,4 +1,4 @@ -FROM python:3.10.0a7-alpine3.13 +FROM python:3.7.10-alpine3.12 WORKDIR /Praxis diff --git a/Dockerfile_standalone_lights b/Dockerfile_standalone_lights new file mode 100644 index 0000000..aba1f7e --- /dev/null +++ b/Dockerfile_standalone_lights @@ -0,0 +1,11 @@ +FROM python:3.7.10-alpine3.12 + +WORKDIR /Praxis + +COPY requirements_sa_command.txt requirements_sa_command.txt +RUN apk add --update gcc libc-dev linux-headers && rm -rf /var/cache/apk/* +RUN pip3 install -r requirements_sa_command.txt + +COPY . . + +CMD [ "python3", "standalone_lights.py"] \ No newline at end of file diff --git a/channel_rewards/implemented/ChannelReward_Hydration.py b/channel_rewards/implemented/ChannelReward_Hydration.py index e3d94cb..d777da2 100644 --- a/channel_rewards/implemented/ChannelReward_Hydration.py +++ b/channel_rewards/implemented/ChannelReward_Hydration.py @@ -2,6 +2,10 @@ from abc import ABCMeta from channel_rewards.channelRewards_base import AbstractChannelRewards +from json import loads +from urllib.parse import urlencode +import requests + class ChannelReward_Hydration_v2(AbstractChannelRewards, metaclass=ABCMeta): """ this is the hydration reward. @@ -14,8 +18,25 @@ class ChannelReward_Hydration_v2(AbstractChannelRewards, metaclass=ABCMeta): self.isChannelRewardEnabled = True def do_ChannelReward(self, source = AbstractChannelRewards.ChannelRewardsSource.default, user = "User", rewardName = "", rewardPrompt = "", userInput = "", bonusData = None): + self.dothething(user, "16", "lights hydration") return None + def dothething(self, username, light_group, command): + # todo need to url-escape command and rest + params = urlencode({'user_name': username, 'light_group': light_group, 'command': command}) + url = "http://standalone_lights:42069/api/v1/exec_lights?%s" % params + resp = requests.get(url) + if resp.status_code == 200: + print("Got the following message: %s" % resp.text) + data = loads(resp.text) + msg = data['message'] + if msg is not None: + pass + # todo send to logger and other relevent services + else: + # todo handle failed requests + pass + def get_help(self): return self.help \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index fbf0e1b..cfe798c 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -12,6 +12,12 @@ services: - 6969:6969 environment: - ISDOCKER=cat + standalone_lights: + image: standalone_lights + ports: + - 42069:42069 + environment: + - ISDOCKER=cat standalone_twitchscript: image: standalone_twitchscript environment: diff --git a/makedockerimages.bat b/makedockerimages.bat index f008b0e..fc288bc 100644 --- a/makedockerimages.bat +++ b/makedockerimages.bat @@ -1,5 +1,6 @@ docker build --file Dockerfile_standalone_command --tag standalone_command . docker build --file Dockerfile_standalone_channelRewards --tag standalone_channelrewards . +docker build --file Dockerfile_standalone_lights --tag standalone_lights . docker build --file Dockerfile_standalone_DiscordScript --tag standalone_discordscript . docker build --file Dockerfile_standalone_TwitchScript --tag standalone_twitchscript . docker build --file Dockerfile_standalone_Twitch_Pubsub --tag standalone_twitch_pubsub . \ No newline at end of file diff --git a/standalone_channelrewards.py b/standalone_channelrewards.py index d7f5632..2fa861a 100644 --- a/standalone_channelrewards.py +++ b/standalone_channelrewards.py @@ -22,9 +22,10 @@ def is_reward(reward_name, reward_type) -> bool: #global loadedRewards tempType = reward_type.replace('ChannelRewardsType.', '') realTempType = AbstractChannelRewards.ChannelRewardsType.__dict__[tempType] + #print(loadedRewards[realTempType]) for reward in loadedRewards[realTempType]: - print("found: ",reward,"type: ",type(reward)) + print("found: ", reward, "type: ", type(reward)) if reward_name == reward: print("Equal") return True @@ -38,13 +39,15 @@ def is_reward(reward_name, reward_type) -> bool: def handle_reward(source, username, reward_name, reward_type, rewardPrompt, userInput, bonusData): #reward:AbstractChannelRewards = loadedRewards[reward_name] - tempType = reward_type.replace('ChannelRewardsType.', '') - realTempType = AbstractChannelRewards.ChannelRewardsType.__dict__[tempType] - reward:AbstractChannelRewards = loadedRewards[realTempType][reward_name] - if reward is not None: - reward_response = reward.do_ChannelReward(source, username, reward_name, rewardPrompt, userInput, bonusData) - return flask.make_response("{\"message\":\"%s\"}" % reward_response, 200, {"Content-Type": "application/json"}) - + try: + tempType = reward_type.replace('ChannelRewardsType.', '') + realTempType = AbstractChannelRewards.ChannelRewardsType.__dict__[tempType] + reward:AbstractChannelRewards = loadedRewards[realTempType][reward_name] + if reward is not None: + reward_response = reward.do_ChannelReward(source, username, reward_name, rewardPrompt, userInput, bonusData) + return flask.make_response("{\"message\":\"%s\"}" % reward_response, 200, {"Content-Type": "application/json"}) + except: + return "None" #print("Doing a reward") diff --git a/standalone_lights.py b/standalone_lights.py index 09bb245..875a0d8 100644 --- a/standalone_lights.py +++ b/standalone_lights.py @@ -73,6 +73,7 @@ class Lights_Module(): # This will set the group Downstairs to the Stream scene #self.bridge_.run_scene("Downstairs", "Stream") + self.bridge_.run_scene("Downstairs", "Stream") print("-[Lights_Module] Setup Complete") def setLight(): @@ -87,6 +88,11 @@ class Lights_Module(): def setGroups(): pass + def hydration(self): + self.bridge_.run_scene("Downstairs", "hydration") + #sleep(20) + #self.bridge_.run_scene("Downstairs", "Stream") + def raveMode(self): for rave in range(30): rgb_r = random.random() @@ -202,61 +208,63 @@ def init(): RGB_Lights.main() def do_light_command(user="", lightGroup="all", command = "", rest = ""): - returnString = "" + returnString = "None" + print("about to do something ......") - tempBool = True - if tempBool == True: - #bot.return_message("\nRGB Command Detected!") - tempFix = command + " " + rest + #bot.return_message("\nRGB Command Detected!") + tempFix = command + " " + rest - tempParsedMessage = tempFix.split(" ") - sceneCommand = False - if (len(tempParsedMessage)) > 2: - #bot.return_message("RGB Command!") - rgb_r = float(tempParsedMessage[1]) - rgb_g = float(tempParsedMessage[2]) - rgb_b = float(tempParsedMessage[3]) - xy_result = RGB_Lights.rgb_to_xy(rgb_r, rgb_g, rgb_b) + tempParsedMessage = tempFix.split(" ") + sceneCommand = False + if (len(tempParsedMessage)) > 2: + print("RGB Command!") + rgb_r = float(tempParsedMessage[1]) + rgb_g = float(tempParsedMessage[2]) + rgb_b = float(tempParsedMessage[3]) + xy_result = RGB_Lights.rgb_to_xy(rgb_r, rgb_g, rgb_b) + print("got XY") + RGB_Lights.bridge_.set_group(16, "xy", xy_result) + #bot.return_message("sent color to [Lights_Module]") + else: + if "stream" in tempParsedMessage: + sceneCommand = True + RGB_Lights.bridge_.run_scene("Downstairs", "Stream") + elif "normal" in tempParsedMessage: + sceneCommand = True + RGB_Lights.bridge_.run_scene("Downstairs", "Bright") + elif "haxor" in tempParsedMessage: + sceneCommand = True + RGB_Lights.bridge_.run_scene("Downstairs", "hacker vibes") + elif "off" in tempParsedMessage: + sceneCommand = True + RGB_Lights.bridge_.set_group("Downstairs", "on", False) + elif "on" in tempParsedMessage: + sceneCommand = True + RGB_Lights.bridge_.set_group("Downstairs", "on", True) + elif "hydration" in tempParsedMessage: + sceneCommand = True + RGB_Lights.hydration() + elif "ravemode" in tempParsedMessage: + sceneCommand = True + RGB_Lights.raveMode() + else: + #bot.return_message("Color Command!") + xy_result = RGB_Lights.color_string_parser(tempParsedMessage) #bot.return_message("got XY") RGB_Lights.bridge_.set_group(16, "xy", xy_result) #bot.return_message("sent color to [Lights_Module]") - else: - if "stream" in tempParsedMessage: - sceneCommand = True - RGB_Lights.bridge_.run_scene("Downstairs", "Stream") - elif "normal" in tempParsedMessage: - sceneCommand = True - RGB_Lights.bridge_.run_scene("Downstairs", "Bright") - elif "haxor" in tempParsedMessage: - sceneCommand = True - RGB_Lights.bridge_.run_scene("Downstairs", "hacker vibes") - elif "off" in tempParsedMessage: - sceneCommand = True - RGB_Lights.bridge_.set_group("Downstairs", "on", False) - elif "on" in tempParsedMessage: - sceneCommand = True - RGB_Lights.bridge_.set_group("Downstairs", "on", True) - elif "ravemode" in tempParsedMessage: - sceneCommand = True - RGB_Lights.raveMode() - else: - #bot.return_message("Color Command!") - xy_result = RGB_Lights.color_string_parser(tempParsedMessage) - #bot.return_message("got XY") - RGB_Lights.bridge_.set_group(16, "xy", xy_result) - #bot.return_message("sent color to [Lights_Module]") - #if sceneCommand == True: - #bot.return_message("Scene Command!") + if sceneCommand == True: + print("Scene Command!") - returnString = user + " changed the light's color!" + returnString = user + " changed the light's color!" return returnString @api.route('/api/v1/exec_lights', methods=['GET']) -def exec_command(): +def exec_lights(): if 'user_name' not in request.args: user_name="User" else: @@ -266,9 +274,10 @@ def exec_command(): if 'command' not in request.args: return flask.make_response('{\"text\":"Argument \'scene_name\' not in request"}', 400) + print("about to do something ......") return do_light_command(user_name, request.args['light_group'], request.args['command'], request.args['rest']) if __name__ == "__main__": init() - + api.run(host='0.0.0.0', port=42069) #testModule.raveMode() \ No newline at end of file