@amatiscorp/disguard 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +232 -14
  2. package/dist/AntiSpam.d.ts +7 -1
  3. package/dist/AntiSpam.d.ts.map +1 -1
  4. package/dist/AntiSpam.js +113 -3
  5. package/dist/AntiSpam.js.map +1 -1
  6. package/dist/defaults.d.ts.map +1 -1
  7. package/dist/defaults.js +62 -1
  8. package/dist/defaults.js.map +1 -1
  9. package/dist/detectors/files.d.ts.map +1 -1
  10. package/dist/detectors/files.js +14 -0
  11. package/dist/detectors/files.js.map +1 -1
  12. package/dist/detectors/forward.d.ts +3 -0
  13. package/dist/detectors/forward.d.ts.map +1 -0
  14. package/dist/detectors/forward.js +35 -0
  15. package/dist/detectors/forward.js.map +1 -0
  16. package/dist/detectors/ghost.d.ts.map +1 -1
  17. package/dist/detectors/ghost.js +4 -0
  18. package/dist/detectors/ghost.js.map +1 -1
  19. package/dist/detectors/impersonate.d.ts +3 -0
  20. package/dist/detectors/impersonate.d.ts.map +1 -0
  21. package/dist/detectors/impersonate.js +86 -0
  22. package/dist/detectors/impersonate.js.map +1 -0
  23. package/dist/detectors/joins.d.ts +4 -0
  24. package/dist/detectors/joins.d.ts.map +1 -0
  25. package/dist/detectors/joins.js +30 -0
  26. package/dist/detectors/joins.js.map +1 -0
  27. package/dist/detectors/polls.d.ts +3 -0
  28. package/dist/detectors/polls.d.ts.map +1 -0
  29. package/dist/detectors/polls.js +35 -0
  30. package/dist/detectors/polls.js.map +1 -0
  31. package/dist/detectors/stickers.d.ts +3 -0
  32. package/dist/detectors/stickers.d.ts.map +1 -0
  33. package/dist/detectors/stickers.js +60 -0
  34. package/dist/detectors/stickers.js.map +1 -0
  35. package/dist/detectors/voice.d.ts +3 -0
  36. package/dist/detectors/voice.d.ts.map +1 -0
  37. package/dist/detectors/voice.js +35 -0
  38. package/dist/detectors/voice.js.map +1 -0
  39. package/dist/detectors/words.d.ts.map +1 -1
  40. package/dist/detectors/words.js +27 -3
  41. package/dist/detectors/words.js.map +1 -1
  42. package/dist/enforcement.d.ts +2 -1
  43. package/dist/enforcement.d.ts.map +1 -1
  44. package/dist/enforcement.js +100 -5
  45. package/dist/enforcement.js.map +1 -1
  46. package/dist/index.d.ts +5 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +9 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/store/MemoryStore.d.ts +3 -0
  51. package/dist/store/MemoryStore.d.ts.map +1 -1
  52. package/dist/store/MemoryStore.js +23 -0
  53. package/dist/store/MemoryStore.js.map +1 -1
  54. package/dist/types.d.ts +84 -2
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/utils/flags.d.ts +5 -0
  57. package/dist/utils/flags.d.ts.map +1 -0
  58. package/dist/utils/flags.js +41 -0
  59. package/dist/utils/flags.js.map +1 -0
  60. package/dist/utils/normalize.d.ts +2 -0
  61. package/dist/utils/normalize.d.ts.map +1 -1
  62. package/dist/utils/normalize.js +46 -0
  63. package/dist/utils/normalize.js.map +1 -1
  64. package/package.json +2 -2
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.impersonateDetector = void 0;
4
+ const normalize_1 = require("../utils/normalize");
5
+ const similarity_1 = require("../utils/similarity");
6
+ const incident_1 = require("./incident");
7
+ function nameKey(value) {
8
+ return (0, normalize_1.foldHomoglyphs)(value)
9
+ .toLowerCase()
10
+ .replace(/[^a-z0-9]/g, "");
11
+ }
12
+ function collectTargets(input) {
13
+ const rules = input.config.impersonate;
14
+ const names = [...rules.names];
15
+ if (rules.matchBot) {
16
+ const bot = input.message.client?.user;
17
+ if (bot) {
18
+ if (bot.username)
19
+ names.push(bot.username);
20
+ const display = bot.displayName;
21
+ const global = bot.globalName;
22
+ if (display)
23
+ names.push(display);
24
+ if (global)
25
+ names.push(global);
26
+ }
27
+ }
28
+ return names.map(nameKey).filter((item) => item.length >= 3);
29
+ }
30
+ function collectCandidates(input) {
31
+ const rules = input.config.impersonate;
32
+ const out = [];
33
+ const author = input.message.author;
34
+ const member = input.message.member;
35
+ if (rules.checkUsername && author.username) {
36
+ out.push({ kind: "username", value: author.username });
37
+ }
38
+ if (rules.checkDisplayName) {
39
+ if (author.globalName)
40
+ out.push({ kind: "displayName", value: author.globalName });
41
+ if (author.displayName)
42
+ out.push({ kind: "displayName", value: author.displayName });
43
+ if (member?.displayName)
44
+ out.push({ kind: "displayName", value: member.displayName });
45
+ }
46
+ if (rules.checkNickname && member?.nickname) {
47
+ out.push({ kind: "nickname", value: member.nickname });
48
+ }
49
+ return out;
50
+ }
51
+ exports.impersonateDetector = {
52
+ type: "impersonate",
53
+ inspect(input) {
54
+ const { message, snapshot, config } = input;
55
+ const rules = config.impersonate;
56
+ if (!rules.enabled || !message.guild)
57
+ return null;
58
+ if (message.author.bot)
59
+ return null;
60
+ if (message.client?.user && message.author.id === message.client.user.id)
61
+ return null;
62
+ const targets = collectTargets(input);
63
+ if (targets.length === 0)
64
+ return null;
65
+ for (const candidate of collectCandidates(input)) {
66
+ const key = nameKey(candidate.value);
67
+ if (key.length < 3)
68
+ continue;
69
+ for (const target of targets) {
70
+ const score = (0, similarity_1.similarity)(key, target);
71
+ if (score >= rules.minSimilarity) {
72
+ return (0, incident_1.createIncident)("impersonate", snapshot, {
73
+ userId: message.author.id,
74
+ guildId: message.guild.id,
75
+ severity: rules.severity,
76
+ reason: `Posible impersonación (${candidate.kind} ≈ nombre protegido)`,
77
+ details: { kind: candidate.kind, similarity: Number(score.toFixed(3)) },
78
+ recommendedActions: ["delete", "warn", "timeout"],
79
+ });
80
+ }
81
+ }
82
+ }
83
+ return null;
84
+ },
85
+ };
86
+ //# sourceMappingURL=impersonate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impersonate.js","sourceRoot":"","sources":["../../src/detectors/impersonate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { GuildMember } from "discord.js";
2
+ import type { Incident, JoinConfig } from "../types";
3
+ export declare function inspectJoin(member: GuildMember, joinCount: number, rules: JoinConfig, now: number): Incident | null;
4
+ //# sourceMappingURL=joins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joins.d.ts","sourceRoot":"","sources":["../../src/detectors/joins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErD,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,MAAM,GACV,QAAQ,GAAG,IAAI,CAuBjB"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inspectJoin = inspectJoin;
4
+ function inspectJoin(member, joinCount, rules, now) {
5
+ if (!rules.enabled)
6
+ return null;
7
+ if (member.user.bot)
8
+ return null;
9
+ if (joinCount < rules.maxJoins)
10
+ return null;
11
+ if (rules.minAccountAgeDays > 0) {
12
+ const created = member.user.createdTimestamp;
13
+ const ageDays = (now - created) / (24 * 60 * 60 * 1000);
14
+ if (ageDays >= rules.minAccountAgeDays)
15
+ return null;
16
+ }
17
+ return {
18
+ type: "join",
19
+ severity: rules.severity,
20
+ userId: member.id,
21
+ guildId: member.guild.id,
22
+ channelId: member.guild.systemChannelId ?? "",
23
+ messageId: "",
24
+ reason: `Posible raid de joins (${joinCount}/${rules.maxJoins} en ${rules.windowMs}ms)`,
25
+ details: { joins: joinCount, windowMs: rules.windowMs },
26
+ recommendedActions: ["timeout"],
27
+ timestamp: now,
28
+ };
29
+ }
30
+ //# sourceMappingURL=joins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joins.js","sourceRoot":"","sources":["../../src/detectors/joins.ts"],"names":[],"mappings":";;AAGA,kCA4BC;AA5BD,SAAgB,WAAW,CACzB,MAAmB,EACnB,SAAiB,EACjB,KAAiB,EACjB,GAAW;IAEX,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,SAAS,GAAG,KAAK,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE5C,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC7C,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,IAAI,OAAO,IAAI,KAAK,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;IACtD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,MAAM,CAAC,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;QACxB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE;QAC7C,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,0BAA0B,SAAS,IAAI,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,QAAQ,KAAK;QACvF,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;QACvD,kBAAkB,EAAE,CAAC,SAAS,CAAC;QAC/B,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../types";
2
+ export declare const pollDetector: Detector;
3
+ //# sourceMappingURL=polls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polls.d.ts","sourceRoot":"","sources":["../../src/detectors/polls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA2B,MAAM,UAAU,CAAC;AAIlE,eAAO,MAAM,YAAY,EAAE,QAyB1B,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pollDetector = void 0;
4
+ const flags_1 = require("../utils/flags");
5
+ const incident_1 = require("./incident");
6
+ exports.pollDetector = {
7
+ type: "poll",
8
+ inspect({ message, snapshot, history, config }) {
9
+ const rules = config.polls;
10
+ if (!rules.enabled || !message.guild)
11
+ return null;
12
+ if (!snapshot.hasPoll && !(0, flags_1.hasPoll)(message))
13
+ return null;
14
+ let count = 0;
15
+ for (const item of history) {
16
+ if (snapshot.timestamp - item.timestamp > rules.windowMs)
17
+ continue;
18
+ if (item.hasPoll)
19
+ count += 1;
20
+ }
21
+ if (!snapshot.hasPoll)
22
+ count += 1;
23
+ if (count < rules.maxPolls)
24
+ return null;
25
+ return (0, incident_1.createIncident)("poll", snapshot, {
26
+ userId: message.author.id,
27
+ guildId: message.guild.id,
28
+ severity: rules.severity,
29
+ reason: `Demasiadas encuestas (${count}/${rules.maxPolls} en ${rules.windowMs}ms)`,
30
+ details: { count, windowMs: rules.windowMs },
31
+ recommendedActions: ["delete", "warn"],
32
+ });
33
+ },
34
+ };
35
+ //# sourceMappingURL=polls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polls.js","sourceRoot":"","sources":["../../src/detectors/polls.ts"],"names":[],"mappings":";;;AACA,0CAAyC;AACzC,yCAA4C;AAE/B,QAAA,YAAY,GAAa;IACpC,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAiB;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAA,eAAO,EAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAExD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ;gBAAE,SAAS;YACnE,IAAI,IAAI,CAAC,OAAO;gBAAE,KAAK,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,KAAK,IAAI,CAAC,CAAC;QAElC,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAExC,OAAO,IAAA,yBAAc,EAAC,MAAM,EAAE,QAAQ,EAAE;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,yBAAyB,KAAK,IAAI,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,QAAQ,KAAK;YAClF,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;YAC5C,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../types";
2
+ export declare const stickerDetector: Detector;
3
+ //# sourceMappingURL=stickers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stickers.d.ts","sourceRoot":"","sources":["../../src/detectors/stickers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA2B,MAAM,UAAU,CAAC;AAGlE,eAAO,MAAM,eAAe,EAAE,QAyD7B,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stickerDetector = void 0;
4
+ const incident_1 = require("./incident");
5
+ exports.stickerDetector = {
6
+ type: "sticker",
7
+ inspect({ message, snapshot, history, config }) {
8
+ const rules = config.stickers;
9
+ if (!rules.enabled || !message.guild)
10
+ return null;
11
+ const count = message.stickers.size;
12
+ if (count === 0)
13
+ return null;
14
+ if (count > rules.maxStickers) {
15
+ return (0, incident_1.createIncident)("sticker", snapshot, {
16
+ userId: message.author.id,
17
+ guildId: message.guild.id,
18
+ severity: rules.severity,
19
+ reason: `Demasiados stickers (${count}/${rules.maxStickers})`,
20
+ details: { count },
21
+ recommendedActions: ["delete", "warn"],
22
+ });
23
+ }
24
+ if (rules.blockOnly) {
25
+ const empty = message.content.trim().length === 0 &&
26
+ message.attachments.size === 0 &&
27
+ message.embeds.length === 0;
28
+ if (empty) {
29
+ return (0, incident_1.createIncident)("sticker", snapshot, {
30
+ userId: message.author.id,
31
+ guildId: message.guild.id,
32
+ severity: rules.severity,
33
+ reason: "Mensaje que solo contiene stickers",
34
+ details: { count },
35
+ recommendedActions: ["delete"],
36
+ });
37
+ }
38
+ }
39
+ if (rules.maxInWindow > 0) {
40
+ let total = 0;
41
+ for (const item of history) {
42
+ if (snapshot.timestamp - item.timestamp > rules.windowMs)
43
+ continue;
44
+ total += item.stickerCount ?? 0;
45
+ }
46
+ if (total > rules.maxInWindow) {
47
+ return (0, incident_1.createIncident)("sticker", snapshot, {
48
+ userId: message.author.id,
49
+ guildId: message.guild.id,
50
+ severity: rules.severity,
51
+ reason: `Demasiados stickers en la ventana (${total}/${rules.maxInWindow})`,
52
+ details: { count: total, windowMs: rules.windowMs },
53
+ recommendedActions: ["delete", "warn"],
54
+ });
55
+ }
56
+ }
57
+ return null;
58
+ },
59
+ };
60
+ //# sourceMappingURL=stickers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stickers.js","sourceRoot":"","sources":["../../src/detectors/stickers.ts"],"names":[],"mappings":";;;AACA,yCAA4C;AAE/B,QAAA,eAAe,GAAa;IACvC,IAAI,EAAE,SAAS;IACf,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAiB;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAElD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE7B,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9B,OAAO,IAAA,yBAAc,EAAC,SAAS,EAAE,QAAQ,EAAE;gBACzC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;gBACzB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;gBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,MAAM,EAAE,wBAAwB,KAAK,IAAI,KAAK,CAAC,WAAW,GAAG;gBAC7D,OAAO,EAAE,EAAE,KAAK,EAAE;gBAClB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,KAAK,GACT,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBACnC,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,IAAA,yBAAc,EAAC,SAAS,EAAE,QAAQ,EAAE;oBACzC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;oBACzB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;oBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,oCAAoC;oBAC5C,OAAO,EAAE,EAAE,KAAK,EAAE;oBAClB,kBAAkB,EAAE,CAAC,QAAQ,CAAC;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ;oBAAE,SAAS;gBACnE,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC9B,OAAO,IAAA,yBAAc,EAAC,SAAS,EAAE,QAAQ,EAAE;oBACzC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;oBACzB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;oBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,sCAAsC,KAAK,IAAI,KAAK,CAAC,WAAW,GAAG;oBAC3E,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;oBACnD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;iBACvC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Detector } from "../types";
2
+ export declare const voiceDetector: Detector;
3
+ //# sourceMappingURL=voice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../src/detectors/voice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA2B,MAAM,UAAU,CAAC;AAIlE,eAAO,MAAM,aAAa,EAAE,QAyB3B,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.voiceDetector = void 0;
4
+ const flags_1 = require("../utils/flags");
5
+ const incident_1 = require("./incident");
6
+ exports.voiceDetector = {
7
+ type: "voice",
8
+ inspect({ message, snapshot, history, config }) {
9
+ const rules = config.voice;
10
+ if (!rules.enabled || !message.guild)
11
+ return null;
12
+ if (!snapshot.isVoice && !(0, flags_1.isVoiceMessage)(message))
13
+ return null;
14
+ let count = 0;
15
+ for (const item of history) {
16
+ if (snapshot.timestamp - item.timestamp > rules.windowMs)
17
+ continue;
18
+ if (item.isVoice)
19
+ count += 1;
20
+ }
21
+ if (!snapshot.isVoice)
22
+ count += 1;
23
+ if (count < rules.maxVoice)
24
+ return null;
25
+ return (0, incident_1.createIncident)("voice", snapshot, {
26
+ userId: message.author.id,
27
+ guildId: message.guild.id,
28
+ severity: rules.severity,
29
+ reason: `Demasiados mensajes de voz (${count}/${rules.maxVoice} en ${rules.windowMs}ms)`,
30
+ details: { count, windowMs: rules.windowMs },
31
+ recommendedActions: ["delete", "warn"],
32
+ });
33
+ },
34
+ };
35
+ //# sourceMappingURL=voice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.js","sourceRoot":"","sources":["../../src/detectors/voice.ts"],"names":[],"mappings":";;;AACA,0CAAgD;AAChD,yCAA4C;AAE/B,QAAA,aAAa,GAAa;IACrC,IAAI,EAAE,OAAO;IACb,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAiB;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAE/D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ;gBAAE,SAAS;YACnE,IAAI,IAAI,CAAC,OAAO;gBAAE,KAAK,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,KAAK,IAAI,CAAC,CAAC;QAElC,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAExC,OAAO,IAAA,yBAAc,EAAC,OAAO,EAAE,QAAQ,EAAE;YACvC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,+BAA+B,KAAK,IAAI,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,QAAQ,KAAK;YACxF,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;YAC5C,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../../src/detectors/words.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA2B,MAAM,UAAU,CAAC;AAGlE,eAAO,MAAM,YAAY,EAAE,QA+C1B,CAAC"}
1
+ {"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../../src/detectors/words.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA2B,MAAM,UAAU,CAAC;AAIlE,eAAO,MAAM,YAAY,EAAE,QAiD1B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.wordDetector = void 0;
4
+ const normalize_1 = require("../utils/normalize");
4
5
  const incident_1 = require("./incident");
5
6
  exports.wordDetector = {
6
7
  type: "word",
@@ -10,9 +11,11 @@ exports.wordDetector = {
10
11
  return null;
11
12
  if (rules.list.length === 0 && rules.regex.length === 0)
12
13
  return null;
13
- const text = rules.ignoreCase ? message.content.toLowerCase() : message.content;
14
+ const rawText = rules.scanEmbeds ? collectText(message) : message.content;
15
+ const folded = rules.normalizeHomoglyphs ? (0, normalize_1.foldHomoglyphs)(rawText) : rawText;
16
+ const text = rules.ignoreCase ? folded.toLowerCase() : folded;
14
17
  for (const raw of rules.list) {
15
- const needle = rules.ignoreCase ? raw.toLowerCase() : raw;
18
+ const needle = prepareNeedle(raw, rules.ignoreCase, rules.normalizeHomoglyphs);
16
19
  if (!needle)
17
20
  continue;
18
21
  const hit = rules.matchWholeWord
@@ -32,7 +35,7 @@ exports.wordDetector = {
32
35
  for (const pattern of rules.regex) {
33
36
  try {
34
37
  const flags = rules.ignoreCase && !pattern.includes("(?i)") ? "i" : undefined;
35
- if (new RegExp(pattern, flags).test(message.content)) {
38
+ if (new RegExp(pattern, flags).test(rawText) || new RegExp(pattern, flags).test(folded)) {
36
39
  return (0, incident_1.createIncident)("word", snapshot, {
37
40
  userId: message.author.id,
38
41
  guildId: message.guild.id,
@@ -50,6 +53,27 @@ exports.wordDetector = {
50
53
  return null;
51
54
  },
52
55
  };
56
+ function prepareNeedle(raw, ignoreCase, fold) {
57
+ let needle = fold ? (0, normalize_1.foldHomoglyphs)(raw) : raw;
58
+ if (ignoreCase)
59
+ needle = needle.toLowerCase();
60
+ return needle;
61
+ }
62
+ function collectText(message) {
63
+ const parts = [message.content];
64
+ for (const embed of message.embeds) {
65
+ if (embed.title)
66
+ parts.push(embed.title);
67
+ if (embed.description)
68
+ parts.push(embed.description);
69
+ if (embed.footer?.text)
70
+ parts.push(embed.footer.text);
71
+ for (const field of embed.fields ?? []) {
72
+ parts.push(field.name, field.value);
73
+ }
74
+ }
75
+ return parts.join("\n");
76
+ }
53
77
  function escapeRegex(value) {
54
78
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
55
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"words.js","sourceRoot":"","sources":["../../src/detectors/words.ts"],"names":[],"mappings":";;;AACA,yCAA4C;AAE/B,QAAA,YAAY,GAAa;IACpC,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAiB;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAClD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAErE,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAEhF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1D,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc;gBAC9B,CAAC,CAAC,IAAI,MAAM,CAAC,sBAAsB,WAAW,CAAC,MAAM,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5F,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,IAAA,yBAAc,EAAC,MAAM,EAAE,QAAQ,EAAE;oBACtC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;oBACzB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;oBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,sBAAsB,GAAG,EAAE;oBACnC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;oBACtB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;iBACvC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC9E,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrD,OAAO,IAAA,yBAAc,EAAC,MAAM,EAAE,QAAQ,EAAE;wBACtC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;wBACzB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;wBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,MAAM,EAAE,4CAA4C;wBACpD,OAAO,EAAE,EAAE,OAAO,EAAE;wBACpB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;qBACvC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"words.js","sourceRoot":"","sources":["../../src/detectors/words.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { type Message } from "discord.js";
1
+ import { type GuildMember, type Message } from "discord.js";
2
2
  import type { ActionResult, Incident, ResolvedConfig } from "./types";
3
3
  export declare function applyPunishment(message: Message, incident: Incident, strikes: number, config: ResolvedConfig): Promise<ActionResult>;
4
+ export declare function applyMemberPunishment(member: GuildMember, incident: Incident, strikes: number, config: ResolvedConfig): Promise<ActionResult>;
4
5
  export declare function timeoutDuration(config: ResolvedConfig, strikes: number): number;
5
6
  //# sourceMappingURL=enforcement.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enforcement.d.ts","sourceRoot":"","sources":["../src/enforcement.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,OAAO,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,YAAY,EAAc,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AASlF,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,CAAC,CAqCvB;AAgKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAM/E"}
1
+ {"version":3,"file":"enforcement.d.ts","sourceRoot":"","sources":["../src/enforcement.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,OAAO,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,YAAY,EAAc,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AASlF,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,CAAC,CAqCvB;AAkLD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,CAAC,CAuEvB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAM/E"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.applyPunishment = applyPunishment;
4
+ exports.applyMemberPunishment = applyMemberPunishment;
4
5
  exports.timeoutDuration = timeoutDuration;
5
6
  const discord_js_1 = require("discord.js");
6
7
  const locale_1 = require("./locale");
@@ -39,7 +40,7 @@ async function applyPunishment(message, incident, strikes, config) {
39
40
  }
40
41
  }
41
42
  if (!config.dryRun) {
42
- await sendLog(message, incident, strikes, result, config).catch(() => undefined);
43
+ await sendLog(message.guild, incident, strikes, result, config).catch(() => undefined);
43
44
  }
44
45
  return result;
45
46
  }
@@ -70,6 +71,9 @@ function planActions(incident, strikes, config) {
70
71
  if (punishment.removeRoleIds.length > 0 && strikes >= punishment.minStrikesForRoles) {
71
72
  actions.push("removeRole");
72
73
  }
74
+ if (punishment.slowmodeSeconds > 0 && (incident.type === "raid" || incident.type === "join")) {
75
+ actions.push("slowmode");
76
+ }
73
77
  return [...new Set(actions)];
74
78
  }
75
79
  function canSkip(action, message, member, config) {
@@ -100,6 +104,16 @@ function canSkip(action, message, member, config) {
100
104
  }
101
105
  return null;
102
106
  }
107
+ if (action === "slowmode") {
108
+ const me = message.guild?.members.me;
109
+ if (!me?.permissions.has(discord_js_1.PermissionFlagsBits.ManageChannels)) {
110
+ return "Falta el permiso Manage Channels";
111
+ }
112
+ if (!("setRateLimitPerUser" in message.channel) || typeof message.channel.setRateLimitPerUser !== "function") {
113
+ return "Este canal no admite slowmode";
114
+ }
115
+ return null;
116
+ }
103
117
  if (!member)
104
118
  return "No se pudo resolver el miembro";
105
119
  if (member.id === message.guild?.ownerId)
@@ -180,8 +194,79 @@ async function executeAction(action, message, member, incident, strikes, config)
180
194
  for (const roleId of config.punishment.removeRoleIds) {
181
195
  await member.roles.remove(roleId, reason).catch(() => undefined);
182
196
  }
197
+ return;
198
+ }
199
+ if (action === "slowmode") {
200
+ await applySlowmode(message.channel, config.punishment.slowmodeSeconds, reason);
183
201
  }
184
202
  }
203
+ async function applyMemberPunishment(member, incident, strikes, config) {
204
+ const result = {
205
+ incident,
206
+ dryRun: config.dryRun,
207
+ applied: [],
208
+ skipped: [],
209
+ };
210
+ const planned = planActions(incident, strikes, config).filter((action) => action !== "delete" && action !== "warn" && action !== "purge");
211
+ for (const action of planned) {
212
+ if (config.dryRun) {
213
+ result.applied.push(action);
214
+ continue;
215
+ }
216
+ try {
217
+ const reason = `[antispam:${incident.type}] ${incident.reason}`;
218
+ if (action === "timeout" && member.moderatable) {
219
+ await member.timeout(timeoutDuration(config, strikes), reason);
220
+ result.applied.push(action);
221
+ continue;
222
+ }
223
+ if (action === "kick" && member.kickable) {
224
+ await member.kick(reason);
225
+ result.applied.push(action);
226
+ continue;
227
+ }
228
+ if (action === "ban" && member.bannable) {
229
+ await member.ban({ reason, deleteMessageSeconds: 0 });
230
+ result.applied.push(action);
231
+ continue;
232
+ }
233
+ if (action === "addRole") {
234
+ for (const roleId of config.punishment.addRoleIds) {
235
+ await member.roles.add(roleId, reason).catch(() => undefined);
236
+ }
237
+ result.applied.push(action);
238
+ continue;
239
+ }
240
+ if (action === "removeRole") {
241
+ for (const roleId of config.punishment.removeRoleIds) {
242
+ await member.roles.remove(roleId, reason).catch(() => undefined);
243
+ }
244
+ result.applied.push(action);
245
+ continue;
246
+ }
247
+ if (action === "slowmode") {
248
+ const channel = member.guild.systemChannel;
249
+ if (channel && "setRateLimitPerUser" in channel) {
250
+ await applySlowmode(channel, config.punishment.slowmodeSeconds, reason);
251
+ result.applied.push(action);
252
+ }
253
+ else {
254
+ result.skipped.push({ action, reason: "No hay canal de sistema para slowmode" });
255
+ }
256
+ continue;
257
+ }
258
+ result.skipped.push({ action, reason: "Acción no aplicable en un join" });
259
+ }
260
+ catch (error) {
261
+ result.error = error instanceof Error ? error.message : String(error);
262
+ result.skipped.push({ action, reason: result.error });
263
+ }
264
+ }
265
+ if (!config.dryRun) {
266
+ await sendLog(member.guild, incident, strikes, result, config).catch(() => undefined);
267
+ }
268
+ return result;
269
+ }
185
270
  function timeoutDuration(config, strikes) {
186
271
  const { durationMs, scale, maxDurationMs } = config.punishment.timeout;
187
272
  let ms = durationMs;
@@ -191,25 +276,35 @@ function timeoutDuration(config, strikes) {
191
276
  ms = durationMs * 2 ** Math.max(0, strikes - 1);
192
277
  return Math.min(ms, maxDurationMs);
193
278
  }
279
+ async function applySlowmode(channel, seconds, reason) {
280
+ if (seconds <= 0)
281
+ return;
282
+ if (typeof channel.setRateLimitPerUser !== "function")
283
+ return;
284
+ await channel.setRateLimitPerUser(Math.min(21_600, seconds), reason);
285
+ }
194
286
  async function replyOrSend(message, payload) {
195
287
  if (message.channel.isSendable()) {
196
288
  await message.channel.send(payload);
197
289
  }
198
290
  }
199
- async function sendLog(message, incident, strikes, result, config) {
291
+ async function sendLog(guild, incident, strikes, result, config) {
200
292
  const webhook = config.punishment.logWebhookUrl;
201
293
  const channelId = config.punishment.logChannelId;
202
294
  if (!webhook && !channelId)
203
295
  return;
204
296
  const labels = locale_1.LOG_LABELS[config.locale];
297
+ const jump = incident.messageId && incident.channelId && incident.guildId
298
+ ? `[link](https://discord.com/channels/${incident.guildId}/${incident.channelId}/${incident.messageId})`
299
+ : labels.none;
205
300
  const embed = new discord_js_1.EmbedBuilder()
206
301
  .setColor(SEVERITY_COLOR[incident.severity])
207
302
  .setTitle(labels.title(incident.type))
208
303
  .setDescription(incident.reason)
209
- .addFields({ name: labels.user, value: `<@${incident.userId}> \`${incident.userId}\``, inline: true }, { name: labels.channel, value: `<#${incident.channelId}>`, inline: true }, { name: labels.severity, value: incident.severity, inline: true }, { name: labels.strikes, value: String(strikes), inline: true }, { name: labels.actions, value: result.applied.join(", ") || labels.none, inline: true }, { name: labels.message, value: `[link](https://discord.com/channels/${incident.guildId}/${incident.channelId}/${incident.messageId})`, inline: true })
304
+ .addFields({ name: labels.user, value: `<@${incident.userId}> \`${incident.userId}\``, inline: true }, { name: labels.channel, value: incident.channelId ? `<#${incident.channelId}>` : labels.none, inline: true }, { name: labels.severity, value: incident.severity, inline: true }, { name: labels.strikes, value: String(strikes), inline: true }, { name: labels.actions, value: result.applied.join(", ") || labels.none, inline: true }, { name: labels.message, value: jump, inline: true })
210
305
  .setTimestamp(incident.timestamp);
211
- if (channelId && message.guild) {
212
- const channel = await message.guild.channels.fetch(channelId).catch(() => null);
306
+ if (channelId && guild) {
307
+ const channel = await guild.channels.fetch(channelId).catch(() => null);
213
308
  if (channel?.isTextBased() && channel.isSendable()) {
214
309
  await channel.send({ embeds: [embed] });
215
310
  }
@@ -1 +1 @@
1
- {"version":3,"file":"enforcement.js","sourceRoot":"","sources":["../src/enforcement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enforcement.js","sourceRoot":"","sources":["../src/enforcement.ts"],"names":[],"mappings":"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"}