@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
55 lines (51 loc) • 8.77 kB
JavaScript
import { literal, argument, greedyString } from '@jsprismarine/brigadier';
import { Command } from '../Command.es.js';
import { PlayerArgumentCommand } from '../CommandArguments.es.js';
class BanCommand extends Command {
constructor() {
super({
id: "minecraft:ban",
description: "Ban a player.",
permission: "minecraft.command.ban"
});
}
async register(dispatcher) {
dispatcher.register(
literal("ban").then(
argument("player", new PlayerArgumentCommand({ name: "player" })).then(
argument("reason", greedyString()).executes(async (context) => {
const source = context.getSource();
const reason = context.getArgument("reason");
const target = context.getArgument("player");
const player = source.getServer().getSessionManager().getAllPlayers().find((p) => p.getName() === target);
if (player) {
try {
await player.kick(`You have been banned from the server due to:
${reason}!`);
} catch (error) {
source.getServer().getLogger().error(error);
}
}
await source.getServer().getBanManager().setBanned(target, reason);
return `Banned ${player ? player.getFormattedUsername() : target} due to: ${reason}!`;
})
).executes(async (context) => {
const source = context.getSource();
const target = context.getArgument("player");
const player = source.getServer().getSessionManager().getAllPlayers().find((p) => p.getName() === target);
if (player) {
try {
await player.kick(`You have been banned!`);
} catch (error) {
source.getServer().getLogger().error(error);
}
}
await source.getServer().getBanManager().setBanned(target);
return `Banned ${player ? player.getFormattedUsername() : target}`;
})
)
);
}
}
export { BanCommand as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFuQ29tbWFuZC5lcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmQvdmFuaWxsYS9CYW5Db21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZERpc3BhdGNoZXIgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JyaWdhZGllcic7XG5pbXBvcnQgeyBhcmd1bWVudCwgZ3JlZWR5U3RyaW5nLCBsaXRlcmFsIH0gZnJvbSAnQGpzcHJpc21hcmluZS9icmlnYWRpZXInO1xuXG5pbXBvcnQgdHlwZSBQbGF5ZXIgZnJvbSAnLi4vLi4vUGxheWVyJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9Db21tYW5kJztcbmltcG9ydCB7IFBsYXllckFyZ3VtZW50Q29tbWFuZCB9IGZyb20gJy4uL0NvbW1hbmRBcmd1bWVudHMnO1xuXG4vKipcbiAqIEJhbiBhIHBsYXllci5cbiAqIEByZW1hcmtzIHRoZSBgL2JhbmAgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFuQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgaWQ6ICdtaW5lY3JhZnQ6YmFuJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQmFuIGEgcGxheWVyLicsXG4gICAgICAgICAgICBwZXJtaXNzaW9uOiAnbWluZWNyYWZ0LmNvbW1hbmQuYmFuJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIoZGlzcGF0Y2hlcjogQ29tbWFuZERpc3BhdGNoZXI8YW55Pikge1xuICAgICAgICBkaXNwYXRjaGVyLnJlZ2lzdGVyKFxuICAgICAgICAgICAgbGl0ZXJhbCgnYmFuJykudGhlbihcbiAgICAgICAgICAgICAgICBhcmd1bWVudCgncGxheWVyJywgbmV3IFBsYXllckFyZ3VtZW50Q29tbWFuZCh7IG5hbWU6ICdwbGF5ZXInIH0pKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50KCdyZWFzb24nLCBncmVlZHlTdHJpbmcoKSkuZXhlY3V0ZXMoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZSgpIGFzIFBsYXllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFzb24gPSBjb250ZXh0LmdldEFyZ3VtZW50KCdyZWFzb24nKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gY29udGV4dC5nZXRBcmd1bWVudCgncGxheWVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxheWVyID0gc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2ZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2Vzc2lvbk1hbmFnZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QWxsUGxheWVycygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKChwKSA9PiBwLmdldE5hbWUoKSA9PT0gdGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBsYXllci5raWNrKGBZb3UgaGF2ZSBiZWVuIGJhbm5lZCBmcm9tIHRoZSBzZXJ2ZXIgZHVlIHRvOiBcXG5cXG4ke3JlYXNvbn0hYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5nZXRTZXJ2ZXIoKS5nZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2UuZ2V0U2VydmVyKCkuZ2V0QmFuTWFuYWdlcigpLnNldEJhbm5lZCh0YXJnZXQsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBCYW5uZWQgJHtwbGF5ZXIgPyBwbGF5ZXIuZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKSA6IHRhcmdldH0gZHVlIHRvOiAke3JlYXNvbn0hYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmV4ZWN1dGVzKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZSgpIGFzIFBsYXllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3BsYXllcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxheWVyID0gc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFNlcnZlcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFNlc3Npb25NYW5hZ2VyKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QWxsUGxheWVycygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKHApID0+IHAuZ2V0TmFtZSgpID09PSB0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGxheWVyLmtpY2soYFlvdSBoYXZlIGJlZW4gYmFubmVkIWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmdldFNlcnZlcigpLmdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNvdXJjZS5nZXRTZXJ2ZXIoKS5nZXRCYW5NYW5hZ2VyKCkuc2V0QmFubmVkKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEJhbm5lZCAke3BsYXllciA/IHBsYXllci5nZXRGb3JtYXR0ZWRVc2VybmFtZSgpIDogdGFyZ2V0fWA7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFXQSxNQUFxQixtQkFBbUIsT0FBUSxDQUFBO0FBQUEsRUFDckMsV0FBYyxHQUFBO0FBQ2pCLElBQU0sS0FBQSxDQUFBO0FBQUEsTUFDRixFQUFJLEVBQUEsZUFBQTtBQUFBLE1BQ0osV0FBYSxFQUFBLGVBQUE7QUFBQSxNQUNiLFVBQVksRUFBQTtBQUFBLEtBQ2YsQ0FBQTtBQUFBO0FBQ0wsRUFFQSxNQUFhLFNBQVMsVUFBb0MsRUFBQTtBQUN0RCxJQUFXLFVBQUEsQ0FBQSxRQUFBO0FBQUEsTUFDUCxPQUFBLENBQVEsS0FBSyxDQUFFLENBQUEsSUFBQTtBQUFBLFFBQ1gsUUFBQSxDQUFTLFVBQVUsSUFBSSxxQkFBQSxDQUFzQixFQUFFLElBQU0sRUFBQSxRQUFBLEVBQVUsQ0FBQyxDQUMzRCxDQUFBLElBQUE7QUFBQSxVQUNHLFNBQVMsUUFBVSxFQUFBLFlBQUEsRUFBYyxDQUFFLENBQUEsUUFBQSxDQUFTLE9BQU8sT0FBWSxLQUFBO0FBQzNELFlBQU0sTUFBQSxNQUFBLEdBQVMsUUFBUSxTQUFVLEVBQUE7QUFDakMsWUFBTSxNQUFBLE1BQUEsR0FBUyxPQUFRLENBQUEsV0FBQSxDQUFZLFFBQVEsQ0FBQTtBQUMzQyxZQUFNLE1BQUEsTUFBQSxHQUFTLE9BQVEsQ0FBQSxXQUFBLENBQVksUUFBUSxDQUFBO0FBQzNDLFlBQUEsTUFBTSxNQUFTLEdBQUEsTUFBQSxDQUNWLFNBQVUsRUFBQSxDQUNWLG1CQUNBLENBQUEsYUFBQSxFQUNBLENBQUEsSUFBQSxDQUFLLENBQUMsQ0FBQSxLQUFNLENBQUUsQ0FBQSxPQUFBLE9BQWMsTUFBTSxDQUFBO0FBRXZDLFlBQUEsSUFBSSxNQUFRLEVBQUE7QUFDUixjQUFJLElBQUE7QUFDQSxnQkFBQSxNQUFNLE9BQU8sSUFBSyxDQUFBLENBQUE7O0FBQUEsRUFBb0QsTUFBTSxDQUFHLENBQUEsQ0FBQSxDQUFBO0FBQUEsdUJBQzFFLEtBQVksRUFBQTtBQUNqQixnQkFBQSxNQUFBLENBQU8sU0FBVSxFQUFBLENBQUUsU0FBVSxFQUFBLENBQUUsTUFBTSxLQUFLLENBQUE7QUFBQTtBQUM5QztBQUdKLFlBQUEsTUFBTSxPQUFPLFNBQVUsRUFBQSxDQUFFLGVBQWdCLENBQUEsU0FBQSxDQUFVLFFBQVEsTUFBTSxDQUFBO0FBQ2pFLFlBQUEsT0FBTyxVQUFVLE1BQVMsR0FBQSxNQUFBLENBQU8sc0JBQXlCLEdBQUEsTUFBTSxZQUFZLE1BQU0sQ0FBQSxDQUFBLENBQUE7QUFBQSxXQUNyRjtBQUFBLFNBQ0wsQ0FDQyxRQUFTLENBQUEsT0FBTyxPQUFZLEtBQUE7QUFDekIsVUFBTSxNQUFBLE1BQUEsR0FBUyxRQUFRLFNBQVUsRUFBQTtBQUNqQyxVQUFNLE1BQUEsTUFBQSxHQUFTLE9BQVEsQ0FBQSxXQUFBLENBQVksUUFBUSxDQUFBO0FBQzNDLFVBQUEsTUFBTSxNQUFTLEdBQUEsTUFBQSxDQUNWLFNBQVUsRUFBQSxDQUNWLG1CQUNBLENBQUEsYUFBQSxFQUNBLENBQUEsSUFBQSxDQUFLLENBQUMsQ0FBQSxLQUFNLENBQUUsQ0FBQSxPQUFBLE9BQWMsTUFBTSxDQUFBO0FBRXZDLFVBQUEsSUFBSSxNQUFRLEVBQUE7QUFDUixZQUFJLElBQUE7QUFDQSxjQUFNLE1BQUEsTUFBQSxDQUFPLEtBQUssQ0FBdUIscUJBQUEsQ0FBQSxDQUFBO0FBQUEscUJBQ3BDLEtBQVksRUFBQTtBQUNqQixjQUFBLE1BQUEsQ0FBTyxTQUFVLEVBQUEsQ0FBRSxTQUFVLEVBQUEsQ0FBRSxNQUFNLEtBQUssQ0FBQTtBQUFBO0FBQzlDO0FBR0osVUFBQSxNQUFNLE9BQU8sU0FBVSxFQUFBLENBQUUsYUFBYyxFQUFBLENBQUUsVUFBVSxNQUFNLENBQUE7QUFDekQsVUFBQSxPQUFPLENBQVUsT0FBQSxFQUFBLE1BQUEsR0FBUyxNQUFPLENBQUEsb0JBQUEsS0FBeUIsTUFBTSxDQUFBLENBQUE7QUFBQSxTQUNuRTtBQUFBO0FBQ1QsS0FDSjtBQUFBO0FBRVI7Ozs7In0=