diff --git a/.env_default b/.env_default
new file mode 100644
index 0000000..c3c92fb
--- /dev/null
+++ b/.env_default
@@ -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'
diff --git a/flask_templates/index.html b/flask_templates/index.html
new file mode 100644
index 0000000..757eda7
--- /dev/null
+++ b/flask_templates/index.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+ Sparkytron Config
+
+
+
+
+
Warning!
+
This information is stored in PLAIN TEXT in a .env file!
+
+
+
+
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index c94a3fc..6645a76 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,4 +9,6 @@ psutil
aiofiles
inky
wakeonlan
-beautifulsoup4
\ No newline at end of file
+beautifulsoup4
+Flask[async]
+waitress
\ No newline at end of file
diff --git a/sparkytron_webui.py b/sparkytron_webui.py
new file mode 100644
index 0000000..bb75e1e
--- /dev/null
+++ b/sparkytron_webui.py
@@ -0,0 +1,26 @@
+import asyncio
+import discord
+import os
+import subprocess
+import sys
+from dotenv import load_dotenv
+from src.bot import bot
+from src.webui import flask_app
+from waitress import serve
+
+def get_flask_app(process):
+ flask_app.bot_process = process
+ flask_app.secret_key = "woaoaoahaowhawoiahoahhhhhh"
+ return flask_app
+
+def main():
+ load_dotenv()
+ flask_port = os.getenv("flask_port")
+ if not flask_port:
+ flask_port = '5000'
+ process = subprocess.Popen([sys.executable, "sparkytron3000.py"])
+ flask_app = get_flask_app(process)
+ serve(flask_app, host='0.0.0.0', port=flask_port)
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/src/bot.py b/src/bot.py
index 8c00b66..52cb604 100644
--- a/src/bot.py
+++ b/src/bot.py
@@ -10,7 +10,6 @@ intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
logger = src.logger.logger_setup()
-
async def load_cogs(bot: commands.Bot, cog_path: str) -> None:
for cog_file in os.listdir(cog_path):
if cog_file[-3:] == '.py':
@@ -27,6 +26,7 @@ async def on_ready():
await utils.delete_all_files("tmp/")
await load_cogs(bot, 'cogs/')
logger.info('We have logged in as {0.user}'.format(bot))
+ print("If using the webui, visit http://localhost:5000 to change config!")
except:
logger.warning(f"Error in on_ready")
@@ -43,4 +43,4 @@ async def on_message(ctx):
except discord.ext.commands.errors.CommandNotFound:
logger.info("Command not found.")
except Exception as e:
- logger.warning(f"Error processing commands: {e}")
+ logger.warning(f"Error processing commands: {e}")
\ No newline at end of file
diff --git a/src/webui.py b/src/webui.py
new file mode 100644
index 0000000..a003068
--- /dev/null
+++ b/src/webui.py
@@ -0,0 +1,47 @@
+import logging
+import os
+import subprocess
+import sys
+
+from flask import Flask, render_template, request, flash
+
+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([sys.executable, "sparkytron3000.py"])
+ message = "Variables Updated!"
+ flash(message)
+ return render_template('index.html', key_value_pairs = key_value_pairs)
+