diff options
Diffstat (limited to 'server/commands.go')
| -rw-r--r-- | server/commands.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/server/commands.go b/server/commands.go index 4e544ce..804be0d 100644 --- a/server/commands.go +++ b/server/commands.go @@ -1,6 +1,7 @@ package server import ( + "io" "fmt" "sort" "strconv" @@ -195,6 +196,50 @@ var commands = map[string]commandHandler { } return "" }, + "kick": func(ctx commandCtx) string { + name, ok := ctx.arg.nextArg() + if !ok { + return usage("kick") + } + arg, _ := io.ReadAll(ctx.arg.rd) + reason := strings.TrimSpace(string(arg)) + if reason != "" { + reason = "Kicked: " + reason + } + if ctx.server.kick(name, string(reason)) { + ctx.sender.OnCommandOutput(ctx.server, + fmt.Sprintf("Kicked %s.", name), + ) + } else { + return "Unknown player: " + name + } + return "" + }, + "ban": func(ctx commandCtx) string { + name, ok := ctx.arg.nextArg() + if !ok { + return usage("ban") + } + arg, _ := io.ReadAll(ctx.arg.rd) + reason := strings.TrimSpace(string(arg)) + if reason != "" { + reason = "Banned: " + reason + } + ctx.server.ban(name, string(reason)) + ctx.sender.OnCommandOutput(ctx.server, fmt.Sprintf("Banned %s.", name)) + return "" + }, + "unban": func(ctx commandCtx) string { + name, ok := ctx.arg.nextArg() + if !ok { + return usage("unban") + } + ctx.server.unban(name) + ctx.sender.OnCommandOutput(ctx.server, + fmt.Sprintf("Unbanned %s.", name), + ) + return "" + }, "op": func(ctx commandCtx) string { name, ok := ctx.arg.nextArg() if !ok { @@ -267,6 +312,8 @@ var commands = map[string]commandHandler { var commandAuth = map[string]authLevel { "tp": cheatAuth, + "kick": moderateAuth, + "ban": moderateAuth, "createLevel": opAuth, "op": opAuth, "deop": opAuth, @@ -291,6 +338,18 @@ var help = map[string][]string { "* --gen: Level generation type (flat, empty)", "* --size: Level dimensions", }, + "kick": []string { + "/kick <player> [reason]", + "Disconnect a player from the server", + }, + "ban": []string { + "/ban <player> [reason]", + "Ban a player from joining the server", + }, + "unban": []string { + "/unban <player> [reason]", + "Unban a player from joining the server", + }, "op": []string { "/op <player>", "Grant operator status", |
