UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

70 lines (69 loc) 7.4 kB
import { withCwd } from "../utils/cwd.es.js"; import fs from "node:fs"; import { parseJSON5 } from "confbox"; //#region src/ban/BanManager.ts var FILE_NAME = "banned-players.json"; /** * Ban manager. */ var BanManager = class { 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 = withCwd(FILE_NAME); if (!fs.existsSync(dir)) { this.server.getLogger().warn(`Failed to load ban list!`); fs.writeFileSync(dir, "[]"); } const banned = parseJSON5((await fs.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.promises.writeFile(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.promises.writeFile(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; } }; //#endregion export { BanManager as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFuTWFuYWdlci5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFuL0Jhbk1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQgeyBwYXJzZUpTT041IH0gZnJvbSAnY29uZmJveCc7XG5pbXBvcnQgdHlwZSBQbGF5ZXIgZnJvbSAnLi4vUGxheWVyJztcbmltcG9ydCB0eXBlIFNlcnZlciBmcm9tICcuLi9TZXJ2ZXInO1xuaW1wb3J0IHsgd2l0aEN3ZCB9IGZyb20gJy4uL3V0aWxzL2N3ZCc7XG5cbmV4cG9ydCB0eXBlIEJhbm5lZFBsYXllckVudHJ5ID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICByZWFzb246IHN0cmluZyB8ICcnO1xufTtcblxuY29uc3QgRklMRV9OQU1FID0gJ2Jhbm5lZC1wbGF5ZXJzLmpzb24nO1xuXG4vKipcbiAqIEJhbiBtYW5hZ2VyLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYW5NYW5hZ2VyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlcnZlcjogU2VydmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFubmVkOiBNYXA8c3RyaW5nLCBPbWl0PEJhbm5lZFBsYXllckVudHJ5LCAnbmFtZSc+PiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzZXJ2ZXI6IFNlcnZlcikge1xuICAgICAgICB0aGlzLnNlcnZlciA9IHNlcnZlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBlbmFibGUgaG9vay5cbiAgICAgKiBAZ3JvdXAgTGlmZWN5Y2xlXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGVuYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJzZUJhbm5lZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGRpc2FibGUgaG9vay5cbiAgICAgKiBAZ3JvdXAgTGlmZWN5Y2xlXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGRpc2FibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYmFubmVkLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwYXJzZUJhbm5lZCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IHdpdGhDd2QoRklMRV9OQU1FKTtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkud2FybihgRmFpbGVkIHRvIGxvYWQgYmFuIGxpc3QhYCk7XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhkaXIsICdbXScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiYW5uZWQ6IEJhbm5lZFBsYXllckVudHJ5W10gPSBwYXJzZUpTT041KChhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShkaXIpKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGxheWVyIG9mIGJhbm5lZCkgdGhpcy5iYW5uZWQuc2V0KHBsYXllci5uYW1lLCBwbGF5ZXIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXIuZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldEJhbm5lZCh1c2VybmFtZTogc3RyaW5nLCByZWFzb24gPSAnJykge1xuICAgICAgICB0aGlzLmJhbm5lZC5zZXQodXNlcm5hbWUsIHtcbiAgICAgICAgICAgIHJlYXNvblxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoXG4gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBvdmVyd3JpdGVzIGNvbW1lbnRzIGluIHRoZSBmaWxlLlxuICAgICAgICAgICAgd2l0aEN3ZChGSUxFX05BTUUpLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmJhbm5lZCkubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZW50cnlbMF0sXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogZW50cnlbMV0ucmVhc29uXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0VW5iYW5uZWQodXNlcm5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmJhbm5lZC5kZWxldGUodXNlcm5hbWUpO1xuXG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShcbiAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG92ZXJ3cml0ZXMgY29tbWVudHMgaW4gdGhlIGZpbGUuXG4gICAgICAgICAgICB3aXRoQ3dkKEZJTEVfTkFNRSksXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuYmFubmVkKS5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeVswXSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBlbnRyeVsxXS5yZWFzb25cbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgcGxheWVyIGlzIGJhbm5lZC5cbiAgICAgKiBAcGFyYW0ge1BsYXllcn0gcGxheWVyIC0gUGxheWVyIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCBib29sZWFufSBSZWFzb24gaWYgYmFubmVkLCBmYWxzZSBpZiBub3QgYmFubmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0Jhbm5lZChwbGF5ZXI6IFBsYXllcik6IHN0cmluZyB8IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5iYW5uZWQuaGFzKHBsYXllci5nZXROYW1lKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYW5uZWQuZ2V0KHBsYXllci5nZXROYW1lKCkpPy5yZWFzb24gfHwgdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFZQSxJQUFNLFlBQVk7Ozs7QUFLbEIsSUFBcUIsYUFBckIsTUFBZ0M7Q0FDNUI7Q0FDQSx5QkFBd0UsSUFBSSxJQUFJO0NBRWhGLFlBQW1CLFFBQWdCO0VBQy9CLEtBQUssU0FBUztDQUNsQjs7Ozs7Q0FNQSxNQUFhLFNBQXdCO0VBQ2pDLE1BQU0sS0FBSyxZQUFZO0NBQzNCOzs7OztDQU1BLE1BQWEsVUFBeUI7RUFDbEMsS0FBSyxPQUFPLE1BQU07Q0FDdEI7Q0FFQSxNQUFjLGNBQWM7RUFDeEIsSUFBSTtHQUNBLE1BQU0sTUFBTSxRQUFRLFNBQVM7R0FDN0IsSUFBSSxDQUFDLEdBQUcsV0FBVyxHQUFHLEdBQUc7SUFDckIsS0FBSyxPQUFPLFVBQVUsRUFBRSxLQUFLLDBCQUEwQjtJQUN2RCxHQUFHLGNBQWMsS0FBSyxJQUFJO0dBQzlCO0dBRUEsTUFBTSxTQUE4QixZQUFZLE1BQU0sR0FBRyxTQUFTLFNBQVMsR0FBRyxHQUFHLFNBQVMsQ0FBQztHQUMzRixLQUFLLE1BQU0sVUFBVSxRQUFRLEtBQUssT0FBTyxJQUFJLE9BQU8sTUFBTSxNQUFNO0VBQ3BFLFNBQVMsT0FBZ0I7R0FDckIsS0FBSyxPQUFPLFVBQVUsRUFBRSxNQUFNLEtBQUs7RUFDdkM7Q0FDSjtDQUVBLE1BQWEsVUFBVSxVQUFrQixTQUFTLElBQUk7RUFDbEQsS0FBSyxPQUFPLElBQUksVUFBVSxFQUN0QixPQUNKLENBQUM7RUFFRCxNQUFNLEdBQUcsU0FBUyxVQUVkLFFBQVEsU0FBUyxHQUNqQixLQUFLLFVBQ0QsTUFBTSxLQUFLLEtBQUssTUFBTSxFQUFFLEtBQUssV0FBVztHQUNwQyxNQUFNLE1BQU07R0FDWixRQUFRLE1BQU0sR0FBRztFQUNyQixFQUFFLEdBQ0YsTUFDQSxDQUNKLENBQ0o7RUFDQSxPQUFPO0NBQ1g7Q0FFQSxNQUFhLFlBQVksVUFBa0I7RUFDdkMsS0FBSyxPQUFPLE9BQU8sUUFBUTtFQUUzQixNQUFNLEdBQUcsU0FBUyxVQUVkLFFBQVEsU0FBUyxHQUNqQixLQUFLLFVBQ0QsTUFBTSxLQUFLLEtBQUssTUFBTSxFQUFFLEtBQUssV0FBVztHQUNwQyxNQUFNLE1BQU07R0FDWixRQUFRLE1BQU0sR0FBRztFQUNyQixFQUFFLEdBQ0YsTUFDQSxDQUNKLENBQ0o7Q0FDSjs7Ozs7O0NBT0EsU0FBZ0IsUUFBa0M7RUFDOUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxPQUFPLFFBQVEsQ0FBQyxHQUNoQyxPQUFPLEtBQUssT0FBTyxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUcsVUFBVTtFQUd4RCxPQUFPO0NBQ1g7QUFDSiJ9