extends Node const prefix := "!c" onready var code_view: CodeDisplay = $"%Code" onready var viewport: CodeViewport = $"%CodeViewport" var file = File.new() func compile(source: String) -> RegEx: var reg := RegEx.new() reg.compile(source) return reg func _ready(): var bot := DiscordBot.new() add_child(bot) 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") file.close() 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): bot.set_presence({"activity": {"type": "Game", "name": "Creating imagery"}}) 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): var split = message.content.split(" ") if message.author.bot or not prefix in split[0]: return var res if message.content.find("```") != -1: var reg := compile("```([\\s\\S]+)```") res = reg.search(message.content) elif message.content.find("`") != -1: var reg := compile("`([^`]+)`") res = reg.search(message.content) split.remove(0) var code: String = res.strings[1] if res else split.join(" ") var lines = code.split("\n") if res and lines[0] in ["swift", "py", "c", "c++"]: lines.remove(0) code = lines.join("\n") code = code.strip_edges() if !code: return code_view.set_text(code) code_view.emit_signal("text_changed") viewport.warmup() yield(get_tree(), "idle_frame") var img: Image = viewport.save() bot.reply( message, "Code:", { "files": [{"name": "code.png", "media_type": "image/png", "data": img.save_png_to_buffer()}], "allowed_mentions": {"parse": [], "users": []} } )