Evaluate gdscript code
initial commit
bendn 2022-07-31
parent 8f18e97 · commit ef67673
-rw-r--r--.gitignore1
-rw-r--r--.gitmodules6
-rw-r--r--Eval.gd53
-rw-r--r--Eval.tscn6
-rw-r--r--Main.tscn3
l---------addons/discord_gd1
l---------addons/gdcli1
-rw-r--r--autoloads/CLI.gd11
-rw-r--r--project.godot88
m---------submodules/discord.gd0
m---------submodules/gdcli0
11 files changed, 141 insertions, 29 deletions
diff --git a/.gitignore b/.gitignore
index 5bbe921..3d753c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/Eval.gd b/Eval.gd
new file mode 100644
index 0000000..803df2a
--- /dev/null
+++ b/Eval.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