@amatiscorp/disguard 1.0.0 → 1.2.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 (68) hide show
  1. package/README.md +223 -3
  2. package/dist/AntiSpam.d.ts +22 -5
  3. package/dist/AntiSpam.d.ts.map +1 -1
  4. package/dist/AntiSpam.js +154 -21
  5. package/dist/AntiSpam.js.map +1 -1
  6. package/dist/defaults.d.ts.map +1 -1
  7. package/dist/defaults.js +65 -2
  8. package/dist/defaults.js.map +1 -1
  9. package/dist/detectors/accounts.d.ts +3 -0
  10. package/dist/detectors/accounts.d.ts.map +1 -0
  11. package/dist/detectors/accounts.js +37 -0
  12. package/dist/detectors/accounts.js.map +1 -0
  13. package/dist/detectors/duplicates.d.ts.map +1 -1
  14. package/dist/detectors/duplicates.js +5 -1
  15. package/dist/detectors/duplicates.js.map +1 -1
  16. package/dist/detectors/files.d.ts +4 -0
  17. package/dist/detectors/files.d.ts.map +1 -0
  18. package/dist/detectors/files.js +42 -0
  19. package/dist/detectors/files.js.map +1 -0
  20. package/dist/detectors/flood.d.ts.map +1 -1
  21. package/dist/detectors/flood.js +7 -1
  22. package/dist/detectors/flood.js.map +1 -1
  23. package/dist/detectors/images.d.ts +1 -0
  24. package/dist/detectors/images.d.ts.map +1 -1
  25. package/dist/detectors/images.js +19 -3
  26. package/dist/detectors/images.js.map +1 -1
  27. package/dist/detectors/length.d.ts +3 -0
  28. package/dist/detectors/length.d.ts.map +1 -0
  29. package/dist/detectors/length.js +23 -0
  30. package/dist/detectors/length.js.map +1 -0
  31. package/dist/detectors/links.d.ts +2 -0
  32. package/dist/detectors/links.d.ts.map +1 -1
  33. package/dist/detectors/links.js +29 -5
  34. package/dist/detectors/links.js.map +1 -1
  35. package/dist/detectors/mentions.d.ts.map +1 -1
  36. package/dist/detectors/mentions.js +19 -0
  37. package/dist/detectors/mentions.js.map +1 -1
  38. package/dist/detectors/newlines.d.ts +3 -0
  39. package/dist/detectors/newlines.d.ts.map +1 -0
  40. package/dist/detectors/newlines.js +25 -0
  41. package/dist/detectors/newlines.js.map +1 -0
  42. package/dist/detectors/zalgo.d.ts +3 -0
  43. package/dist/detectors/zalgo.d.ts.map +1 -0
  44. package/dist/detectors/zalgo.js +25 -0
  45. package/dist/detectors/zalgo.js.map +1 -0
  46. package/dist/enforcement.d.ts +1 -0
  47. package/dist/enforcement.d.ts.map +1 -1
  48. package/dist/enforcement.js +30 -9
  49. package/dist/enforcement.js.map +1 -1
  50. package/dist/index.d.ts +5 -2
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +11 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/locale.d.ts +14 -0
  55. package/dist/locale.d.ts.map +1 -0
  56. package/dist/locale.js +35 -0
  57. package/dist/locale.js.map +1 -0
  58. package/dist/store/MemoryStore.d.ts +2 -0
  59. package/dist/store/MemoryStore.d.ts.map +1 -1
  60. package/dist/store/MemoryStore.js +14 -2
  61. package/dist/store/MemoryStore.js.map +1 -1
  62. package/dist/types.d.ts +82 -13
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/utils/normalize.d.ts +2 -0
  65. package/dist/utils/normalize.d.ts.map +1 -1
  66. package/dist/utils/normalize.js +8 -0
  67. package/dist/utils/normalize.js.map +1 -1
  68. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.similarity = exports.normalizeText = exports.extractUrls = exports.OFFICIAL_BRANDS = exports.DEFAULT_SHORTENERS = exports.DEFAULT_PHISHING_KEYWORDS = exports.MemoryStore = exports.mergeDeep = exports.DEFAULT_CONFIG = exports.resolveConfig = exports.createAntiSpam = exports.AntiSpam = void 0;
