diff --git a/event_logs/event_log_Module.py b/event_logs/event_log_Module.py index 3e683fd..a661ff4 100644 --- a/event_logs/event_log_Module.py +++ b/event_logs/event_log_Module.py @@ -8,11 +8,12 @@ from os import listdir from os.path import isfile, join class event_log(): - def __init__(self, eventName, eventTime, eventType, eventData): + def __init__(self, eventName, eventTime, eventType, eventSender, eventData): super().__init__() self.eventName = eventName self.eventTime = eventTime self.eventType = eventType + self.eventSender = eventSender self.eventData = eventData @@ -47,6 +48,7 @@ class Event_Log_Module(): newDic['eventName'] = event.eventName newDic['eventTime'] = str(event.eventTime) newDic['eventType'] = str(event.eventType) + newDic['eventSender'] = str(event.eventSender) newDic['eventData'] = str(event.eventData) newList.append(newDic) with open(real_file_path, 'w') as logFile: @@ -65,9 +67,10 @@ class Event_Log_Module(): eventName = d['eventName'] eventTime = d['eventTime'] eventType = d['eventType'] + eventSender = d['eventSender'] eventData = d['eventData'] - foundLog = event_log(eventName, eventTime, eventType, eventData) + foundLog = event_log(eventName, eventTime, eventType, eventSender, eventData) newList.append(foundLog) return newList @@ -98,8 +101,8 @@ class Event_Log_Module(): os.mkdir(path, 0x777) return path - def make_event(self, eventName, eventTime, eventType, eventData): - newLog = event_log(eventName, eventTime, eventType, eventData) + def make_event(self, eventName, eventTime, eventType, eventSender, eventData): + newLog = event_log(eventName, eventTime, eventType, eventSender, eventData) self.Event_Log_List.append(newLog) self.makeFile(self.Event_Log_FileName) self.makeFile(self.Event_Log_FileName_Bonus) diff --git a/standalone_command.py b/standalone_command.py index 934f1f2..f2d866c 100644 --- a/standalone_command.py +++ b/standalone_command.py @@ -1,9 +1,14 @@ import flask -from flask import request +from flask import Flask, request, after_this_request import commands.loader as command_loader from commands.command_base import AbstractCommand +from json import loads +from urllib.parse import urlencode + +import requests + import os import praxis_logging praxis_logger_obj = praxis_logging.praxis_logger() @@ -53,6 +58,20 @@ def handle_command(source, username, command, rest, bonusData): #print("Doing a command") +def handle_get_list(): + tempDict = {} + returnedDict = {} + + for cmd in loadedCommands: + tempCmd:AbstractCommand = loadedCommands[cmd] + tempDict['command'] = tempCmd.command + tempDict['isCommandEnabled'] = str(tempCmd.isCommandEnabled).lower() + returnedDict[tempCmd.command] = tempDict + tempDict = {} + + + + return flask.make_response({'message': returnedDict}, 200, {"Content-Type": "application/json"}) @api.route('/api/v1/command', methods=['GET']) def command_check(): @@ -80,6 +99,14 @@ def exec_command(): return handle_command(request.args['command_source'], username, request.args['command_name'], request.args['rest'], request.args['bonus_data']) +@api.route('/api/v1/get_list/all', methods=['GET']) +def get_list(): + @after_this_request + def add_header(response): + response.headers.add('Access-Control-Allow-Origin', '*') + return response + + return handle_get_list() if __name__ == '__main__': init() diff --git a/standalone_eventLog.py b/standalone_eventLog.py index 788896a..df28780 100644 --- a/standalone_eventLog.py +++ b/standalone_eventLog.py @@ -39,8 +39,8 @@ def init(): print("starting up... ",) logging_module.main() -def add_event(eventName, eventTime, eventType, eventData): - logging_module.make_event(eventName, eventTime, eventType, eventData) +def add_event(eventName, eventTime, eventType, eventSender, eventData): + logging_module.make_event(eventName, eventTime, eventType, eventSender, eventData) return flask.make_response("{\"message\":\"%s\"}" % None, 200, {"Content-Type": "application/json"}) def get_events(eventCount=100): @@ -77,10 +77,12 @@ def add_event_log(): return flask.make_response('{\"text\":"Argument \'event_time\' not in request"}', 400) if 'event_type' not in request.args: return flask.make_response('{\"text\":"Argument \'event_type\' not in request"}', 400) + if 'eventSender' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventSender\' not in request"}', 400) if 'event_data' not in request.args: return flask.make_response('{\"text\":"Argument \'event_data\' not in request"}', 400) - return add_event(request.args['event_name'], request.args['event_time'], request.args['event_type'], request.args['event_data'],) + return add_event(request.args['event_name'], request.args['event_time'], request.args['event_type'], request.args['eventSender'], request.args['event_data'],) @api.route('/api/v1/event_log/get_events') def get_event_log(): diff --git a/standalone_twitch_pubsub.py b/standalone_twitch_pubsub.py index fdd5cf0..60a3747 100644 --- a/standalone_twitch_pubsub.py +++ b/standalone_twitch_pubsub.py @@ -200,11 +200,12 @@ class Twitch_Pubsub(): pass #FINISH THIS EVENT LOG - def send_EventLog(self, eventName, eventTime, eventType, eventData): + def send_EventLog(self, eventName, eventTime, eventType, eventSender, eventData): params = urlencode( {'event_name': eventName, 'event_time': eventTime, 'event_type': eventType, + 'eventSender': eventSender, 'event_data': eventData}) url = "http://standalone_eventlog:42008/api/v1/event_log/add_event?%s" % params resp = requests.get(url) diff --git a/standalone_twitch_script.py b/standalone_twitch_script.py index 3ba52d8..7d13a41 100644 --- a/standalone_twitch_script.py +++ b/standalone_twitch_script.py @@ -77,7 +77,7 @@ class Twitch_Module(): try: is_actionable = self.is_command(command) if is_actionable: - self.send_EventLog(command, str(datetime.now()), "command.twitch", rest) + self.send_EventLog(command, str(datetime.now()), "command.twitch", message.sender, rest) praxis_logger_obj.log("Sent a thing") except: praxis_logger_obj.log("something went wrong with Event LOG") @@ -138,11 +138,12 @@ class Twitch_Module(): text_to_say: str = "%s says, %s" % (message.sender, message.text) self.exec_tts_sender("", text_to_say) - def send_EventLog(self, command, eventTime, eventType, rest): + def send_EventLog(self, command, eventTime, eventType, eventSender, rest): params = urlencode( {'event_name': command, 'event_time': eventTime, 'event_type': eventType, + 'eventSender': eventSender, 'event_data': rest}) url = "http://standalone_eventlog:42008/api/v1/event_log/add_event?%s" % params resp = requests.get(url) diff --git a/standalone_user_client.py b/standalone_user_client.py index a433cac..01480d4 100644 --- a/standalone_user_client.py +++ b/standalone_user_client.py @@ -4,6 +4,13 @@ import tempText_Module import time import config as config +from datetime import datetime +import re +from json import loads +from urllib.parse import urlencode + +import requests + import flask from flask import Flask, request, after_this_request @@ -34,11 +41,82 @@ api.config["DEBUG"] = True def init(): print("starting up... ",) -def handle_request_get(requestName, requestType): - return flask.make_response("{\"message\": \"%s\"}" % "message123123", 200, {"Content-Type": "application/json"}) + +def handle_request_get(requestName, requestType, requestData): + + if requestType == "list": + if requestName == "Chyron": + response = request_get_list("XXXXXXXXX", "42010") + return flask.make_response("{\"message\": \"%s\"}" % response, 200, {"Content-Type": "application/json"}) + if requestName == "Commands": + response = request_get_list("standalone_command", "42010") + return flask.make_response("{\"message\": \"%s\"}" % response, 200, {"Content-Type": "application/json"}) + if requestName == "Rewards": + response = request_get_list("standalone_channelrewards", "42069") + return flask.make_response("{\"message\": \"%s\"}" % response, 200, {"Content-Type": "application/json"}) + if requestName == "Timers": + response = request_get_list("XXXXXXXXX", "42010") + return flask.make_response("{\"message\": \"%s\"}" % response, 200, {"Content-Type": "application/json"}) + if requestName == "TextSources": + response = request_get_list("XXXXXXXXX", "42010") + return flask.make_response("{\"message\": \"%s\"}" % response, 200, {"Content-Type": "application/json"}) + if requestName == "EventHistory": + params = urlencode( + {'request_name': requestName, + 'request_type': requestType, + 'request_data': requestData}) + response = request_get_eventlist(params) + return flask.make_response("{\"message\": \"%s\"}" % response, 200, {"Content-Type": "application/json"}) + else: + return flask.make_response("{\"message\": \"%s\"}" % "message123123", 200, {"Content-Type": "application/json"}) + +def request_get_list(serviceName, servicePort): + try: + url = "http://"+ "127.0.0.1" + ":"+ servicePort + "/api/v1/get_list/all" + 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: + return msg + # todo send to logger and other relevent services + else: + # todo handle failed requests + return None + except: + return None + +def request_get_eventlist(params): + try: + url = "http://standalone_eventlog:42008/api/v1/event_log/get_events?%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: + return msg + # todo send to logger and other relevent services + else: + # todo handle failed requests + return None + except: + return None def handle_request_set(requestName, requestType, requestData): - pass + if requestType == "update": + if requestName == "Chyron": + pass + if requestName == "Commands": + pass + elif requestType == "delete": + if requestName == "Chyron": + pass + if requestName == "Commands": + pass @api.route('/') def bot_StatusIcon(): @@ -58,8 +136,12 @@ def get_data(): return flask.make_response('{\"text\":"Argument \'request_name\' not in request"}', 400) if 'request_type' not in request.args: return flask.make_response('{\"text\":"Argument \'request_type\' not in request"}', 400) + if 'request_data' not in request.args: + requestData = None + else: + requestData = request.args['request_data'] - return handle_request_get(request.args['request_name'], request.args['request_type']) + return handle_request_get(request.args['request_name'], request.args['request_type'], requestData) if __name__ == "__main__": diff --git a/user_client/v1/index.html b/user_client/v1/index.html index feadd1c..68a5c7b 100644 --- a/user_client/v1/index.html +++ b/user_client/v1/index.html @@ -18,55 +18,72 @@ + + + +
+
+ +
+ + + +
+
- -
+
-
+
add

