@bdsx/anticrasher
Version:
simple anti-crasher
87 lines • 7.18 kB
JavaScript
"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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