mt-multiserver-proxy/plugin_chatcmd.go

59 lines
894 B
Go
Raw Normal View History

package proxy
2021-09-09 11:03:15 -07:00
import "sync"
2021-09-09 07:23:42 -07:00
type ChatCmd struct {
Name string
Perm string
2021-09-10 01:50:31 -07:00
Help string
Usage string
2021-09-09 07:23:42 -07:00
Handler func(*ClientConn, ...string) string
}
var chatCmds map[string]ChatCmd
var chatCmdsMu sync.RWMutex
var chatCmdsOnce sync.Once
2021-09-10 01:48:25 -07:00
func ChatCmds() map[string]ChatCmd {
initChatCmds()
chatCmdsMu.RLock()
defer chatCmdsMu.RUnlock()
2021-09-10 01:48:25 -07:00
cmds := make(map[string]ChatCmd)
for name, cmd := range chatCmds {
cmds[name] = cmd
}
return cmds
}
func ChatCmdExists(name string) bool {
cmds := ChatCmds()
_, ok := cmds[name]
return ok
}
2021-09-09 07:23:42 -07:00
func RegisterChatCmd(cmd ChatCmd) bool {
initChatCmds()
2021-09-09 07:23:42 -07:00
if ChatCmdExists(cmd.Name) {
return false
}
chatCmdsMu.Lock()
defer chatCmdsMu.Unlock()
2021-09-09 07:23:42 -07:00
chatCmds[cmd.Name] = cmd
return true
}
func initChatCmds() {
chatCmdsOnce.Do(func() {
chatCmdsMu.Lock()
defer chatCmdsMu.Unlock()
chatCmds = make(map[string]ChatCmd)
})
}