@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
95 lines (88 loc) • 9.27 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const fs = require('node:fs');
const confbox = require('confbox');
const utils_cwd = require('../utils/cwd.cjs.cjs');
const _interopDefault = e => e && e.__esModule ? e : { default: e };
const fs__default = /*#__PURE__*/_interopDefault(fs);
const FILE_NAME = "banned-players.json";
class BanManager {
server;
banned = /* @__PURE__ */ new Map();
constructor(server) {
this.server = server;
}
/**
* On enable hook.
* @group Lifecycle
*/
async enable() {
await this.parseBanned();
}
/**
* On disable hook.
* @group Lifecycle
*/
async disable() {
this.banned.clear();
}
async parseBanned() {
try {
const dir = utils_cwd.withCwd(FILE_NAME);
if (!fs__default.default.existsSync(dir)) {
this.server.getLogger().warn(`Failed to load ban list!`);
fs__default.default.writeFileSync(dir, "[]");
}
const banned = confbox.parseJSON5((await fs__default.default.promises.readFile(dir)).toString());
for (const player of banned) this.banned.set(player.name, player);
} catch (error) {
this.server.getLogger().error(error);
}
}
async setBanned(username, reason = "") {
this.banned.set(username, {
reason
});
await fs__default.default.promises.writeFile(
// FIXME: This overwrites comments in the file.
utils_cwd.withCwd(FILE_NAME),
JSON.stringify(
Array.from(this.banned).map((entry) => ({
name: entry[0],
reason: entry[1].reason
})),
null,
4
)
);
return true;
}
async setUnbanned(username) {
this.banned.delete(username);
await fs__default.default.promises.writeFile(
// FIXME: This overwrites comments in the file.
utils_cwd.withCwd(FILE_NAME),
JSON.stringify(
Array.from(this.banned).map((entry) => ({
name: entry[0],
reason: entry[1].reason
})),
null,
4
)
);
}
/**
* Check if player is banned.
* @param {Player} player - Player to check.
* @returns {string | boolean} Reason if banned, false if not banned.
*/
isBanned(player) {
if (this.banned.has(player.getName())) {
return this.banned.get(player.getName())?.reason || true;
}
return false;
}
}
exports.default = BanManager;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFuTWFuYWdlci5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFuL0Jhbk1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQgeyBwYXJzZUpTT041IH0gZnJvbSAnY29uZmJveCc7XG5pbXBvcnQgdHlwZSBQbGF5ZXIgZnJvbSAnLi4vUGxheWVyJztcbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi9TZXJ2ZXInO1xuaW1wb3J0IHsgd2l0aEN3ZCB9IGZyb20gJy4uL3V0aWxzL2N3ZCc7XG5cbmV4cG9ydCB0eXBlIEJhbm5lZFBsYXllckVudHJ5ID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICByZWFzb246IHN0cmluZyB8ICcnO1xufTtcblxuY29uc3QgRklMRV9OQU1FID0gJ2Jhbm5lZC1wbGF5ZXJzLmpzb24nO1xuXG4vKipcbiAqIEJhbiBtYW5hZ2VyLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYW5NYW5hZ2VyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlcnZlcjogU2VydmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFubmVkOiBNYXA8c3RyaW5nLCBPbWl0PEJhbm5lZFBsYXllckVudHJ5LCAnbmFtZSc+PiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzZXJ2ZXI6IFNlcnZlcikge1xuICAgICAgICB0aGlzLnNlcnZlciA9IHNlcnZlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBlbmFibGUgaG9vay5cbiAgICAgKiBAZ3JvdXAgTGlmZWN5Y2xlXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGVuYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJzZUJhbm5lZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGRpc2FibGUgaG9vay5cbiAgICAgKiBAZ3JvdXAgTGlmZWN5Y2xlXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGRpc2FibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYmFubmVkLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwYXJzZUJhbm5lZCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IHdpdGhDd2QoRklMRV9OQU1FKTtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkud2FybihgRmFpbGVkIHRvIGxvYWQgYmFuIGxpc3QhYCk7XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhkaXIsICdbXScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiYW5uZWQ6IEJhbm5lZFBsYXllckVudHJ5W10gPSBwYXJzZUpTT041KChhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShkaXIpKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGxheWVyIG9mIGJhbm5lZCkgdGhpcy5iYW5uZWQuc2V0KHBsYXllci5uYW1lLCBwbGF5ZXIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldEJhbm5lZCh1c2VybmFtZTogc3RyaW5nLCByZWFzb24gPSAnJykge1xuICAgICAgICB0aGlzLmJhbm5lZC5zZXQodXNlcm5hbWUsIHtcbiAgICAgICAgICAgIHJlYXNvblxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoXG4gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBvdmVyd3JpdGVzIGNvbW1lbnRzIGluIHRoZSBmaWxlLlxuICAgICAgICAgICAgd2l0aEN3ZChGSUxFX05BTUUpLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmJhbm5lZCkubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZW50cnlbMF0sXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogZW50cnlbMV0ucmVhc29uXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0VW5iYW5uZWQodXNlcm5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmJhbm5lZC5kZWxldGUodXNlcm5hbWUpO1xuXG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShcbiAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG92ZXJ3cml0ZXMgY29tbWVudHMgaW4gdGhlIGZpbGUuXG4gICAgICAgICAgICB3aXRoQ3dkKEZJTEVfTkFNRSksXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuYmFubmVkKS5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeVswXSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBlbnRyeVsxXS5yZWFzb25cbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgcGxheWVyIGlzIGJhbm5lZC5cbiAgICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyIC0gUGxheWVyIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCBib29sZWFufSBSZWFzb24gaWYgYmFubmVkLCBmYWxzZSBpZiBub3QgYmFubmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0Jhbm5lZChwbGF5ZXI6IFBsYXllcik6IHN0cmluZyB8IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5iYW5uZWQuaGFzKHBsYXllci5nZXROYW1lKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYW5uZWQuZ2V0KHBsYXllci5nZXROYW1lKCkpPy5yZWFzb24gfHwgdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsid2l0aEN3ZCIsImZzIiwicGFyc2VKU09ONSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBWUEsTUFBTSxTQUFZLEdBQUEscUJBQUE7QUFLbEIsTUFBcUIsVUFBVyxDQUFBO0FBQUEsRUFDWCxNQUFBO0FBQUEsRUFDQSxNQUFBLHVCQUEyRCxHQUFJLEVBQUE7QUFBQSxFQUV6RSxZQUFZLE1BQWdCLEVBQUE7QUFDL0IsSUFBQSxJQUFBLENBQUssTUFBUyxHQUFBLE1BQUE7QUFBQTtBQUNsQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsTUFBYSxNQUF3QixHQUFBO0FBQ2pDLElBQUEsTUFBTSxLQUFLLFdBQVksRUFBQTtBQUFBO0FBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxNQUFhLE9BQXlCLEdBQUE7QUFDbEMsSUFBQSxJQUFBLENBQUssT0FBTyxLQUFNLEVBQUE7QUFBQTtBQUN0QixFQUVBLE1BQWMsV0FBYyxHQUFBO0FBQ3hCLElBQUksSUFBQTtBQUNBLE1BQU0sTUFBQSxHQUFBLEdBQU1BLGtCQUFRLFNBQVMsQ0FBQTtBQUM3QixNQUFBLElBQUksQ0FBQ0MsbUJBQUEsQ0FBRyxVQUFXLENBQUEsR0FBRyxDQUFHLEVBQUE7QUFDckIsUUFBQSxJQUFBLENBQUssTUFBTyxDQUFBLFNBQUEsRUFBWSxDQUFBLElBQUEsQ0FBSyxDQUEwQix3QkFBQSxDQUFBLENBQUE7QUFDdkQsUUFBR0EsbUJBQUEsQ0FBQSxhQUFBLENBQWMsS0FBSyxJQUFJLENBQUE7QUFBQTtBQUc5QixNQUFNLE1BQUEsTUFBQSxHQUE4QkMsb0JBQVksTUFBTUQsbUJBQUEsQ0FBRyxTQUFTLFFBQVMsQ0FBQSxHQUFHLENBQUcsRUFBQSxRQUFBLEVBQVUsQ0FBQTtBQUMzRixNQUFBLEtBQUEsTUFBVyxVQUFVLE1BQVEsRUFBQSxJQUFBLENBQUssT0FBTyxHQUFJLENBQUEsTUFBQSxDQUFPLE1BQU0sTUFBTSxDQUFBO0FBQUEsYUFDM0QsS0FBZ0IsRUFBQTtBQUNyQixNQUFBLElBQUEsQ0FBSyxNQUFPLENBQUEsU0FBQSxFQUFZLENBQUEsS0FBQSxDQUFNLEtBQUssQ0FBQTtBQUFBO0FBQ3ZDO0FBQ0osRUFFQSxNQUFhLFNBQUEsQ0FBVSxRQUFrQixFQUFBLE1BQUEsR0FBUyxFQUFJLEVBQUE7QUFDbEQsSUFBSyxJQUFBLENBQUEsTUFBQSxDQUFPLElBQUksUUFBVSxFQUFBO0FBQUEsTUFDdEI7QUFBQSxLQUNILENBQUE7QUFFRCxJQUFBLE1BQU1BLG9CQUFHLFFBQVMsQ0FBQSxTQUFBO0FBQUE7QUFBQSxNQUVkRCxrQkFBUSxTQUFTLENBQUE7QUFBQSxNQUNqQixJQUFLLENBQUEsU0FBQTtBQUFBLFFBQ0QsTUFBTSxJQUFLLENBQUEsSUFBQSxDQUFLLE1BQU0sQ0FBRSxDQUFBLEdBQUEsQ0FBSSxDQUFDLEtBQVcsTUFBQTtBQUFBLFVBQ3BDLElBQUEsRUFBTSxNQUFNLENBQUMsQ0FBQTtBQUFBLFVBQ2IsTUFBQSxFQUFRLEtBQU0sQ0FBQSxDQUFDLENBQUUsQ0FBQTtBQUFBLFNBQ25CLENBQUEsQ0FBQTtBQUFBLFFBQ0YsSUFBQTtBQUFBLFFBQ0E7QUFBQTtBQUNKLEtBQ0o7QUFDQSxJQUFPLE9BQUEsSUFBQTtBQUFBO0FBQ1gsRUFFQSxNQUFhLFlBQVksUUFBa0IsRUFBQTtBQUN2QyxJQUFLLElBQUEsQ0FBQSxNQUFBLENBQU8sT0FBTyxRQUFRLENBQUE7QUFFM0IsSUFBQSxNQUFNQyxvQkFBRyxRQUFTLENBQUEsU0FBQTtBQUFBO0FBQUEsTUFFZEQsa0JBQVEsU0FBUyxDQUFBO0FBQUEsTUFDakIsSUFBSyxDQUFBLFNBQUE7QUFBQSxRQUNELE1BQU0sSUFBSyxDQUFBLElBQUEsQ0FBSyxNQUFNLENBQUUsQ0FBQSxHQUFBLENBQUksQ0FBQyxLQUFXLE1BQUE7QUFBQSxVQUNwQyxJQUFBLEVBQU0sTUFBTSxDQUFDLENBQUE7QUFBQSxVQUNiLE1BQUEsRUFBUSxLQUFNLENBQUEsQ0FBQyxDQUFFLENBQUE7QUFBQSxTQUNuQixDQUFBLENBQUE7QUFBQSxRQUNGLElBQUE7QUFBQSxRQUNBO0FBQUE7QUFDSixLQUNKO0FBQUE7QUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxTQUFTLE1BQWtDLEVBQUE7QUFDOUMsSUFBQSxJQUFJLEtBQUssTUFBTyxDQUFBLEdBQUEsQ0FBSSxNQUFPLENBQUEsT0FBQSxFQUFTLENBQUcsRUFBQTtBQUNuQyxNQUFBLE9BQU8sS0FBSyxNQUFPLENBQUEsR0FBQSxDQUFJLE9BQU8sT0FBUSxFQUFDLEdBQUcsTUFBVSxJQUFBLElBQUE7QUFBQTtBQUd4RCxJQUFPLE9BQUEsS0FBQTtBQUFBO0FBRWY7Ozs7In0=