3
+ exports.similarity = exports.countNewlines = exports.countZalgo = exports.normalizeText = exports.extractUrls = exports.OFFICIAL_BRANDS = exports.DEFAULT_SHORTENERS = exports.DEFAULT_PHISHING_KEYWORDS = exports.DEFAULT_BLOCKED_EXTENSIONS = exports.MemoryStore = exports.timeoutDuration = exports.resolveWarnMessage = exports.LOG_LABELS = exports.WARN_TEMPLATES = exports.mergeDeep = exports.DEFAULT_CONFIG = exports.resolveConfig = exports.createAntiSpam = exports.AntiSpam = void 0;
4
4
  var AntiSpam_1 = require("./AntiSpam");
5
5
  Object.defineProperty(exports, "AntiSpam", { enumerable: true, get: function () { return AntiSpam_1.AntiSpam; } });
6
6
  Object.defineProperty(exports, "createAntiSpam", { enumerable: true, get: function () { return AntiSpam_1.createAntiSpam; } });
@@ -8,8 +8,16 @@ var defaults_1 = require("./defaults");
8
8
  Object.defineProperty(exports, "resolveConfig", { enumerable: true, get: function () { return defaults_1.resolveConfig; } });
9
9
  Object.defineProperty(exports, "DEFAULT_CONFIG", { enumerable: true, get: function () { return defaults_1.DEFAULT_CONFIG; } });
10
10
  Object.defineProperty(exports, "mergeDeep", { enumerable: true, get: function () { return defaults_1.mergeDeep; } });
11
+ var locale_1 = require("./locale");
12
+ Object.defineProperty(exports, "WARN_TEMPLATES", { enumerable: true, get: function () { return locale_1.WARN_TEMPLATES; } });
13
+ Object.defineProperty(exports, "LOG_LABELS", { enumerable: true, get: function () { return locale_1.LOG_LABELS; } });
14
+ Object.defineProperty(exports, "resolveWarnMessage", { enumerable: true, get: function () { return locale_1.resolveWarnMessage; } });
15
+ var enforcement_1 = require("./enforcement");
16
+ Object.defineProperty(exports, "timeoutDuration", { enumerable: true, get: function () { return enforcement_1.timeoutDuration; } });
11
17
  var MemoryStore_1 = require("./store/MemoryStore");
12
18
  Object.defineProperty(exports, "MemoryStore", { enumerable: true, get: function () { return MemoryStore_1.MemoryStore; } });
19
+ var files_1 = require("./detectors/files");
20
+ Object.defineProperty(exports, "DEFAULT_BLOCKED_EXTENSIONS", { enumerable: true, get: function () { return files_1.DEFAULT_BLOCKED_EXTENSIONS; } });
13
21
  var urls_1 = require("./utils/urls");
14
22
  Object.defineProperty(exports, "DEFAULT_PHISHING_KEYWORDS", { enumerable: true, get: function () { return urls_1.DEFAULT_PHISHING_KEYWORDS; } });
15
23
  Object.defineProperty(exports, "DEFAULT_SHORTENERS", { enumerable: true, get: function () { return urls_1.DEFAULT_SHORTENERS; } });