Chyron:

@@ -74,54 +91,51 @@

Section Name:

Title:

Content:

-

O

+
+
delete
-
- +
+ add

Commands:

-

Cmd Name:

-

Trigger:

-

Responses:

-

O

+

Command Name:

+
-
- +
+ add

Rewards:

-

Rwd Name:

-

Trigger:

-

Responses:

-

O

+

Reward Name:

+
-
+
add

Timers:

-
+

Timer Name:

Trigger:

Trigger_EXEC:

-

O

+

O

-
- +
+ add

Text Sources:

-

Text Name:

+

File Name:

Title:

Text:

-

O

+
delete
-
- - add +
+ + refresh

Event History:

-
+

Event:

User:

@@ -172,8 +186,8 @@
-

Modules:

-
+

Services:

+
@@ -228,6 +242,14 @@
+
+ + +
+ + +
+ diff --git a/user_client/v1/settings.html b/user_client/v1/settings.html new file mode 100644 index 0000000..e69de29 diff --git a/user_client/v1/style.css b/user_client/v1/style.css index ae41476..fc99f7d 100644 --- a/user_client/v1/style.css +++ b/user_client/v1/style.css @@ -29,12 +29,12 @@ p { } #sidebar_area{ - background-color: aquamarine; + background-color: rgb(235, 235, 235);; min-height: 100%; } #main_area{ - background-color: rgb(195, 246, 255); + background-color: rgb(221, 221, 221); min-height: 100%; } @@ -121,6 +121,16 @@ p { padding-bottom: 30px; } +.EventHistoryWrapper{ + overflow-y: scroll; + max-height: 60vh; + background-color: rgb(175, 213, 214); + margin-right: 20px; + margin-left: 20px; + margin-top: 30px; + margin-bottom: 30px; +} + /* width */ ::-webkit-scrollbar { width: 20px; diff --git a/user_client/v1/webclient.js b/user_client/v1/webclient.js index e1203a0..6289915 100644 --- a/user_client/v1/webclient.js +++ b/user_client/v1/webclient.js @@ -24,24 +24,17 @@ fetch_GetList = (fetchURL) => response = fetch(fetchURL) -myObj = { - 'request_name': "Chyron", - 'request_type': "list" - }; -params = "?request_name="+encodeURIComponent(myObj.request_name)+"&"+"request_type="+encodeURIComponent(myObj.request_type); -url = "http://127.0.0.1:5500/api/v1/user_client/get"+params; - GetList = async (listType) => { - if (listType == "Chyron") { - chyronListRequestOBJ = { - 'request_name': "Chyron", + if (true) { + ListRequestOBJ = { + 'request_name': listType, 'request_type': "list" } - params = "?request_name="+encodeURIComponent(chyronListRequestOBJ.request_name)+"&"+"request_type="+encodeURIComponent(chyronListRequestOBJ.request_type); + params = "?request_name="+encodeURIComponent(ListRequestOBJ.request_name)+"&"+"request_type="+encodeURIComponent(ListRequestOBJ.request_type); targetURL = "http://127.0.0.1:5500/api/v1/user_client/get"+params; console.log(targetURL) a = await fetch_GetList(targetURL); - console.log(a); + //console.log("return: "+a); return a } else { @@ -56,4 +49,48 @@ async function GetListChyron() { return returnedList } -GetListChyron(); +async function GetListCommands() { + returnedList = await GetList("Commands"); + var obj_main = JSON.parse(returnedList); + console.log(returnedList); + console.log(obj_main); + console.log(typeof obj_main["message"]) + + console.log(obj_main["message"]); + obj_temp = JSON.parse(obj_main["message"]); + + searchPattern = "(?<='command': ')[^]'+"; + searchPattern = "(?<='command': ')[^']+" + newString = returnedList.search(searchPattern); + console.log(newString) + //obj_temp = JSON.parse(obj_main["message"]); + for (var x in Object.keys(obj_main)) { + console.log(x); + } + console.log(obj_main['message']['!lights']); + return returnedList +} + +var returnedCommands = GetListCommands(); + + +async function GetListRewards() { + returnedList = await GetList("Rewards"); + obj = JSON.parse(returnedList); + console.log(obj["message"]) + return returnedList +} + +async function GetListTimers() { + returnedList = await GetList("Timers"); + obj = JSON.parse(returnedList); + console.log(obj["message"]) + return returnedList +} + +async function GetListTextSources() { + returnedList = await GetList("TextSources"); + obj = JSON.parse(returnedList); + console.log(obj["message"]) + return returnedList +} \ No newline at end of file diff --git a/user_client_module_InfoLookup.py b/user_client_module_InfoLookup.py new file mode 100644 index 0000000..1a40662 --- /dev/null +++ b/user_client_module_InfoLookup.py @@ -0,0 +1,51 @@ +from enum import Enum +from os import F_OK +import tempText_Module +import time +import config as config + +import flask +from flask import Flask, request, after_this_request + +import credentials + +import commands.loader as command_loader +from commands.command_base import AbstractCommand + +from cooldowns import Cooldown_Module + +import utilities_script as utility + +import chyron_module +import timers_module + +import random + +import os +import praxis_logging +praxis_logger_obj = praxis_logging.praxis_logger() +praxis_logger_obj.init(os.path.basename(__file__)) +praxis_logger_obj.log("\n -Starting Logs: " + os.path.basename(__file__)) + +api:Flask = Flask(__name__) +api.config["DEBUG"] = True + +class Module_InfoLookup(): + def __init__(self): + super().__init__() + + +def init(): + print("starting up... ",) + +@api.route('/') +def bot_StatusIcon(): + @after_this_request + def add_header(response): + response.headers.add('Access-Control-Allow-Origin', '*') + return response + return flask.make_response('Client Service: OK', 200) + +if __name__ == "__main__": + init() + api.run(host="0.0.0.0", port = 42063) \ No newline at end of file diff --git a/utilities_script.py b/utilities_script.py index b79c4c0..c8a607d 100644 --- a/utilities_script.py +++ b/utilities_script.py @@ -56,6 +56,10 @@ def get_dir(selected_dir): os.mkdir(dir) return dir +def contains_value(self, search: str, data:str): + contains = re.search(search, data) + return contains.group(0) + def contains_slur(input: str): containsSlur: bool = False parsedMessage = input.split(" ")