@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
70 lines (69 loc) • 7.4 kB
JavaScript
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