@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
77 lines (76 loc) • 7.88 kB
JavaScript
;
Object.defineProperties(exports, {
__esModule: { value: true },
[Symbol.toStringTag]: { value: "Module" }
});
const require_runtime = require("../_virtual/_rolldown/runtime.cjs.cjs");
const require_utils_cwd = require("../utils/cwd.cjs.cjs");
let node_fs = require("node:fs");
node_fs = require_runtime.__toESM(node_fs, 1);
let confbox = require("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 = require_utils_cwd.withCwd(FILE_NAME);
if (!node_fs.default.existsSync(dir)) {
this.server.getLogger().warn(`Failed to load ban list!`);
node_fs.default.writeFileSync(dir, "[]");
}
const banned = (0, confbox.parseJSON5)((await node_fs.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 node_fs.default.promises.writeFile(require_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 node_fs.default.promises.writeFile(require_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;
}
};
//#endregion
exports.default = BanManager;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFuTWFuYWdlci5janMuY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYW4vQmFuTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IHBhcnNlSlNPTjUgfSBmcm9tICdjb25mYm94JztcbmltcG9ydCB0eXBlIFBsYXllciBmcm9tICcuLi9QbGF5ZXInO1xuaW1wb3J0IHR5cGUgU2VydmVyIGZyb20gJy4uL1NlcnZlcic7XG5pbXBvcnQgeyB3aXRoQ3dkIH0gZnJvbSAnLi4vdXRpbHMvY3dkJztcblxuZXhwb3J0IHR5cGUgQmFubmVkUGxheWVyRW50cnkgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHJlYXNvbjogc3RyaW5nIHwgJyc7XG59O1xuXG5jb25zdCBGSUxFX05BTUUgPSAnYmFubmVkLXBsYXllcnMuanNvbic7XG5cbi8qKlxuICogQmFuIG1hbmFnZXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhbk1hbmFnZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBTZXJ2ZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYW5uZWQ6IE1hcDxzdHJpbmcsIE9taXQ8QmFubmVkUGxheWVyRW50cnksICduYW1lJz4+ID0gbmV3IE1hcCgpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNlcnZlcjogU2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGVuYWJsZSBob29rLlxuICAgICAqIEBncm91cCBMaWZlY3ljbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZW5hYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcnNlQmFubmVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZGlzYWJsZSBob29rLlxuICAgICAqIEBncm91cCBMaWZlY3ljbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5iYW5uZWQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHBhcnNlQmFubmVkKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGlyID0gd2l0aEN3ZChGSUxFX05BTUUpO1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZlci5nZXRMb2dnZXIoKS53YXJuKGBGYWlsZWQgdG8gbG9hZCBiYW4gbGlzdCFgKTtcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRpciwgJ1tdJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhbm5lZDogQmFubmVkUGxheWVyRW50cnlbXSA9IHBhcnNlSlNPTjUoKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGRpcikpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwbGF5ZXIgb2YgYmFubmVkKSB0aGlzLmJhbm5lZC5zZXQocGxheWVyLm5hbWUsIHBsYXllcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZlci5nZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0QmFubmVkKHVzZXJuYW1lOiBzdHJpbmcsIHJlYXNvbiA9ICcnKSB7XG4gICAgICAgIHRoaXMuYmFubmVkLnNldCh1c2VybmFtZSwge1xuICAgICAgICAgICAgcmVhc29uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShcbiAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG92ZXJ3cml0ZXMgY29tbWVudHMgaW4gdGhlIGZpbGUuXG4gICAgICAgICAgICB3aXRoQ3dkKEZJTEVfTkFNRSksXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuYmFubmVkKS5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeVswXSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBlbnRyeVsxXS5yZWFzb25cbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRVbmJhbm5lZCh1c2VybmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYmFubmVkLmRlbGV0ZSh1c2VybmFtZSk7XG5cbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKFxuICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3ZlcndyaXRlcyBjb21tZW50cyBpbiB0aGUgZmlsZS5cbiAgICAgICAgICAgIHdpdGhDd2QoRklMRV9OQU1FKSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5iYW5uZWQpLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5WzBdLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IGVudHJ5WzFdLnJlYXNvblxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBwbGF5ZXIgaXMgYmFubmVkLlxuICAgICAqIEBwYXJhbSB7UGxheWVyfSBwbGF5ZXIgLSBQbGF5ZXIgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge3N0cmluZyB8IGJvb2xlYW59IFJlYXNvbiBpZiBiYW5uZWQsIGZhbHNlIGlmIG5vdCBiYW5uZWQuXG4gICAgICovXG4gICAgcHVibGljIGlzQmFubmVkKHBsYXllcjogUGxheWVyKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmJhbm5lZC5oYXMocGxheWVyLmdldE5hbWUoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJhbm5lZC5nZXQocGxheWVyLmdldE5hbWUoKSk/LnJlYXNvbiB8fCB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFZQSxJQUFNLFlBQVk7Ozs7QUFLbEIsSUFBcUIsYUFBckIsTUFBZ0M7Q0FDNUI7Q0FDQSx5QkFBd0UsSUFBSSxJQUFJO0NBRWhGLFlBQW1CLFFBQWdCO0VBQy9CLEtBQUssU0FBUztDQUNsQjs7Ozs7Q0FNQSxNQUFhLFNBQXdCO0VBQ2pDLE1BQU0sS0FBSyxZQUFZO0NBQzNCOzs7OztDQU1BLE1BQWEsVUFBeUI7RUFDbEMsS0FBSyxPQUFPLE1BQU07Q0FDdEI7Q0FFQSxNQUFjLGNBQWM7RUFDeEIsSUFBSTtHQUNBLE1BQU0sTUFBTSxrQkFBQSxRQUFRLFNBQVM7R0FDN0IsSUFBSSxDQUFDLFFBQUEsUUFBRyxXQUFXLEdBQUcsR0FBRztJQUNyQixLQUFLLE9BQU8sVUFBVSxFQUFFLEtBQUssMEJBQTBCO0lBQ3ZELFFBQUEsUUFBRyxjQUFjLEtBQUssSUFBSTtHQUM5QjtHQUVBLE1BQU0sVUFBQSxHQUFBLFFBQUEsYUFBMEMsTUFBTSxRQUFBLFFBQUcsU0FBUyxTQUFTLEdBQUcsR0FBRyxTQUFTLENBQUM7R0FDM0YsS0FBSyxNQUFNLFVBQVUsUUFBUSxLQUFLLE9BQU8sSUFBSSxPQUFPLE1BQU0sTUFBTTtFQUNwRSxTQUFTLE9BQWdCO0dBQ3JCLEtBQUssT0FBTyxVQUFVLEVBQUUsTUFBTSxLQUFLO0VBQ3ZDO0NBQ0o7Q0FFQSxNQUFhLFVBQVUsVUFBa0IsU0FBUyxJQUFJO0VBQ2xELEtBQUssT0FBTyxJQUFJLFVBQVUsRUFDdEIsT0FDSixDQUFDO0VBRUQsTUFBTSxRQUFBLFFBQUcsU0FBUyxVQUVkLGtCQUFBLFFBQVEsU0FBUyxHQUNqQixLQUFLLFVBQ0QsTUFBTSxLQUFLLEtBQUssTUFBTSxFQUFFLEtBQUssV0FBVztHQUNwQyxNQUFNLE1BQU07R0FDWixRQUFRLE1BQU0sR0FBRztFQUNyQixFQUFFLEdBQ0YsTUFDQSxDQUNKLENBQ0o7RUFDQSxPQUFPO0NBQ1g7Q0FFQSxNQUFhLFlBQVksVUFBa0I7RUFDdkMsS0FBSyxPQUFPLE9BQU8sUUFBUTtFQUUzQixNQUFNLFFBQUEsUUFBRyxTQUFTLFVBRWQsa0JBQUEsUUFBUSxTQUFTLEdBQ2pCLEtBQUssVUFDRCxNQUFNLEtBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxXQUFXO0dBQ3BDLE1BQU0sTUFBTTtHQUNaLFFBQVEsTUFBTSxHQUFHO0VBQ3JCLEVBQUUsR0FDRixNQUNBLENBQ0osQ0FDSjtDQUNKOzs7Ozs7Q0FPQSxTQUFnQixRQUFrQztFQUM5QyxJQUFJLEtBQUssT0FBTyxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQ2hDLE9BQU8sS0FBSyxPQUFPLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRyxVQUFVO0VBR3hELE9BQU87Q0FDWDtBQUNKIn0=