def webCustomPath(raw_path): if not localIP(request.environ, currentIP): return NO_ACCESS_STRING mimetype = request.args.get('mimetype') path = Path('extensions') / raw_path if path.is_file() == False: return 'No file at selected path' filenameLower = path.name.lower() if mimetype == None: if filenameLower[-5:].lower() == '.html': with open(path, 'r') as f: try: return render_template_string(f.read()) except Exception: pass mimetype = getMimetype(filenameLower) if mimetype != None: return send_file(path, mimetype=mimetype) else: with open (path, 'r') as f: try: return f.read() except Exception: pass return 'Unknown file :( Try using http://url/path/file?mimetype=file_mimetype (preferably, use %2F instead of /, as an example, image/png (png) becomes image%2Fpng)'
def sioSendMessage(data=''): if not localIP(request.environ, currentIP): return False success, msg = chat.addMessage(data) if success: sio.emit('SendMessage', {'type':'success', 'success': True}, room=request.sid) else: sio.emit('SendMessage', {'type':'error', 'success': False, 'message': msg}, room=request.sid)
def sioCrossTalk(data=''): if not localIP(request.environ, currentIP): return False success, msg = extensions.crossTalk(data) if success: sio.emit('CrossTalk', {'type':'success', 'success': True}, room=request.sid) else: sio.emit('CrossTalk', {'type':'error', 'success': False, 'message': msg}, room=request.sid)
def sioStreamElementsAPI(data=''): if not localIP(request.environ, currentIP): return False success, msg = SE.APIRequest(data) if success: sio.emit('StreamElementsAPI', {'type':'success', 'success': True, 'response': msg}, room=request.sid) else: sio.emit('StreamElementsAPI', {'type':'error', 'success': False, 'message': msg}, room=request.sid)
def webAddRegular(): if not localIP(request.environ, currentIP): return NO_ACCESS_STRING try: message = json.loads(request.data.decode('UTF-8')) except Exception: return json.dumps({'type':'error', 'success': False, 'message':'Please forward json... requests.post(url, json={"user":"******"})'}) if users.addRegular(message): return json.dumps({'type':'error', 'success': False, 'message':'Please forward json... requests.post(url, json={"user":"******"})'}) else: return json.dumps({'type':'success', 'success': True})
def webStreamElementsAPI(): if not localIP(request.environ, currentIP): return NO_ACCESS_STRING try: message = json.loads(request.data.decode('UTF-8')) except Exception: return json.dumps({'type':'error', 'message':'Please forward json... requests.post(url, json=JSON_DATA)'}) success, msg = SE.APIRequest(message) if success: return json.dumps({'type':'success', 'success': True, 'response': msg}) else: return json.dumps({'type':'error', 'success': False, 'message': msg})
def webCrossTalk(): if not localIP(request.environ, currentIP): return NO_ACCESS_STRING try: message = json.loads(request.data.decode('UTF-8')) except Exception: return json.dumps({'type':'error', 'success': False, 'message':'Please forward json... requests.post(url, json={\"event\":\"p-example\", \"data\": [\"example\", \"of\", \"data\"]})'}) success, msg = extensions.crossTalk(message) if success: return json.dumps({'type':'success', 'success': True}) else: return json.dumps({'type':'error', 'success': False, 'message': msg})
def webSendMessage(): if not localIP(request.environ, currentIP): return NO_ACCESS_STRING try: message = json.loads(request.data.decode('UTF-8')) except Exception: return json.dumps({'type':'error', 'success': False, 'message':'Please forward json... requests.post(url, json={\"message\":\"this is my message\", \"bot\": \"local\"})'}) success, msg = chat.addMessage(message) if success: return json.dumps({'type':'success', 'success': True}) else: return json.dumps({'type':'error', 'success': False, 'message': msg})
def sioSaveSettings(data=''): if not localIP(request.environ, currentIP): return False if not isinstance(data, dict): sio.emit('SaveSettings', json.dumps({'success': False}), room=request.sid) return if not 'name' in data or not isinstance(data['name'], str) or not 'index' in data or not isinstance(data['index'], int) or not 'settings' in data or not isinstance(data['settings'], dict): data['success'] = False sio.emit('SaveSettings', json.dumps(data), room=request.sid) return extensions.updateSettings(data['index'], data['name'], data['settings']) data['success'] = True sio.emit('SaveSettings', json.dumps(data), room=request.sid)
def sioToggleExtension(data=''): if not localIP(request.environ, currentIP): return False if not isinstance(data, dict): sio.emit('ToggleExtension', json.dumps({'success': False}), room=request.sid) return if not 'module' in data or not isinstance(data['module'], str) or not 'active' in data or not isinstance(data['active'], bool): data['success'] = False sio.emit('ToggleExtension', json.dumps(data), room=request.sid) return extensions.toggle(data['module'], data['active']) data['success'] = True sio.emit('ToggleExtension', json.dumps(data), room=request.sid)
def sioUpdateSettings(data=''): if not localIP(request.environ, currentIP): return False if not isinstance(data, dict): return setTwitchData = False setSEData = False for key in data: if validateSetting(key, data[key]): settings[key] = data[key] if key in ['tmi', 'twitch_channel', 'tmi_twitch_username']: setTwitchData = True if key in ['jwt_token', 'user_id', 'SEListener']: setSEData = True if setTwitchData: chat.setTwitchData(tmi=settings['tmi'], tmi_username=settings['tmi_twitch_username'], twitch_channel=settings['twitch_channel']) if setSEData: SE.setData(jwt=settings['jwt_token'], method=settings['SEListener']) saveSettings(settings) sio.emit('UpdateSettings', data, room=request.sid)
def sioResetExtensions(data=''): if not localIP(request.environ, currentIP): return False extensions.resetExtensions() sio.emit('ResetExtensions', room=request.sid)
def sioRestartSE(data=''): if not localIP(request.environ, currentIP): return False state, cooldown = SE.start() sio.emit('RestartSE', {'state': state, 'cooldown': cooldown}, room=request.sid)
def sioAddRegular(data=''): if not localIP(request.environ, currentIP): return False if not isinstance(data, str) or len(data) == 0: return users.removeRegular(data) sio.emit('DeleteRegular', data, room=request.sid)
def sioClearLogs(data=''): if not localIP(request.environ, currentIP): return False extensions.log.clear()
def sioClearEvents(data=''): if not localIP(request.environ, currentIP): return False chat.twitchMessagesHistory.clear()
def webUrlJs(): if not localIP(request.environ, currentIP): return NO_ACCESS_STRING path = Path('dependencies/data/url.js') if not path.is_file: return '' return send_file(path, 'text/javascript')
def sioOnConnect(data=''): if not localIP(request.environ, currentIP): return False print(data)
def sioClearEvents(data=''): if not localIP(request.environ, currentIP): return False SE.eventHistory.clear()
def webRoot(): if not localIP(request.environ, currentIP): return NO_ACCESS_STRING return render_template('index.html', extensions=extensions.dump(), ExtensionsSettings=extensions.settings, events=SE.eventHistory, messages=chat.twitchMessagesHistory, ExtensionLogs=extensions.log, regulars=users.regulars, settings=settings)