summaryrefslogtreecommitdiff
path: root/server/commands.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/commands.go')
-rw-r--r--server/commands.go59
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",