@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
87 lines (84 loc) • 8.82 kB
JavaScript
import fs from 'node:fs';
import { parseJSON5 } from 'confbox';
import { withCwd } from '../utils/cwd.es.js';
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 = 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(
// FIXME: This overwrites comments in the file.
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(
// FIXME: This overwrites comments in the file.
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;
}
}
export { BanManager as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFuTWFuYWdlci5lcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhbi9CYW5NYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHsgcGFyc2VKU09ONSB9IGZyb20gJ2NvbmZib3gnO1xuaW1wb3J0IHR5cGUgUGxheWVyIGZyb20gJy4uL1BsYXllcic7XG5pbXBvcnQgdHlwZSBTZXJ2ZXIgZnJvbSAnLi4vU2VydmVyJztcbmltcG9ydCB7IHdpdGhDd2QgfSBmcm9tICcuLi91dGlscy9jd2QnO1xuXG5leHBvcnQgdHlwZSBCYW5uZWRQbGF5ZXJFbnRyeSA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcmVhc29uOiBzdHJpbmcgfCAnJztcbn07XG5cbmNvbnN0IEZJTEVfTkFNRSA9ICdiYW5uZWQtcGxheWVycy5qc29uJztcblxuLyoqXG4gKiBCYW4gbWFuYWdlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFuTWFuYWdlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2ZXI6IFNlcnZlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhbm5lZDogTWFwPHN0cmluZywgT21pdDxCYW5uZWRQbGF5ZXJFbnRyeSwgJ25hbWUnPj4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2VydmVyOiBTZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZW5hYmxlIGhvb2suXG4gICAgICogQGdyb3VwIExpZmVjeWNsZVxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBlbmFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyc2VCYW5uZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBkaXNhYmxlIGhvb2suXG4gICAgICogQGdyb3VwIExpZmVjeWNsZVxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBkaXNhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmJhbm5lZC5jbGVhcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcGFyc2VCYW5uZWQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSB3aXRoQ3dkKEZJTEVfTkFNRSk7XG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyLmdldExvZ2dlcigpLndhcm4oYEZhaWxlZCB0byBsb2FkIGJhbiBsaXN0IWApO1xuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZGlyLCAnW10nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFubmVkOiBCYW5uZWRQbGF5ZXJFbnRyeVtdID0gcGFyc2VKU09ONSgoYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoZGlyKSkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBsYXllciBvZiBiYW5uZWQpIHRoaXMuYmFubmVkLnNldChwbGF5ZXIubmFtZSwgcGxheWVyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyLmdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRCYW5uZWQodXNlcm5hbWU6IHN0cmluZywgcmVhc29uID0gJycpIHtcbiAgICAgICAgdGhpcy5iYW5uZWQuc2V0KHVzZXJuYW1lLCB7XG4gICAgICAgICAgICByZWFzb25cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKFxuICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3ZlcndyaXRlcyBjb21tZW50cyBpbiB0aGUgZmlsZS5cbiAgICAgICAgICAgIHdpdGhDd2QoRklMRV9OQU1FKSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5iYW5uZWQpLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5WzBdLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IGVudHJ5WzFdLnJlYXNvblxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFVuYmFubmVkKHVzZXJuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5iYW5uZWQuZGVsZXRlKHVzZXJuYW1lKTtcblxuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoXG4gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBvdmVyd3JpdGVzIGNvbW1lbnRzIGluIHRoZSBmaWxlLlxuICAgICAgICAgICAgd2l0aEN3ZChGSUxFX05BTUUpLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmJhbm5lZCkubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZW50cnlbMF0sXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogZW50cnlbMV0ucmVhc29uXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHBsYXllciBpcyBiYW5uZWQuXG4gICAgICogQHBhcmFtIHtQbGF5ZXJ9IHBsYXllciAtIFBsYXllciB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgYm9vbGVhbn0gUmVhc29uIGlmIGJhbm5lZCwgZmFsc2UgaWYgbm90IGJhbm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNCYW5uZWQocGxheWVyOiBQbGF5ZXIpOiBzdHJpbmcgfCBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuYmFubmVkLmhhcyhwbGF5ZXIuZ2V0TmFtZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFubmVkLmdldChwbGF5ZXIuZ2V0TmFtZSgpKT8ucmVhc29uIHx8IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFZQSxNQUFNLFNBQVksR0FBQSxxQkFBQTtBQUtsQixNQUFxQixVQUFXLENBQUE7QUFBQSxFQUNYLE1BQUE7QUFBQSxFQUNBLE1BQUEsdUJBQTJELEdBQUksRUFBQTtBQUFBLEVBRXpFLFlBQVksTUFBZ0IsRUFBQTtBQUMvQixJQUFBLElBQUEsQ0FBSyxNQUFTLEdBQUEsTUFBQTtBQUFBO0FBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxNQUFhLE1BQXdCLEdBQUE7QUFDakMsSUFBQSxNQUFNLEtBQUssV0FBWSxFQUFBO0FBQUE7QUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE1BQWEsT0FBeUIsR0FBQTtBQUNsQyxJQUFBLElBQUEsQ0FBSyxPQUFPLEtBQU0sRUFBQTtBQUFBO0FBQ3RCLEVBRUEsTUFBYyxXQUFjLEdBQUE7QUFDeEIsSUFBSSxJQUFBO0FBQ0EsTUFBTSxNQUFBLEdBQUEsR0FBTSxRQUFRLFNBQVMsQ0FBQTtBQUM3QixNQUFBLElBQUksQ0FBQyxFQUFBLENBQUcsVUFBVyxDQUFBLEdBQUcsQ0FBRyxFQUFBO0FBQ3JCLFFBQUEsSUFBQSxDQUFLLE1BQU8sQ0FBQSxTQUFBLEVBQVksQ0FBQSxJQUFBLENBQUssQ0FBMEIsd0JBQUEsQ0FBQSxDQUFBO0FBQ3ZELFFBQUcsRUFBQSxDQUFBLGFBQUEsQ0FBYyxLQUFLLElBQUksQ0FBQTtBQUFBO0FBRzlCLE1BQU0sTUFBQSxNQUFBLEdBQThCLFlBQVksTUFBTSxFQUFBLENBQUcsU0FBUyxRQUFTLENBQUEsR0FBRyxDQUFHLEVBQUEsUUFBQSxFQUFVLENBQUE7QUFDM0YsTUFBQSxLQUFBLE1BQVcsVUFBVSxNQUFRLEVBQUEsSUFBQSxDQUFLLE9BQU8sR0FBSSxDQUFBLE1BQUEsQ0FBTyxNQUFNLE1BQU0sQ0FBQTtBQUFBLGFBQzNELEtBQWdCLEVBQUE7QUFDckIsTUFBQSxJQUFBLENBQUssTUFBTyxDQUFBLFNBQUEsRUFBWSxDQUFBLEtBQUEsQ0FBTSxLQUFLLENBQUE7QUFBQTtBQUN2QztBQUNKLEVBRUEsTUFBYSxTQUFBLENBQVUsUUFBa0IsRUFBQSxNQUFBLEdBQVMsRUFBSSxFQUFBO0FBQ2xELElBQUssSUFBQSxDQUFBLE1BQUEsQ0FBTyxJQUFJLFFBQVUsRUFBQTtBQUFBLE1BQ3RCO0FBQUEsS0FDSCxDQUFBO0FBRUQsSUFBQSxNQUFNLEdBQUcsUUFBUyxDQUFBLFNBQUE7QUFBQTtBQUFBLE1BRWQsUUFBUSxTQUFTLENBQUE7QUFBQSxNQUNqQixJQUFLLENBQUEsU0FBQTtBQUFBLFFBQ0QsTUFBTSxJQUFLLENBQUEsSUFBQSxDQUFLLE1BQU0sQ0FBRSxDQUFBLEdBQUEsQ0FBSSxDQUFDLEtBQVcsTUFBQTtBQUFBLFVBQ3BDLElBQUEsRUFBTSxNQUFNLENBQUMsQ0FBQTtBQUFBLFVBQ2IsTUFBQSxFQUFRLEtBQU0sQ0FBQSxDQUFDLENBQUUsQ0FBQTtBQUFBLFNBQ25CLENBQUEsQ0FBQTtBQUFBLFFBQ0YsSUFBQTtBQUFBLFFBQ0E7QUFBQTtBQUNKLEtBQ0o7QUFDQSxJQUFPLE9BQUEsSUFBQTtBQUFBO0FBQ1gsRUFFQSxNQUFhLFlBQVksUUFBa0IsRUFBQTtBQUN2QyxJQUFLLElBQUEsQ0FBQSxNQUFBLENBQU8sT0FBTyxRQUFRLENBQUE7QUFFM0IsSUFBQSxNQUFNLEdBQUcsUUFBUyxDQUFBLFNBQUE7QUFBQTtBQUFBLE1BRWQsUUFBUSxTQUFTLENBQUE7QUFBQSxNQUNqQixJQUFLLENBQUEsU0FBQTtBQUFBLFFBQ0QsTUFBTSxJQUFLLENBQUEsSUFBQSxDQUFLLE1BQU0sQ0FBRSxDQUFBLEdBQUEsQ0FBSSxDQUFDLEtBQVcsTUFBQTtBQUFBLFVBQ3BDLElBQUEsRUFBTSxNQUFNLENBQUMsQ0FBQTtBQUFBLFVBQ2IsTUFBQSxFQUFRLEtBQU0sQ0FBQSxDQUFDLENBQUUsQ0FBQTtBQUFBLFNBQ25CLENBQUEsQ0FBQTtBQUFBLFFBQ0YsSUFBQTtBQUFBLFFBQ0E7QUFBQTtBQUNKLEtBQ0o7QUFBQTtBQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLFNBQVMsTUFBa0MsRUFBQTtBQUM5QyxJQUFBLElBQUksS0FBSyxNQUFPLENBQUEsR0FBQSxDQUFJLE1BQU8sQ0FBQSxPQUFBLEVBQVMsQ0FBRyxFQUFBO0FBQ25DLE1BQUEsT0FBTyxLQUFLLE1BQU8sQ0FBQSxHQUFBLENBQUksT0FBTyxPQUFRLEVBQUMsR0FBRyxNQUFVLElBQUEsSUFBQTtBQUFBO0FBR3hELElBQU8sT0FBQSxLQUFBO0FBQUE7QUFFZjs7OzsifQ==