UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

95 lines (88 loc) 9.27 kB
'use strict'; 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=