@@ -17,6 +25,8 @@ Object.defineProperty(exports, "OFFICIAL_BRANDS", { enumerable: true, get: funct
17
25
  Object.defineProperty(exports, "extractUrls", { enumerable: true, get: function () { return urls_1.extractUrls; } });
18
26
  var normalize_1 = require("./utils/normalize");
19
27
  Object.defineProperty(exports, "normalizeText", { enumerable: true, get: function () { return normalize_1.normalizeText; } });
28
+ Object.defineProperty(exports, "countZalgo", { enumerable: true, get: function () { return normalize_1.countZalgo; } });
29
+ Object.defineProperty(exports, "countNewlines", { enumerable: true, get: function () { return normalize_1.countNewlines; } });
20
30
  var similarity_1 = require("./utils/similarity");
21
31
  Object.defineProperty(exports, "similarity", { enumerable: true, get: function () { return similarity_1.similarity; } });
22
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsD;AAA7C,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,uCAAsE;AAA7D,yGAAA,aAAa,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,qGAAA,SAAS,OAAA;AACjD,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AACpB,qCAKsB;AAJpB,iHAAA,yBAAyB,OAAA;AACzB,0GAAA,kBAAkB,OAAA;AAClB,uGAAA,eAAe,OAAA;AACf,mGAAA,WAAW,OAAA;AAEb,+CAAkD;AAAzC,0GAAA,aAAa,OAAA;AACtB,iDAAgD;AAAvC,wGAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsD;AAA7C,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,uCAAsE;AAA7D,yGAAA,aAAa,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,qGAAA,SAAS,OAAA;AACjD,mCAA0E;AAAjE,wGAAA,cAAc,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AACvD,6CAAgD;AAAvC,8GAAA,eAAe,OAAA;AACxB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AACpB,2CAA+D;AAAtD,mHAAA,0BAA0B,OAAA;AACnC,qCAKsB;AAJpB,iHAAA,yBAAyB,OAAA;AACzB,0GAAA,kBAAkB,OAAA;AAClB,uGAAA,eAAe,OAAA;AACf,mGAAA,WAAW,OAAA;AAEb,+CAA6E;AAApE,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,0GAAA,aAAa,OAAA;AACjD,iDAAgD;AAAvC,wGAAA,UAAU,OAAA"}
@@ -0,0 +1,14 @@
1
+ export type Locale = "en" | "es";
2
+ export declare const WARN_TEMPLATES: Record<Locale, string>;
3
+ export declare const LOG_LABELS: Record<Locale, {
4
+ title: (type: string) => string;
5
+ user: string;
6
+ channel: string;
7
+ severity: string;
8
+ strikes: string;
9
+ actions: string;
10
+ message: string;
11
+ none: string;
12
+ }>;
13
+ export declare function resolveWarnMessage(locale: Locale, custom: string): string;
14
+ //# sourceMappingURL=locale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjC,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGjD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;IACtC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAqBA,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGzE"}
package/dist/locale.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LOG_LABELS = exports.WARN_TEMPLATES = void 0;
4
+ exports.resolveWarnMessage = resolveWarnMessage;
5
+ exports.WARN_TEMPLATES = {
6
+ en: "{user}, your message was blocked: {reason}. Strikes: {strikes}.",
7
+ es: "{user}, tu mensaje se ha bloqueado: {reason}. Strikes: {strikes}.",
8
+ };
9
+ exports.LOG_LABELS = {
10
+ en: {
11
+ title: (type) => `Disguard · ${type}`,
12
+ user: "User",
13
+ channel: "Channel",
14
+ severity: "Severity",
15
+ strikes: "Strikes",
16
+ actions: "Actions",
17
+ message: "Message",
18
+ none: "none",
19
+ },
20
+ es: {
21
+ title: (type) => `Disguard · ${type}`,
22
+ user: "Usuario",
23
+ channel: "Canal",
24
+ severity: "Severidad",
25
+ strikes: "Strikes",
26
+ actions: "Acciones",
27
+ message: "Mensaje",
28
+ none: "ninguna",
29
+ },
30
+ };
31
+ function resolveWarnMessage(locale, custom) {
32
+ const trimmed = custom.trim();
33
+ return trimmed.length > 0 ? custom : exports.WARN_TEMPLATES[locale];
34
+ }
35
+ //# sourceMappingURL=locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":";;;AAuCA,gDAGC;AAxCY,QAAA,cAAc,GAA2B;IACpD,EAAE,EAAE,iEAAiE;IACrE,EAAE,EAAE,mEAAmE;CACxE,CAAC;AAEW,QAAA,UAAU,GASlB;IACH,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,EAAE;QACrC,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,MAAM;KACb;IACD,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,EAAE;QACrC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEF,SAAgB,kBAAkB,CAAC,MAAc,EAAE,MAAc;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAc,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC"}
@@ -11,6 +11,8 @@ export declare class MemoryStore {
11
11
  countDistinctUsersForImage(hash: string, now: number, windowMs: number): number;
12
12
  addStrike(guildId: string, userId: string, now: number, decayMs: number): number;
13
13
  getStrikes(guildId: string, userId: string, now: number, decayMs: number): number;
14
+ markAction(guildId: string, userId: string, now: number): void;
15
+ isCoolingDown(guildId: string, userId: string, now: number, cooldownMs: number): boolean;
14
16
  resetUser(guildId: string, userId: string): void;
15
17
  cleanup(now: number, maxAgeMs: number): void;
16
18
  private pruneUser;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryStore.d.ts","sourceRoot":"","sources":["../../src/store/MemoryStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAchD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIhD,OAAO,CAAC,MAAM;IAUd,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAO5G,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAM7F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIlE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IASpF,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAU/E,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAUhF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IASjF,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgB5C,OAAO,CAAC,SAAS;CAGlB"}
1
+ {"version":3,"file":"MemoryStore.d.ts","sourceRoot":"","sources":["../../src/store/MemoryStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAehD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIhD,OAAO,CAAC,MAAM;IAUd,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAO5G,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAM7F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIlE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IASpF,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAU/E,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAUhF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IASjF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9D,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAOxF,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiB5C,OAAO,CAAC,SAAS;CAGlB"}
@@ -11,7 +11,7 @@ class MemoryStore {
11
11
  const key = this.userKey(guildId, userId);
12
12
  let bucket = this.users.get(key);
13
13
  if (!bucket) {
14
- bucket = { messages: [], strikes: 0, lastStrikeAt: 0 };
14
+ bucket = { messages: [], strikes: 0, lastStrikeAt: 0, lastActionAt: 0 };
15
15
  this.users.set(key, bucket);
16
16
  }
17
17
  return bucket;
@@ -71,6 +71,17 @@ class MemoryStore {
71
71
  }
72
72
  return bucket.strikes;
73
73
  }
74
+ markAction(guildId, userId, now) {
75
+ this.bucket(guildId, userId).lastActionAt = now;
76
+ }
77
+ isCoolingDown(guildId, userId, now, cooldownMs) {
78
+ if (cooldownMs <= 0)
79
+ return false;
80
+ const bucket = this.users.get(this.userKey(guildId, userId));
81
+ if (!bucket || bucket.lastActionAt <= 0)
82
+ return false;
83
+ return now - bucket.lastActionAt < cooldownMs;
84
+ }
74
85
  resetUser(guildId, userId) {
75
86
  this.users.delete(this.userKey(guildId, userId));
76
87
  }
@@ -78,7 +89,8 @@ class MemoryStore {
78
89
  for (const [key, bucket] of this.users) {
79
90
  this.pruneUser(bucket, now, maxAgeMs);
80
91
  const staleStrikes = bucket.lastStrikeAt > 0 && now - bucket.lastStrikeAt > maxAgeMs;
81
- if (bucket.messages.length === 0 && (bucket.strikes === 0 || staleStrikes)) {
92
+ const staleAction = bucket.lastActionAt <= 0 || now - bucket.lastActionAt > maxAgeMs;
93
+ if (bucket.messages.length === 0 && (bucket.strikes === 0 || staleStrikes) && staleAction) {
82
94
  this.users.delete(key);
83
95
  }
84
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryStore.js","sourceRoot":"","sources":["../../src/store/MemoryStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemoryStore.js","sourceRoot":"","sources":["../../src/store/MemoryStore.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import type { Client, Message } from "discord.js";
2
- export type DetectorType = "flood" | "duplicate" | "link" | "image" | "mention" | "caps" | "emoji";
2
+ export type DetectorType = "flood" | "duplicate" | "link" | "image" | "mention" | "caps" | "emoji" | "file" | "zalgo" | "newline" | "account" | "length";
3
+ export type Locale = "en" | "es";
4
+ export type TimeoutScale = "none" | "linear" | "exponential";
3
5
  export type Severity = "low" | "medium" | "high" | "critical";
4
6
  export type ActionType = "delete" | "warn" | "timeout" | "kick" | "ban";
5
7
  export type ImageHashMode = "meta" | "content";
@@ -45,25 +47,19 @@ export interface IgnoreLists {
45
47
  guilds: string[];
46
48
  }
47
49
  export interface FloodConfig {
48
- /** Activa el detector de flood (muchos mensajes en poco tiempo). */
49
50
  enabled: boolean;
50
- /** Máximo de mensajes permitidos dentro de la ventana. */
51
51
  maxMessages: number;
52
- /** Ventana deslizante en milisegundos. */
53
52
  windowMs: number;
53
+ /** If true, only counts messages in the same channel. */
54
+ sameChannelOnly: boolean;
54
55
  severity: Severity;
55
56
  }
56
57
  export interface DuplicateConfig {
57
- /** Activa el detector de texto repetido. */
58
58
  enabled: boolean;
59
- /** Veces que se puede repetir el mismo (o muy similar) mensaje. */
60
59
  maxRepeats: number;
61
60
  windowMs: number;
62
- /**
63
- * Umbral 0-1. 1 = solo coincidencia exacta.
64
- * 0.85 detecta variaciones leves ("hola!!" vs "hola!").
65
- */
66
61
  similarity: number;
62
+ sameChannelOnly: boolean;
67
63
  severity: Severity;
68
64
  }
69
65
  export interface LinkConfig {
@@ -90,6 +86,10 @@ export interface LinkConfig {
90
86
  customPatterns: string[];
91
87
  /** Palabras extra que, junto a un enlace, se consideran phishing. */
92
88
  extraPhishingKeywords: string[];
89
+ /** Max URLs in one message. 0 = unlimited. */
90
+ maxLinks: number;
91
+ /** Also scan embed title/description/fields. */
92
+ scanEmbeds: boolean;
93
93
  severity: Severity;
94
94
  }
95
95
  export interface ImageConfig {
@@ -113,6 +113,10 @@ export interface ImageConfig {
113
113
  * (raid / copypasta visual). 0 = desactivado.
114
114
  */
115
115
  crossUserThreshold: number;
116
+ /** MIME types to skip, e.g. `["image/gif"]`. */
117
+ skipContentTypes: string[];
118
+ /** Max image attachments per message. 0 = unlimited. */
119
+ maxAttachments: number;
116
120
  severity: Severity;
117
121
  }
118
122
  export interface MentionConfig {
@@ -120,6 +124,8 @@ export interface MentionConfig {
120
124
  maxMentions: number;
121
125
  blockEveryone: boolean;
122
126
  blockHere: boolean;
127
+ /** Same user mentioned this many times in one message. 0 = off. */
128
+ maxRepeatsOfSame: number;
123
129
  severity: Severity;
124
130
  }
125
131
  export interface CapsConfig {
@@ -135,10 +141,44 @@ export interface EmojiConfig {
135
141
  maxStickers: number;
136
142
  severity: Severity;
137
143
  }
144
+ export interface FileConfig {
145
+ enabled: boolean;
146
+ /** Extensiones bloqueadas, con o sin punto: `exe`, `.bat`. */
147
+ blockedExtensions: string[];
148
+ severity: Severity;
149
+ }
150
+ export interface ZalgoConfig {
151
+ enabled: boolean;
152
+ /** Máximo de marcas combinantes (zalgo / diacríticos apilados). */
153
+ maxCombining: number;
154
+ severity: Severity;
155
+ }
156
+ export interface NewlineConfig {
157
+ enabled: boolean;
158
+ maxNewlines: number;
159
+ severity: Severity;
160
+ }
161
+ export interface AccountConfig {
162
+ enabled: boolean;
163
+ /** Accounts younger than this many days are flagged. */
164
+ minAgeDays: number;
165
+ /** Flag users still using the default Discord avatar. */
166
+ blockDefaultAvatar: boolean;
167
+ severity: Severity;
168
+ }
169
+ export interface LengthConfig {
170
+ enabled: boolean;
171
+ maxCharacters: number;
172
+ severity: Severity;
173
+ }
138
174
  export interface TimeoutPunishment {
139
175
  enabled: boolean;
140
176
  durationMs: number;
141
177
  minStrikes: number;
178
+ /** `linear` = base * strikes, `exponential` = base * 2^(strikes-1). */
179
+ scale: TimeoutScale;
180
+ /** Cap for scaled timeouts (Discord max is 28 days). */
181
+ maxDurationMs: number;
142
182
  }
143
183
  export interface BooleanPunishment {
144
184
  enabled: boolean;
@@ -160,15 +200,28 @@ export interface PunishmentConfig {
160
200
  logChannelId: string | null;
161
201
  /** Los strikes caducan tras este tiempo. 0 = nunca. */
162
202
  strikeDecayMs: number;
203
+ /**
204
+ * Tras un castigo, no vuelve a avisar/timeout/kick/ban durante este tiempo.
205
+ * Evita 4 timeouts seguidos en el mismo burst de flood.
206
+ */
207
+ cooldownMs: number;
208
+ deleteDuringCooldown: boolean;
209
+ /** Send the warning as an embed instead of plain text. */
210
+ warnAsEmbed: boolean;
163
211
  }
164
212
  export interface ResolvedConfig {
165
213
  enabled: boolean;
166
214
  dryRun: boolean;
215
+ locale: Locale;
167
216
  ignoreBots: boolean;
168
217
  ignoreWebhooks: boolean;
169
218
  ignoreOwner: boolean;
170
- /** Ignora miembros con permiso Administrator. */
171
219
  ignoreAdministrators: boolean;
220
+ /**
221
+ * Extra permission names that skip checks, e.g. `["ManageMessages", "ModerateMembers"]`.
222
+ * Uses discord.js `PermissionFlagsBits` keys.
223
+ */
224
+ ignorePermissions: string[];
172
225
  ignored: IgnoreLists;
173
226
  flood: FloodConfig;
174
227
  duplicates: DuplicateConfig;
@@ -177,11 +230,27 @@ export interface ResolvedConfig {
177
230
  mentions: MentionConfig;
178
231
  caps: CapsConfig;
179
232
  emojis: EmojiConfig;
233
+ files: FileConfig;
234
+ zalgo: ZalgoConfig;
235
+ newlines: NewlineConfig;
236
+ accounts: AccountConfig;
237
+ length: LengthConfig;
180
238
  punishment: PunishmentConfig;
181
- /** Revisa también ediciones de mensajes. */
182
239
  checkEdits: boolean;
183
- /** Intervalo de limpieza de memoria. */
184
240
  cleanupIntervalMs: number;
241
+ /** Skip these detectors even if their `enabled` flag is true. */
242
+ disabledDetectors: DetectorType[];
243
+ /** Custom run order. Empty = built-in order. */
244
+ detectorOrder: DetectorType[];
245
+ /** Per-channel patches keyed by channel snowflake. */
246
+ channelOverrides: Record<string, DeepPartial<ResolvedConfig>>;
247
+ }
248
+ export interface AntiSpamStats {
249
+ analyzed: number;
250
+ incidents: number;
251
+ suppressed: number;
252
+ byType: Record<DetectorType, number>;
253
+ actions: Record<ActionType, number>;
185
254
  }
186
255
  export interface AntiSpamOptions extends DeepPartial<ResolvedConfig> {
187
256
  preset?: PresetName;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,6 @@ export declare function stripZalgo(text: string): string;
2
2
  export declare function normalizeText(text: string): string;
3
3
  export declare function lettersOnly(text: string): string;
4
4
  export declare function countEmojis(text: string): number;
5
+ export declare function countZalgo(text: string): number;
6
+ export declare function countNewlines(text: string): number;
5
7
  //# sourceMappingURL=normalize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhD"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -4,6 +4,8 @@ exports.stripZalgo = stripZalgo;
4
4
  exports.normalizeText = normalizeText;
5
5
  exports.lettersOnly = lettersOnly;
6
6
  exports.countEmojis = countEmojis;
7
+ exports.countZalgo = countZalgo;
8
+ exports.countNewlines = countNewlines;
7
9
  const ZALGO = /[\u0300-\u036f\u0489\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/g;
8
10
  const INVISIBLE = /[\u200b-\u200f\u202a-\u202e\u2060-\u206f\ufeff]/g;
9
11
  const MARKDOWN = /[`*_~|]+/g;
@@ -32,4 +34,10 @@ function countEmojis(text) {
32
34
  const unicode = text.match(/\p{Extended_Pictographic}/gu)?.length ?? 0;
33
35
  return custom + unicode;
34
36
  }
37
+ function countZalgo(text) {
38
+ return text.normalize("NFKD").match(ZALGO)?.length ?? 0;
39
+ }
40
+ function countNewlines(text) {
41
+ return (text.match(/\n/g) ?? []).length;
42
+ }
35
43
  //# sourceMappingURL=normalize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":";;AAKA,gCAEC;AAED,sCAYC;AAED,kCAEC;AAED,kCAIC;AA/BD,MAAM,KAAK,GAAG,4EAA4E,CAAC;AAC3F,MAAM,SAAS,GAAG,kDAAkD,CAAC;AACrE,MAAM,QAAQ,GAAG,WAAW,CAAC;AAC7B,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,UAAU,CAAC,IAAI,CAAC;SACpB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,WAAW,EAAE;SACb,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;SACjC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACvE,OAAO,MAAM,GAAG,OAAO,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":";;AAKA,gCAEC;AAED,sCAYC;AAED,kCAEC;AAED,kCAIC;AAED,gCAEC;AAED,sCAEC;AAvCD,MAAM,KAAK,GAAG,4EAA4E,CAAC;AAC3F,MAAM,SAAS,GAAG,kDAAkD,CAAC;AACrE,MAAM,QAAQ,GAAG,WAAW,CAAC;AAC7B,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,UAAU,CAAC,IAAI,CAAC;SACpB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,WAAW,EAAE;SACb,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;SACjC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACvE,OAAO,MAAM,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;AAC1C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amatiscorp/disguard",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Configurable antispam for discord.js bots: flood, repeated messages, phishing, duplicate images, and more.",
5
5
  "keywords": [
6
6
  "disguard",