UNPKG

@bdsx/anticrasher

Version:

simple anti-crasher

87 lines 7.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Counter = void 0; const common_1 = require("bdsx/common"); const core_1 = require("bdsx/core"); const event_1 = require("bdsx/event"); const launcher_1 = require("bdsx/launcher"); const event_2 = require("./event"); class Counter { constructor(delay_limit, max_warns) { this.delay_limit = 3; this.max_warns = 3; this.last_map = new Map(); this.count_map = new Map(); if (delay_limit != null && max_warns != null) { this.delay_limit = delay_limit; this.max_warns = max_warns; } } reset(subject) { this.count_map.set(subject, 0); this.last_map.set(subject, Date.now()); } warn(subject) { const old_counts = this.count_map.get(subject); this.last_map.set(subject, Date.now()); this.count_map.set(subject, (old_counts !== null && old_counts !== void 0 ? old_counts : 0) + 1); } pass(subject) { this.reset(subject); } enter(subject, cause = event_2.anticrasher.Crashers.Unknown, kickMessage) { const last = this.last_map.get(subject); const counts = this.count_map.get(subject); this.warn(subject); // 처음이 아니면 if (last != null && counts != null) { // 시간 비교해서 if (Date.now() - last < this.delay_limit) { // 여러 번 이면 if (counts > this.max_warns) { // 킥 this.addBanned(subject, cause, kickMessage); this.reset(subject); return common_1.CANCEL; } // 시간이 길면 값 초기화 } else this.pass(subject); } // 처음이면 값 초기화 else this.pass(subject); } addBanned(target, messageOrCause, messageOpt) { const event = new event_2.CrasherDetectedEvent(target.getActor(), target, event_2.anticrasher.Crashers.Unknown); let message = ""; if (typeof messageOrCause === "number") { event.crasherType = messageOrCause; message = messageOpt !== null && messageOpt !== void 0 ? messageOpt : Counter.kickMessage; } else { message = messageOrCause !== null && messageOrCause !== void 0 ? messageOrCause : Counter.kickMessage; } const canceled = event_2.anticrasher.crasherDetected.fire(event) === common_1.CANCEL; if (canceled) { return; } if (Counter.Banned.has(target)) return; const ip = target.getAddress().split("|")[0]; if (ip !== "10.10.10.10") Counter.Banned.set(target, ip); launcher_1.bedrockServer.serverInstance.disconnectClient(target, message); } } exports.Counter = Counter; Counter.kickMessage = "§cKicked by trying Crasher"; Counter.Banned = new Map(); event_1.events.networkDisconnected.on(async (ni) => { if (Counter.Banned.has(ni)) { core_1.ipfilter.add(Counter.Banned.get(ni)); Counter.Banned.delete(ni); } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvdW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esd0NBQXFDO0FBQ3JDLG9DQUFxQztBQUNyQyxzQ0FBb0M7QUFDcEMsNENBQThDO0FBQzlDLG1DQUE0RDtBQUU1RCxNQUFhLE9BQU87SUFNaEIsWUFBWSxXQUFvQixFQUFFLFNBQWtCO1FBTzVDLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3JELGNBQVMsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQVQxRCxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtZQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFPRCxLQUFLLENBQUMsT0FBMEI7UUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBSSxDQUFDLE9BQTBCO1FBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLGFBQVYsVUFBVSxjQUFWLFVBQVUsR0FBSSxDQUFDLENBQUMsR0FB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