about summary refs log tree commit diff
path: root/pkg/bot/cmds.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-05-18 17:09:45 +0200
committerMel <einebeere@gmail.com>2022-05-18 17:09:45 +0200
commit25524291a1562283c21600f73e61fe4f0f4c339b (patch)
treee94d65e2a04f4ad5b6619f63f3dbbc6e7b3a21c2 /pkg/bot/cmds.go
parent3ca0bfd5bb1c0da28b19ebdd755160b142dad27c (diff)
downloadjinx-25524291a1562283c21600f73e61fe4f0f4c339b.tar.zst
jinx-25524291a1562283c21600f73e61fe4f0f4c339b.zip
VM command
Diffstat (limited to 'pkg/bot/cmds.go')
-rw-r--r--pkg/bot/cmds.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/pkg/bot/cmds.go b/pkg/bot/cmds.go
new file mode 100644
index 0000000..1dfb2cb
--- /dev/null
+++ b/pkg/bot/cmds.go
@@ -0,0 +1,40 @@
+package bot
+
+import (
+	"jinx/pkg/discord/events"
+	"jinx/pkg/lang/vm"
+	"jinx/pkg/lang/vm/text"
+	"strings"
+)
+
+type Cmd func(b *Bot, content string, msg events.Message) error
+
+var (
+	nameToCmd = map[string]Cmd{
+		"ping": pingCmd,
+		"vm":   vmCmd,
+	}
+)
+
+func pingCmd(b *Bot, content string, msg events.Message) error {
+	return b.client.SendMessage(msg.ChannelID, "pong")
+}
+
+func vmCmd(b *Bot, content string, msg events.Message) error {
+	src := strings.Split(content, "```")[1]
+
+	comp := text.NewCompiler(strings.NewReader(src))
+	bc, err := comp.Compile()
+	if err != nil {
+		b.logger.Error().Err(err).Msg("error compiling code")
+	}
+
+	vm := vm.New(&bc)
+
+	vm.Run()
+	res := vm.GetResult()
+
+	b.logger.Debug().Msg("executed code")
+
+	return b.client.SendMessage(msg.ChannelID, res)
+}