the start of the webui stuff
This commit is contained in:
parent
995bb08a0a
commit
d94163e246
6 changed files with 149 additions and 3 deletions
15
.env_default
Normal file
15
.env_default
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
discord_token='token'
|
||||||
|
flask_port='5000'
|
||||||
|
imgflip_username='username'
|
||||||
|
imgflip_password='password'
|
||||||
|
openai.api_key='api_key'
|
||||||
|
upload_phixxy='False'
|
||||||
|
ftp_server='www.example.com'
|
||||||
|
ftp_username='username'
|
||||||
|
ftp_password='password'
|
||||||
|
ftp_public_html='/home/debian/www.example.com/'
|
||||||
|
stable_diffusion_ip='disabled'
|
||||||
|
stable_diffusion_port='7861'
|
||||||
|
stable_diffusion_user=
|
||||||
|
stable_diffusion_password=
|
||||||
|
eleven_labs='api-key'
|
||||||
61
flask_templates/index.html
Normal file
61
flask_templates/index.html
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #333;
|
||||||
|
color: #fff;
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
color: #ff6347;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
form {
|
||||||
|
margin: 20px;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #444;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
border: 1px solid #555;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 5px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
background-color: #555;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
background-color: #ff6347;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
button:hover {
|
||||||
|
background-color: #db3b21;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Input Form</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Warning!</h1>
|
||||||
|
<p>This information is stored in PLAIN TEXT in a .env file!</p>
|
||||||
|
<form method="post">
|
||||||
|
{% for key, value in key_value_pairs.items() %}
|
||||||
|
<label for="{{ key }}">{{ key }}</label>
|
||||||
|
<input type="text" id="{{ key }}" name="{{ key }}" value="{{ value }}">
|
||||||
|
<br>
|
||||||
|
{% endfor %}
|
||||||
|
<button type="submit">Submit</button>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -9,4 +9,5 @@ psutil
|
||||||
aiofiles
|
aiofiles
|
||||||
inky
|
inky
|
||||||
wakeonlan
|
wakeonlan
|
||||||
beautifulsoup4
|
beautifulsoup4
|
||||||
|
Flask[async]
|
||||||
24
sparkytron_webui.py
Normal file
24
sparkytron_webui.py
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
import asyncio
|
||||||
|
import discord
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from src.bot import bot
|
||||||
|
from src.webui import flask_app
|
||||||
|
|
||||||
|
|
||||||
|
def run_flask_app(process):
|
||||||
|
flask_port = os.getenv("flask_port")
|
||||||
|
if not flask_port:
|
||||||
|
flask_port = '5000'
|
||||||
|
flask_app.bot_process = process
|
||||||
|
flask_app.run(debug=True, use_reloader=False ,host='0.0.0.0', port=flask_port)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
load_dotenv()
|
||||||
|
process = subprocess.Popen(["python", "sparkytron3000.py"])
|
||||||
|
run_flask_app(process)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
@ -10,7 +10,6 @@ intents.message_content = True
|
||||||
bot = commands.Bot(command_prefix='!', intents=intents)
|
bot = commands.Bot(command_prefix='!', intents=intents)
|
||||||
logger = src.logger.logger_setup()
|
logger = src.logger.logger_setup()
|
||||||
|
|
||||||
|
|
||||||
async def load_cogs(bot: commands.Bot, cog_path: str) -> None:
|
async def load_cogs(bot: commands.Bot, cog_path: str) -> None:
|
||||||
for cog_file in os.listdir(cog_path):
|
for cog_file in os.listdir(cog_path):
|
||||||
if cog_file[-3:] == '.py':
|
if cog_file[-3:] == '.py':
|
||||||
|
|
@ -27,6 +26,7 @@ async def on_ready():
|
||||||
await utils.delete_all_files("tmp/")
|
await utils.delete_all_files("tmp/")
|
||||||
await load_cogs(bot, 'cogs/')
|
await load_cogs(bot, 'cogs/')
|
||||||
logger.info('We have logged in as {0.user}'.format(bot))
|
logger.info('We have logged in as {0.user}'.format(bot))
|
||||||
|
print("Visit http://localhost:5000 to change config!")
|
||||||
except:
|
except:
|
||||||
logger.warning(f"Error in on_ready")
|
logger.warning(f"Error in on_ready")
|
||||||
|
|
||||||
|
|
@ -43,4 +43,4 @@ async def on_message(ctx):
|
||||||
except discord.ext.commands.errors.CommandNotFound:
|
except discord.ext.commands.errors.CommandNotFound:
|
||||||
logger.info("Command not found.")
|
logger.info("Command not found.")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"Error processing commands: {e}")
|
logger.warning(f"Error processing commands: {e}")
|
||||||
45
src/webui.py
Normal file
45
src/webui.py
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from flask import Flask, render_template, request
|
||||||
|
|
||||||
|
logger = logging.getLogger("bot")
|
||||||
|
flask_app = Flask(__name__, template_folder='../flask_templates')
|
||||||
|
|
||||||
|
def read_env(filename):
|
||||||
|
if os.path.exists(filename):
|
||||||
|
with open(filename, 'r') as file:
|
||||||
|
key_value_pairs = {}
|
||||||
|
for line in file:
|
||||||
|
try:
|
||||||
|
key, value = line.strip().split('=')
|
||||||
|
key = key.strip()
|
||||||
|
value = value.strip()[1:-1]
|
||||||
|
key_value_pairs[key] = value
|
||||||
|
except:
|
||||||
|
print("This line isnt a kv pair")
|
||||||
|
return key_value_pairs
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
@flask_app.route('/', methods=['GET', 'POST'])
|
||||||
|
async def index():
|
||||||
|
key_value_pairs = read_env('.env')
|
||||||
|
if not key_value_pairs:
|
||||||
|
logger.warn("No .env file found! Copying defaults.")
|
||||||
|
key_value_pairs = read_env('.env_default')
|
||||||
|
form_dict = {}
|
||||||
|
if request.method == 'POST':
|
||||||
|
if key_value_pairs:
|
||||||
|
for form_name in key_value_pairs.keys():
|
||||||
|
form_dict[form_name] = request.form[form_name]
|
||||||
|
with open('.env', 'w') as file:
|
||||||
|
for key, value in form_dict.items():
|
||||||
|
file.write(f"{key}='{value}'\n")
|
||||||
|
print(form_dict)
|
||||||
|
flask_app.bot_process.terminate()
|
||||||
|
flask_app.bot_process = subprocess.Popen(["python", "sparkytron3000.py"])
|
||||||
|
return 'Your input has been saved! The bot must be restarted for the changes to take effect.'
|
||||||
|
return render_template('index.html', key_value_pairs = key_value_pairs)
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue