diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-10 11:57:31 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-10 11:57:31 +0200 |
commit | d9496ac2b54acb558bce5c0c1fe0d8d9461a64e5 (patch) | |
tree | e40e00a6bcc871c3d9d82dc9c1577495f4af1a87 | |
parent | 8576d696e884a713bde6be3407f629f1f4b5537d (diff) |
Add help and usage commands
-rw-r--r-- | chatcommands.go | 131 | ||||
-rw-r--r-- | go.mod | 4 | ||||
-rw-r--r-- | go.sum | 6 |
3 files changed, 120 insertions, 21 deletions
diff --git a/chatcommands.go b/chatcommands.go index c8d7485..e585e11 100644 --- a/chatcommands.go +++ b/chatcommands.go @@ -10,8 +10,10 @@ import ( func init() { proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "shutdown", - Perm: "cmd_shutdown", + Name: "shutdown", + Perm: "cmd_shutdown", + Help: "Disconnect all clients and stop the server.", + Usage: "shutdown", Handler: func(cc *proxy.ClientConn, args ...string) string { proc, err := os.FindProcess(os.Getpid()) if err != nil { @@ -23,8 +25,10 @@ func init() { }, }) proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "find", - Perm: "cmd_find", + Name: "find", + Perm: "cmd_find", + Help: "Check whether a player is connected and report their upstream server if they are.", + Usage: "find <name>", Handler: func(cc *proxy.ClientConn, args ...string) string { if len(args) != 1 { return "Usage: find <name>" @@ -39,8 +43,10 @@ func init() { }, }) proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "addr", - Perm: "cmd_addr", + Name: "addr", + Perm: "cmd_addr", + Help: "Find the network address of a player if they're connected.", + Usage: "addr <name>", Handler: func(cc *proxy.ClientConn, args ...string) string { if len(args) != 1 { return "Usage: addr <name>" @@ -55,14 +61,18 @@ func init() { }, }) proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "alert", - Perm: "cmd_alert", + Name: "alert", + Perm: "cmd_alert", + Help: "Send a message to all connected clients regardless of their upstream server.", + Usage: "alert <message>", Handler: func(cc *proxy.ClientConn, args ...string) string { if len(args) <= 0 { return "Usage: alert <message>" } - msg := strings.Join(args, " ") + msg := "[ALERT] " + msg += strings.Join(args, " ") + for clt := range proxy.Clts() { clt.SendChatMsg(msg) } @@ -71,8 +81,10 @@ func init() { }, }) proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "send", - Perm: "cmd_send", + Name: "send", + Perm: "cmd_send", + Help: "Send player(s) to a new server. player causes a single player to be redirected, current affects all players that are on your current server and all affects everyone.", + Usage: "send <player <server> <name> | current <server> | all <server>>", Handler: func(cc *proxy.ClientConn, args ...string) string { if len(args) < 2 { return "Usage: send <player <server> <name> | current <server> | all <server>>" @@ -144,10 +156,16 @@ func init() { }, }) proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "players", - Perm: "cmd_players", + Name: "players", + Perm: "cmd_players", + Help: "Show the player list of every server.", + Usage: "players", Handler: func(cc *proxy.ClientConn, args ...string) string { srvs := make(map[string][]*proxy.ClientConn) + for _, srv := range proxy.Conf().Servers { + srvs[srv.Name] = []*proxy.ClientConn{} + } + for clt := range proxy.Clts() { srv := clt.ServerName() srvs[srv] = append(srvs[srv], clt) @@ -165,8 +183,10 @@ func init() { }, }) proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "reload", - Perm: "cmd_reload", + Name: "reload", + Perm: "cmd_reload", + Help: "Reload the configuration file. You should restart the proxy instead if possible.", + Usage: "reload", Handler: func(cc *proxy.ClientConn, args ...string) string { if err := proxy.LoadConfig(); err != nil { return "Configuration could not be reloaded. Old config is still active. Error: " + err.Error() @@ -176,15 +196,19 @@ func init() { }, }) proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "perms", - Perm: "cmd_perms", + Name: "perms", + Perm: "cmd_perms", + Help: "Show the permissions of a player. Show your permissions if no player name is specified.", + Usage: "perms [name]", Handler: func(cc *proxy.ClientConn, args ...string) string { return "Your permissions: " + strings.Join(cc.Perms(), ", ") }, }) proxy.RegisterChatCmd(proxy.ChatCmd{ - Name: "server", - Perm: "cmd_server", + Name: "server", + Perm: "cmd_server", + Help: "Display your current upstream server and all other configured servers. If a valid server name is specified, switch to that server.", + Usage: "server [server]", Handler: func(cc *proxy.ClientConn, args ...string) string { if len(args) == 0 { srvs := make([]string, len(proxy.Conf().Servers)) @@ -207,4 +231,73 @@ func init() { return "" }, }) + + proxy.RegisterChatCmd(proxy.ChatCmd{ + Name: "help", + Perm: "cmd_help", + Help: "Show help for a command (all commands if unspecified).", + Usage: "help [command]", + Handler: func(cc *proxy.ClientConn, args ...string) string { + cmds := proxy.ChatCmds() + + help := func(name string) string { + str := proxy.Colorize(name+": ", "#6FF") + str += cmds[name].Help + + return str + } + + if len(args) != 1 { + if len(args) > 1 { + return "Usage: help [command]" + } + + for cmd := range cmds { + cc.SendChatMsg(help(cmd)) + } + } else { + if _, ok := cmds[args[0]]; !ok { + return "Inexistent command." + } + + return help(args[0]) + } + + return "" + }, + }) + proxy.RegisterChatCmd(proxy.ChatCmd{ + Name: "usage", + Perm: "cmd_usage", + Help: "Show the usage string of a command (all commands if unspecified).", + Usage: "usage [command]", + Handler: func(cc *proxy.ClientConn, args ...string) string { + cmds := proxy.ChatCmds() + + usage := func(name string) string { + str := proxy.Colorize(name+": ", "#6F3") + str += cmds[name].Usage + + return str + } + + if len(args) != 1 { + if len(args) > 1 { + return "Usage: usage [command]" + } + + for cmd := range cmds { + cc.SendChatMsg(usage(cmd)) + } + } else { + if _, ok := cmds[args[0]]; !ok { + return "Inexistent command." + } + + return usage(args[0]) + } + + return "" + }, + }) } @@ -2,10 +2,10 @@ module github.com/HimbeerserverDE/mt-multiserver-chatcommands go 1.17 -require github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210909190608-30ba9fb975f4 +require github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210910092542-04d33fd100b6 require ( github.com/HimbeerserverDE/srp v0.0.0-20210331172529-2b5dbec6b82b // indirect - github.com/anon55555/mt v0.0.0-20210623155243-152b6697e62c // indirect + github.com/anon55555/mt v0.0.0-20210909184202-d6ba88b091f6 // indirect github.com/mattn/go-sqlite3 v1.14.8 // indirect ) @@ -22,9 +22,15 @@ github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210909185315-5067bf9440 github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210909185315-5067bf94403c/go.mod h1:8xnFy8wsJTDIUkMExnTq5fdiUNbnL6udwytjRM6woDw= github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210909190608-30ba9fb975f4 h1:Snh7nClp3v8Q/NnfDW96BPEt/RDWIq15w8yXPecsu0g= github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210909190608-30ba9fb975f4/go.mod h1:8xnFy8wsJTDIUkMExnTq5fdiUNbnL6udwytjRM6woDw= +github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210910085031-1c5a72c3ef28 h1:WNkWZShOYp5tb1FfL7VxwjcOfGQJu4/9yF2vzHtRnwI= +github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210910085031-1c5a72c3ef28/go.mod h1:ZzKonpQA3kCRaL9oXnASb1EL3c4kKmqiN2I7WHtDA3Q= +github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210910092542-04d33fd100b6 h1:yh+5rQGP/Nt6DDBVfqKUTCNCDoYq+ffRfha1Z5MA7YA= +github.com/HimbeerserverDE/mt-multiserver-proxy v0.0.0-20210910092542-04d33fd100b6/go.mod h1:ZzKonpQA3kCRaL9oXnASb1EL3c4kKmqiN2I7WHtDA3Q= github.com/HimbeerserverDE/srp v0.0.0-20210331172529-2b5dbec6b82b h1:xqNC1S76U5U+eFyzr5Ld+8aPOLaDFCw6f1uddjui+h8= github.com/HimbeerserverDE/srp v0.0.0-20210331172529-2b5dbec6b82b/go.mod h1:pxNH8S2nh4n2DWE0ToX5GnnDr/uEAuaAhJsCpkDLIWw= github.com/anon55555/mt v0.0.0-20210623155243-152b6697e62c h1:+T4M4zm8QMMnH56jopsKcCBxItSsb6jtulB3ZKFYETU= github.com/anon55555/mt v0.0.0-20210623155243-152b6697e62c/go.mod h1:jH4ER+ahjl7H6TczzK+q4V9sXY++U2Geh6/vt3r4Xvs= +github.com/anon55555/mt v0.0.0-20210909184202-d6ba88b091f6 h1:JcKyABhWe6hGGA4IUqoCidNiKT1CCT6Sgp4D0VY7ako= +github.com/anon55555/mt v0.0.0-20210909184202-d6ba88b091f6/go.mod h1:jH4ER+ahjl7H6TczzK+q4V9sXY++U2Geh6/vt3r4Xvs= github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU= github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= |