Evaluate gdscript code
initial commit
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | .gitmodules | 6 | ||||
| -rw-r--r-- | Eval.gd | 53 | ||||
| -rw-r--r-- | Eval.tscn | 6 | ||||
| -rw-r--r-- | Main.tscn | 3 | ||||
| l--------- | addons/discord_gd | 1 | ||||
| l--------- | addons/gdcli | 1 | ||||
| -rw-r--r-- | autoloads/CLI.gd | 11 | ||||
| -rw-r--r-- | project.godot | 88 | ||||
| m--------- | submodules/discord.gd | 0 | ||||
| m--------- | submodules/gdcli | 0 |
11 files changed, 141 insertions, 29 deletions
@@ -6,3 +6,4 @@ logs/ .vscode/ exports/ *.x86_64 +token diff --git a/.gitmodules b/.gitmodules index 68b663d..f941959 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "gdcli"] - path = submodules/gdcli - url = https://github.com/bend-n/gdcli +[submodule "submodules/discord.gd"] + path = submodules/discord.gd + url = https://github.com/3ddelano/discord.gd @@ -0,0 +1,53 @@ +extends Node + +const prefix = "!e" + +var expr = Expression.new() + +func _ready(): + var bot := DiscordBot.new() + add_child(bot) + var file = File.new() + var err = file.open("res://token", File.READ) + var token + if err == OK: + token = file.get_as_text() + elif OS.has_environment("TOKEN"): + token = OS.get_environment("TOKEN") + else: + push_error("token missing") + bot.TOKEN = token + bot.connect("bot_ready", self, "_on_bot_ready") + bot.connect("message_create", self, "_on_message_create") + bot.login() + + +func _on_bot_ready(bot: DiscordBot): + print("Logged in as " + bot.user.username + "#" + bot.user.discriminator) + print("Listening on " + str(bot.channels.size()) + " channels and " + str(bot.guilds.size()) + " guilds.") + +func _on_message_create(bot: DiscordBot, message: Message, _channel: Dictionary): + if message.author.bot or message.content.split(" ")[0] != prefix: + return + var reg = RegEx.new() + reg.compile("`+([^`]+)`+") + var res = reg.search(message.content) + var code = res.strings[1] if res else message.content.substr(len(prefix) + 1) + var lines = code.split("\n") + if res and lines[0] in ["swift", "py", "c", "c++"]: + lines.remove(0) + code = lines.join("\n") + + var skip = false + var error = expr.parse(code, []) + if error != OK: + bot.send(message, str(expr.get_error_text()) if expr.get_error_text() else "null") + skip = true + + if not skip: + var result = expr.execute([], null, true) + if not expr.has_execute_failed(): + bot.send(message, str(result) if result else "null") + return + bot.send(message, "Execution of \n```swift\n%s\n``` Has failed" % code + ( ": " + expr.get_error_text() if expr.get_error_text() else ".")) + diff --git a/Eval.tscn b/Eval.tscn new file mode 100644 index 0000000..6a59b99 --- /dev/null +++ b/Eval.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Eval.gd" type="Script" id=1] + +[node name="Eval" type="Node"] +script = ExtResource( 1 ) diff --git a/Main.tscn b/Main.tscn deleted file mode 100644 index 70a653e..0000000 --- a/Main.tscn +++ /dev/null @@ -1,3 +0,0 @@ -[gd_scene format=2] - -[node name="Main" type="Node2D"] diff --git a/addons/discord_gd b/addons/discord_gd new file mode 120000 index 0000000..737cb4a --- /dev/null +++ b/addons/discord_gd @@ -0,0 +1 @@ +../submodules/discord.gd/addons/discord_gd/
\ No newline at end of file diff --git a/addons/gdcli b/addons/gdcli deleted file mode 120000 index ac119d8..0000000 --- a/addons/gdcli +++ /dev/null @@ -1 +0,0 @@ -../submodules/gdcli/addons/gdcli/
\ No newline at end of file diff --git a/autoloads/CLI.gd b/autoloads/CLI.gd deleted file mode 100644 index 095bfd3..0000000 --- a/autoloads/CLI.gd +++ /dev/null @@ -1,11 +0,0 @@ -extends Node - -func _ready() -> void: - var p := Parser.new() - p.add_argument(Arg.new({triggers=["-h", "--help", "-?"], help="show this help message and exit", action="store_true"})) - var args = p.parse_arguments() - if args == null: - get_tree().quit() - elif args.get("help", false): - print(p.help()) - get_tree().quit()
\ No newline at end of file diff --git a/project.godot b/project.godot index 663e841..a2d2b65 100644 --- a/project.godot +++ b/project.godot @@ -10,31 +10,93 @@ config_version=4 _global_script_classes=[ { "base": "Reference", -"class": "Arg", +"class": "ApplicationCommand", "language": "GDScript", -"path": "res://addons/gdcli/Arg.gd" +"path": "res://addons/discord_gd/classes/application_command.gd" }, { "base": "Reference", -"class": "Parser", +"class": "BitField", "language": "GDScript", -"path": "res://addons/gdcli/Parser.gd" +"path": "res://addons/discord_gd/classes/bit_field.gd" +}, { +"base": "HTTPRequest", +"class": "DiscordBot", +"language": "GDScript", +"path": "res://addons/discord_gd/discord.gd" +}, { +"base": "Reference", +"class": "DiscordInteraction", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/discord_interaction.gd" +}, { +"base": "Reference", +"class": "Embed", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/embed.gd" +}, { +"base": "Reference", +"class": "Helpers", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/helpers.gd" +}, { +"base": "Reference", +"class": "Message", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/message.gd" +}, { +"base": "Reference", +"class": "MessageActionRow", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/message_action_row.gd" +}, { +"base": "Reference", +"class": "MessageButton", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/message_button.gd" +}, { +"base": "BitField", +"class": "MessageFlags", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/message_flags.gd" +}, { +"base": "BitField", +"class": "Permissions", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/permissions.gd" +}, { +"base": "Reference", +"class": "SelectMenu", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/select_menu.gd" +}, { +"base": "Reference", +"class": "User", +"language": "GDScript", +"path": "res://addons/discord_gd/classes/user.gd" } ] _global_script_class_icons={ -"Arg": "", -"Parser": "" +"ApplicationCommand": "", +"BitField": "", +"DiscordBot": "", +"DiscordInteraction": "", +"Embed": "", +"Helpers": "", +"Message": "", +"MessageActionRow": "", +"MessageButton": "", +"MessageFlags": "", +"Permissions": "", +"SelectMenu": "", +"User": "" } [application] config/name="Godot Template" -run/main_scene="res://Main.tscn" +run/main_scene="res://Eval.tscn" config/use_custom_user_dir=true config/custom_user_dir_name="GodotTemplate" -[autoload] - -CLI="*res://autoloads/CLI.gd" - [debug] gdscript/warnings/return_value_discarded=false @@ -49,6 +111,10 @@ window/dpi/allow_hidpi=true window/stretch/mode="2d" window/stretch/aspect="keep" +[editor_plugins] + +enabled=PoolStringArray( "res://addons/discord_gd/plugin.cfg" ) + [logging] file_logging/enable_file_logging=true diff --git a/submodules/discord.gd b/submodules/discord.gd new file mode 160000 +Subproject a6ace61217f3edeee9c8254f638f2d85cbde7bd diff --git a/submodules/gdcli b/submodules/gdcli deleted file mode 160000 -Subproject 6040364dae05d331f8d6c9d3d52186df1d0399c |