aboutsummaryrefslogtreecommitdiff
path: root/chat.go
blob: cf7559456fc4a49741fd736de20f7929a462f11b (plain) (blame)
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
package proxy

import (
	"fmt"
	"strings"
	"time"

	"github.com/anon55555/mt"
)

// SendChatMsg sends a chat message to the ClientConn.
func (cc *ClientConn) SendChatMsg(msg ...string) {
	cc.SendCmd(&mt.ToCltChatMsg{
		Type:      mt.SysMsg,
		Text:      strings.Join(msg, " "),
		Timestamp: time.Now().Unix(),
	})
}

// Colorize returns the minetest-colorized version of the input.
func Colorize(text, color string) string {
	return string(0x1b) + "(c@" + color + ")" + text + string(0x1b) + "(c@#FFF)"
}

func onChatMsg(cc *ClientConn, cmd *mt.ToSrvChatMsg) (string, bool) {
	initChatCmds()

	if strings.HasPrefix(cmd.Msg, Conf().CmdPrefix) {
		substrs := strings.Split(cmd.Msg, " ")
		cmdName := strings.Replace(substrs[0], Conf().CmdPrefix, "", 1)

		var args []string
		if len(substrs) > 1 {
			args = substrs[1:]
		}

		v := make([]interface{}, 2+len(args))
		v[0] = "command"
		v[1] = cmdName

		for i, arg := range args {
			v[i+2] = arg
		}

		cc.Log("-->", v...)

		if !ChatCmdExists(cmdName) {
			cc.Log("<--", "unknown command", cmdName)
			return "Command not found.", true
		}

		chatCmdsMu.RLock()
		defer chatCmdsMu.RUnlock()

		cmd := chatCmds[cmdName]

		if !cc.HasPerms(cmd.Perm) {
			cc.Log("<--", "deny command", cmdName)
			return fmt.Sprintf("Missing permission %s.", cmd.Perm), true
		}

		return cmd.Handler(cc, args...), true
	}

	return "", false
}