Spaces:
Runtime error
Runtime error
from cube_qgui.__init__ import CreateQGUI | |
from cube_qgui.banner_tools import * | |
from cube_qgui.notebook_tools import * | |
from playwright.sync_api import Playwright, sync_playwright | |
import os | |
import shutil | |
import uuid | |
from log_writer import logger | |
import config | |
import core | |
import build | |
# ---------- Functions ----------# | |
def open_config(args: dict): | |
""" | |
Opens the config file. | |
Args: | |
args (dict): A dictionary containing the necessary arguments. | |
Returns: | |
bool: Always True. | |
""" | |
os.system("notepad config.yaml") | |
return True | |
def save_apply_config(args: dict): | |
""" | |
Saves and applies the configuration. | |
Args: | |
args (dict): A dictionary containing the necessary arguments. | |
Returns: | |
bool: Always True. | |
""" | |
keys = ["API_KEY", "BASE_URL"] | |
for key in keys: | |
value = args[key].get() | |
if key == "ADVANCED_MODE": | |
value = True if value == 1 else False | |
else: | |
pass | |
config.edit_config(key, value) | |
config.load_config() | |
args["DevTool_CONFIG_API_KEY_DISPLAY"].set(f"CONFIG.API_KEY = {config.API_KEY}") | |
args["DevTools_CONFIG_BASE_URL_DISPLAY"].set(f"CONFIG.BASE_URL = {config.BASE_URL}") | |
return True | |
def load_config(args: dict): | |
""" | |
Loads the configuration. | |
Args: | |
args (dict): A dictionary containing the necessary arguments. | |
Returns: | |
bool: Always True. | |
""" | |
config.load_config() | |
args["API_KEY"].set(config.API_KEY) | |
args["BASE_URL"].set(config.BASE_URL) | |
return True | |
def print_args(args: dict): | |
""" | |
Prints the arguments. | |
Args: | |
args (dict): A dictionary containing the arguments. | |
Returns: | |
bool: Always True. | |
""" | |
for arg, v_fun in args.items(): | |
print(f"Name: {arg}, Value: {v_fun.get()}") | |
return True | |
def raise_error(args: dict): | |
""" | |
Raises an error. | |
Args: | |
args (dict): A dictionary containing the arguments. | |
""" | |
raise Exception("This is a test error.") | |
# ---------- Generate Function ----------# | |
def generate(args: dict): | |
""" | |
Generates the plugin. | |
Args: | |
args (dict): A dictionary containing the arguments. | |
Returns: | |
bool: Always True. | |
""" | |
global error_msg, pkg_id_path | |
# Get user inputs | |
name = args["PluginName"].get() | |
description = args["PluginDescription"].get() | |
artifact_name = name.replace(" ", "") | |
package_id = f"org.cubegpt.{uuid.uuid4().hex[:8]}" | |
pkg_id_path = "" | |
for id in package_id.split("."): | |
pkg_id_path += id + "/" | |
logger(f"user_input -> name: {name}") | |
logger(f"user_input -> description: {description}") | |
logger(f"random_generate -> package_id: {package_id}") | |
logger(f"str_path -> pkg_id_path: {pkg_id_path}") | |
print("Generating plugin...") | |
codes = core.askgpt( | |
config.SYS_GEN.replace("%ARTIFACT_NAME%", artifact_name).replace( | |
"%PKG_ID_LST%", pkg_id_path | |
), | |
config.USR_GEN.replace("%DESCRIPTION", description), | |
config.GENERATION_MODEL, | |
) | |
logger(f"codes: {codes}") | |
core.response_to_action(codes) | |
print("Code generated. Building now...") | |
result = build.build_plugin(artifact_name) | |
if "BUILD SUCCESS" in result: | |
print( | |
f"Build complete. Find your plugin at 'codes/{artifact_name}/target/{artifact_name}.jar'" | |
) | |
elif "Compilation failure": | |
error_msg = result | |
print( | |
"Build failed. To pass the error to ChatGPT && let it fix, jump to the Fixing page and click the Fix button." | |
) | |
else: | |
print( | |
"Unknown error. Please check the logs && send the log to @BaimoQilin on discord." | |
) | |
return True | |
def fix(args: dict): | |
""" | |
Fixes the error. | |
Args: | |
args (dict): A dictionary containing the arguments. | |
Returns: | |
bool: Always True. | |
""" | |
artifact_name = args["PluginName"].get() | |
print("Passing the error to ChatGPT...") | |
files = [ | |
f"codes/{artifact_name}/src/main/java/{pkg_id_path}Main.java", | |
f"codes/{artifact_name}/src/main/resources/plugin.yml", | |
f"codes/{artifact_name}/src/main/resources/config.yml", | |
f"codes/{artifact_name}/pom.xml", | |
] | |
ids = ["main_java", "plugin_yml", "config_yml", "pom_xml"] | |
main_java = None | |
plugin_yml = None | |
config_yml = None | |
pom_xml = None | |
for file in files: | |
with open(file, "r") as f: | |
code = f.read() | |
id = ids[files.index(file)] | |
globals()[id] = code | |
print("Generating...") | |
codes = core.askgpt( | |
config.SYS_FIX.replace("%ARTIFACT_NAME%", str(artifact_name)), | |
config.USR_FIX.replace("%MAIN_JAVA%", str(main_java)) | |
.replace("%PLUGIN_YML%", str(plugin_yml)) | |
.replace("%CONFIG_YML%", str(config_yml)) | |
.replace("%POM_XML%", str(pom_xml)) | |
.replave("%PKG_ID_LST%", pkg_id_path) | |
.replace("%P_ERROR_MSG%", str(error_msg)), | |
config.FIXING_MODEL, | |
) | |
shutil.rmtree(f"codes/{artifact_name}") | |
core.response_to_action(codes) | |
print("Code generated. Building now...") | |
result = build.build_plugin(artifact_name) | |
if "BUILD SUCCESS" in result: | |
print( | |
f"Build complete. Find your plugin at 'codes/{artifact_name}/target/{artifact_name}.jar'" | |
) | |
else: | |
print( | |
"Build failed again. Please check the logs && send the log to @BaimoQilin on discord." | |
) | |
return True | |
# ---------- Main Program ----------# | |
root = CreateQGUI(title="BukkitGPT-v3", tab_names=["Generate", "Settings", "DevTools"]) | |
error_msg = None | |
logger("Starting program.") | |
# Initialize Core | |
core.initialize() | |
print("BukkitGPT v3 beta console running") | |
# Banner | |
root.add_banner_tool(GitHub("https://github.com/CubeGPT/BukkitGPT-v3")) | |
# Generate Page | |
root.add_notebook_tool( | |
InputBox(name="PluginName", default="ExamplePlugin", label_info="Plugin Name") | |
) | |
root.add_notebook_tool( | |
InputBox( | |
name="PluginDescription", | |
default="Send msg 'hello' to every joined player.", | |
label_info="Plugin Description", | |
) | |
) | |
root.add_notebook_tool( | |
RunButton( | |
bind_func=generate, | |
name="Generate", | |
text="Generate Plugin", | |
checked_text="Generating...", | |
tab_index=0, | |
) | |
) | |
# Fixing Page # | |
# root.add_notebook_tool(Label(name="Fixing_DESCRIPTION", text="This is a fixing page. If the build fails, click the Fix button to fix the error in the LATEST build.", tab_index=1)) | |
# root.add_notebook_tool(RunButton(bind_func=fix, name="Fix", text="Fix", checked_text="Fixing...", tab_index=1)) | |
# Settings Page | |
root.add_notebook_tool( | |
InputBox(name="API_KEY", default=config.API_KEY, label_info="API Key", tab_index=1) | |
) | |
root.add_notebook_tool( | |
InputBox( | |
name="BASE_URL", default=config.BASE_URL, label_info="BASE URL", tab_index=1 | |
) | |
) | |
config_buttons = HorizontalToolsCombine( | |
[ | |
BaseButton( | |
bind_func=save_apply_config, | |
name="Save & Apply Config", | |
text="Save & Apply", | |
tab_index=1, | |
), | |
BaseButton( | |
bind_func=load_config, name="Load Config", text="Load Config", tab_index=1 | |
), | |
BaseButton( | |
bind_func=open_config, | |
name="Open Config", | |
text="Open Full Config", | |
tab_index=1, | |
), | |
] | |
) | |
root.add_notebook_tool(config_buttons) | |
# DevTools Page | |
root.add_notebook_tool( | |
Label( | |
name="DevTool_DESCRIPTION", | |
text="This is a testing page for developers. Ignore it if you are a normal user.", | |
tab_index=2, | |
) | |
) | |
root.add_notebook_tool( | |
Label( | |
name="DevTool_CONFIG_API_KEY_DISPLAY", | |
text=f"CONFIG.API_KEY = {config.API_KEY}", | |
tab_index=2, | |
) | |
) | |
root.add_notebook_tool( | |
Label( | |
name="DevTools_CONFIG_BASE_URL_DISPLAY", | |
text=f"CONFIG.BASE_URL = {config.BASE_URL}", | |
tab_index=2, | |
) | |
) | |
root.add_notebook_tool( | |
RunButton(bind_func=print_args, name="Print Args", text="Print Args", tab_index=2) | |
) | |
root.add_notebook_tool( | |
RunButton( | |
bind_func=raise_error, name="Raise Error", text="Raise Error", tab_index=2 | |
) | |
) | |
# Sidebar | |
root.set_navigation_about( | |
author="CubeGPT Team", | |
version=config.VERSION_NUMBER, | |
github_url="https://github.com/CubeGPT/BukkitGPT-v3", | |
) | |
# Run | |
root.run() | |