image from code wooo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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": []}
		}
	)