aboutsummaryrefslogtreecommitdiff
path: root/chat.go
diff options
context:
space:
mode:
Diffstat (limited to 'chat.go')
-rw-r--r--chat.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/chat.go b/chat.go
new file mode 100644
index 0000000..ca306a5
--- /dev/null
+++ b/chat.go
@@ -0,0 +1,60 @@
+package proxy
+
+import (
+ "fmt"
+ "strings"
+ "time"
+
+ "github.com/anon55555/mt"
+)
+
+func (cc *ClientConn) SendChatMsg(msg string) {
+ cc.SendCmd(&mt.ToCltChatMsg{
+ Type: mt.SysMsg,
+ Text: msg,
+ Timestamp: time.Now().Unix(),
+ })
+}
+
+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
+}