yuzuha 0.3.0 → 0.3.1

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 (138) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -3
  3. package/VERSIONING.md +18 -5
  4. package/dist/commands/arguments.d.ts.map +1 -1
  5. package/dist/commands/arguments.js +40 -13
  6. package/dist/commands/arguments.js.map +1 -1
  7. package/dist/commands/builders.d.ts +1 -0
  8. package/dist/commands/builders.d.ts.map +1 -1
  9. package/dist/commands/builders.js +5 -0
  10. package/dist/commands/builders.js.map +1 -1
  11. package/dist/commands/context-like.d.ts +4 -0
  12. package/dist/commands/context-like.d.ts.map +1 -0
  13. package/dist/commands/context-like.js +2 -0
  14. package/dist/commands/context-like.js.map +1 -0
  15. package/dist/commands/context.d.ts +16 -2
  16. package/dist/commands/context.d.ts.map +1 -1
  17. package/dist/commands/context.js +53 -11
  18. package/dist/commands/context.js.map +1 -1
  19. package/dist/commands/definition.d.ts +1 -0
  20. package/dist/commands/definition.d.ts.map +1 -1
  21. package/dist/commands/definition.js.map +1 -1
  22. package/dist/commands/typed-arguments.js +2 -2
  23. package/dist/commands/typed-arguments.js.map +1 -1
  24. package/dist/domain/cdn.d.ts +23 -0
  25. package/dist/domain/cdn.d.ts.map +1 -0
  26. package/dist/domain/cdn.js +38 -0
  27. package/dist/domain/cdn.js.map +1 -0
  28. package/dist/domain/resolvers.d.ts +60 -0
  29. package/dist/domain/resolvers.d.ts.map +1 -0
  30. package/dist/domain/resolvers.js +31 -0
  31. package/dist/domain/resolvers.js.map +1 -0
  32. package/dist/domain/values.d.ts +2 -0
  33. package/dist/domain/values.d.ts.map +1 -1
  34. package/dist/domain/values.js +26 -1
  35. package/dist/domain/values.js.map +1 -1
  36. package/dist/framework/bot.d.ts +5 -0
  37. package/dist/framework/bot.d.ts.map +1 -1
  38. package/dist/framework/bot.js +44 -9
  39. package/dist/framework/bot.js.map +1 -1
  40. package/dist/framework/logging.d.ts +4 -1
  41. package/dist/framework/logging.d.ts.map +1 -1
  42. package/dist/framework/logging.js.map +1 -1
  43. package/dist/framework/options.d.ts +12 -0
  44. package/dist/framework/options.d.ts.map +1 -1
  45. package/dist/framework/options.js.map +1 -1
  46. package/dist/index.d.ts +11 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +7 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/infrastructure/fluxer/resources/channels.d.ts.map +1 -1
  51. package/dist/infrastructure/fluxer/resources/channels.js +62 -8
  52. package/dist/infrastructure/fluxer/resources/channels.js.map +1 -1
  53. package/dist/infrastructure/fluxer/resources/expressions.d.ts.map +1 -1
  54. package/dist/infrastructure/fluxer/resources/expressions.js +2 -1
  55. package/dist/infrastructure/fluxer/resources/expressions.js.map +1 -1
  56. package/dist/infrastructure/fluxer/resources/messages.d.ts +2 -1
  57. package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
  58. package/dist/infrastructure/fluxer/resources/messages.js +16 -7
  59. package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
  60. package/dist/infrastructure/fluxer/resources/users.d.ts +1 -1
  61. package/dist/infrastructure/fluxer/resources/users.d.ts.map +1 -1
  62. package/dist/infrastructure/fluxer/resources/users.js +41 -9
  63. package/dist/infrastructure/fluxer/resources/users.js.map +1 -1
  64. package/dist/infrastructure/fluxer/resources.d.ts +3 -1
  65. package/dist/infrastructure/fluxer/resources.d.ts.map +1 -1
  66. package/dist/infrastructure/fluxer/resources.js +8 -3
  67. package/dist/infrastructure/fluxer/resources.js.map +1 -1
  68. package/dist/infrastructure/fluxer/transport.d.ts +4 -1
  69. package/dist/infrastructure/fluxer/transport.d.ts.map +1 -1
  70. package/dist/infrastructure/fluxer/transport.js +41 -14
  71. package/dist/infrastructure/fluxer/transport.js.map +1 -1
  72. package/dist/ports/resources/channels.d.ts +20 -1
  73. package/dist/ports/resources/channels.d.ts.map +1 -1
  74. package/dist/ports/resources/channels.js.map +1 -1
  75. package/dist/ports/resources/users.d.ts +5 -0
  76. package/dist/ports/resources/users.d.ts.map +1 -1
  77. package/dist/ports/resources/users.js.map +1 -1
  78. package/dist/services/authorization.js +9 -9
  79. package/dist/services/authorization.js.map +1 -1
  80. package/dist/services/members.d.ts +5 -0
  81. package/dist/services/members.d.ts.map +1 -1
  82. package/dist/services/members.js +75 -5
  83. package/dist/services/members.js.map +1 -1
  84. package/dist/services/moderation.js +9 -9
  85. package/dist/services/moderation.js.map +1 -1
  86. package/dist/services/resource-authorization.d.ts.map +1 -1
  87. package/dist/services/resource-authorization.js +31 -17
  88. package/dist/services/resource-authorization.js.map +1 -1
  89. package/dist/services/retry.d.ts +17 -0
  90. package/dist/services/retry.d.ts.map +1 -0
  91. package/dist/services/retry.js +67 -0
  92. package/dist/services/retry.js.map +1 -0
  93. package/dist/shared/errors.d.ts +4 -1
  94. package/dist/shared/errors.d.ts.map +1 -1
  95. package/dist/shared/errors.js +8 -1
  96. package/dist/shared/errors.js.map +1 -1
  97. package/dist/testing.d.ts +8 -0
  98. package/dist/testing.d.ts.map +1 -1
  99. package/dist/testing.js +24 -4
  100. package/dist/testing.js.map +1 -1
  101. package/docs/API.md +11 -0
  102. package/docs/CANVAS.md +1 -1
  103. package/docs/FRAMEWORK.md +13 -0
  104. package/docs/IMAGES.md +9 -0
  105. package/docs/NATIVE.md +49 -1
  106. package/docs/PARITY-MATRIX.md +31 -32
  107. package/docs/QUICKSTART.md +2 -2
  108. package/docs/README.md +1 -1
  109. package/docs/TESTING.md +16 -0
  110. package/package.json +1 -1
  111. package/src/commands/arguments.ts +35 -13
  112. package/src/commands/builders.ts +4 -0
  113. package/src/commands/context-like.ts +7 -0
  114. package/src/commands/context.ts +56 -11
  115. package/src/commands/definition.ts +1 -0
  116. package/src/commands/typed-arguments.ts +2 -2
  117. package/src/domain/cdn.ts +55 -0
  118. package/src/domain/resolvers.ts +42 -0
  119. package/src/domain/values.ts +28 -1
  120. package/src/framework/bot.ts +41 -10
  121. package/src/framework/logging.ts +5 -1
  122. package/src/framework/options.ts +4 -0
  123. package/src/index.ts +13 -0
  124. package/src/infrastructure/fluxer/resources/channels.ts +53 -8
  125. package/src/infrastructure/fluxer/resources/expressions.ts +2 -1
  126. package/src/infrastructure/fluxer/resources/messages.ts +17 -6
  127. package/src/infrastructure/fluxer/resources/users.ts +38 -9
  128. package/src/infrastructure/fluxer/resources.ts +4 -3
  129. package/src/infrastructure/fluxer/transport.ts +42 -13
  130. package/src/ports/resources/channels.ts +11 -1
  131. package/src/ports/resources/users.ts +3 -0
  132. package/src/services/authorization.ts +9 -9
  133. package/src/services/members.ts +70 -5
  134. package/src/services/moderation.ts +9 -9
  135. package/src/services/resource-authorization.ts +31 -17
  136. package/src/services/retry.ts +74 -0
  137. package/src/shared/errors.ts +10 -1
  138. package/src/testing.ts +28 -4
@@ -2,7 +2,7 @@ import { GuardError, YuzuhaError } from '../shared/errors.js';
2
2
  export function userID(value) {
3
3
  const id = /^(?:<@!?(\d+)>|(\d+))$/.exec(value.trim());
4
4
  if (!id)
5
- throw new GuardError('Mencione um usuário ou informe um ID válido.');
5
+ throw new GuardError('Mencione um usuário ou informe um ID válido.', 'INVALID_ARGUMENT');
6
6
  return (id[1] ?? id[2]);
7
7
  }
8
8
  export function parseDuration(value) {
@@ -20,4 +20,29 @@ export function parseDuration(value) {
20
20
  }
21
21
  throw new YuzuhaError('DURATION', 'Duração inválida. Use 500ms, 5s, 10m, 2h ou 1d.');
22
22
  }
23
+ export const MAX_TIMEOUT_MS = 28 * 24 * 60 * 60 * 1000;
24
+ const DURATION_UNITS = [
25
+ [86_400_000, 'dia', 'dias'],
26
+ [3_600_000, 'hora', 'horas'],
27
+ [60_000, 'minuto', 'minutos'],
28
+ [1_000, 'segundo', 'segundos'],
29
+ [1, 'milissegundo', 'milissegundos'],
30
+ ];
31
+ export function formatDuration(ms) {
32
+ if (!Number.isFinite(ms) || !Number.isInteger(ms) || ms <= 0) {
33
+ throw new YuzuhaError('DURATION', 'Informe uma duração inteira positiva em milissegundos.');
34
+ }
35
+ const parts = [];
36
+ let rest = ms;
37
+ for (const [size, singular, plural] of DURATION_UNITS) {
38
+ if (parts.length === 2)
39
+ break;
40
+ const count = Math.floor(rest / size);
41
+ if (count <= 0)
42
+ continue;
43
+ parts.push(`${count} ${count === 1 ? singular : plural}`);
44
+ rest -= count * size;
45
+ }
46
+ return parts.length === 1 ? parts[0] : `${parts[0]} e ${parts[1]}`;
47
+ }
23
48
  //# sourceMappingURL=values.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/domain/values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,MAAM,EAAE,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,8CAA8C,CAAC,CAAC;IAC9E,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAE,CAAC,CAAC;YACrG,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,iDAAiD,CAAC,CAAC;AACvF,CAAC","sourcesContent":["import { GuardError, YuzuhaError } from '../shared/errors.js';\n\nexport function userID(value: string): string {\n const id = /^(?:<@!?(\\d+)>|(\\d+))$/.exec(value.trim());\n if (!id) throw new GuardError('Mencione um usuário ou informe um ID válido.');\n return (id[1] ?? id[2])!;\n}\n\nexport function parseDuration(value: string | number): number {\n if (typeof value === 'number') {\n if (Number.isSafeInteger(value) && value > 0) return value;\n } else {\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m|h|d)$/.exec(value.trim());\n if (match) {\n const ms = Number(match[1]) * ({ ms: 1, s: 1000, m: 60_000, h: 3600_000, d: 86400_000 }[match[2]!]!);\n if (Number.isSafeInteger(ms) && ms > 0) return ms;\n }\n }\n throw new YuzuhaError('DURATION', 'Duração inválida. Use 500ms, 5s, 10m, 2h ou 1d.');\n}\n"]}
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/domain/values.ts"],"names":[],"mappings":"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","sourcesContent":["import { GuardError, YuzuhaError } from '../shared/errors.js';\n\nexport function userID(value: string): string {\n const id = /^(?:<@!?(\\d+)>|(\\d+))$/.exec(value.trim());\n if (!id) throw new GuardError('Mencione um usuário ou informe um ID válido.', 'INVALID_ARGUMENT');\n return (id[1] ?? id[2])!;\n}\n\nexport function parseDuration(value: string | number): number {\n if (typeof value === 'number') {\n if (Number.isSafeInteger(value) && value > 0) return value;\n } else {\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m|h|d)$/.exec(value.trim());\n if (match) {\n const ms = Number(match[1]) * ({ ms: 1, s: 1000, m: 60_000, h: 3600_000, d: 86400_000 }[match[2]!]!);\n if (Number.isSafeInteger(ms) && ms > 0) return ms;\n }\n }\n throw new YuzuhaError('DURATION', 'Duração inválida. Use 500ms, 5s, 10m, 2h ou 1d.');\n}\n\n\nexport const MAX_TIMEOUT_MS = 28 * 24 * 60 * 60 * 1000;\n\nconst DURATION_UNITS: [number, string, string][] = [\n [86_400_000, 'dia', 'dias'],\n [3_600_000, 'hora', 'horas'],\n [60_000, 'minuto', 'minutos'],\n [1_000, 'segundo', 'segundos'],\n [1, 'milissegundo', 'milissegundos'],\n];\n\nexport function formatDuration(ms: number): string {\n if (!Number.isFinite(ms) || !Number.isInteger(ms) || ms <= 0) {\n throw new YuzuhaError('DURATION', 'Informe uma duração inteira positiva em milissegundos.');\n }\n const parts: string[] = [];\n let rest = ms;\n for (const [size, singular, plural] of DURATION_UNITS) {\n if (parts.length === 2) break;\n const count = Math.floor(rest / size);\n if (count <= 0) continue;\n parts.push(`${count} ${count === 1 ? singular : plural}`);\n rest -= count * size;\n }\n return parts.length === 1 ? parts[0]! : `${parts[0]} e ${parts[1]}`;\n}\n"]}
@@ -30,6 +30,10 @@ export declare class Yuzuha {
30
30
  private readonly limits;
31
31
  private readonly active;
32
32
  private readonly shutdown;
33
+ private reliability;
34
+ private timers;
35
+ private readonly pendingTimers;
36
+ private cdnService;
33
37
  private readonly events;
34
38
  private readonly execution;
35
39
  private listening;
@@ -61,6 +65,7 @@ export declare class Yuzuha {
61
65
  listCommands(): Command[];
62
66
  help(command?: string, prefix?: string): string;
63
67
  get signal(): AbortSignal;
68
+ deleteLater(channelID: string, messageID: string, ttlMs: number): void;
64
69
  isReady(): boolean;
65
70
  get uptime(): number | null;
66
71
  assertReady(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/framework/bot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/framework/bot.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ import { route, validatePrefixes } from './routing.js';
15
15
  import { defineEvent, NativeEvents } from './events.js';
16
16
  import { ScheduleExecutionError, Scheduler } from '../services/scheduler.js';
17
17
  import { HttpService } from '../services/http.js';
18
+ import { createCdn } from '../domain/cdn.js';
18
19
  import { emitLog } from './logging.js';
19
20
  import { cancellationError } from '../services/cancellation.js';
20
21
  import { EventContext } from '../commands/event-context.js';
@@ -45,6 +46,10 @@ export class Yuzuha {
45
46
  limits;
46
47
  active = new Set();
47
48
  shutdown = new AbortController();
49
+ reliability = {};
50
+ timers = { setTimeout: (fn, ms) => setTimeout(fn, ms), clearTimeout: () => { } };
51
+ pendingTimers = new Set();
52
+ cdnService = createCdn();
48
53
  events;
49
54
  execution = new AsyncLocalStorage();
50
55
  listening = false;
@@ -80,8 +85,15 @@ export class Yuzuha {
80
85
  setMaxListeners(0, this.shutdown.signal);
81
86
  this.limits = new RateLimits(options.now);
82
87
  this.client = options.client ?? new Client(options.clientOptions);
83
- this.transport = options.transport ?? new FluxerTransport(this.client);
84
- this.resources = options.resources ?? new FluxerResources(this.client);
88
+ this.reliability = { retry: options.retry, signal: this.shutdown.signal,
89
+ onRetry: attempt => { if (options.onLog)
90
+ void emitLog(this.options, { event: 'transport.retry', attempt }); } };
91
+ this.transport = options.transport ?? new FluxerTransport(this.client, this.reliability);
92
+ this.resources = options.resources ?? new FluxerResources(this.client, this.cdnService, this.reliability);
93
+ this.cdnService = createCdn(options.cdn?.mediaBase);
94
+ if (options.unsafeDisableResourceAuthorization && options.onLog)
95
+ void emitLog(this.options, { event: 'authorization.disabled' });
96
+ this.timers = options.timers ?? { setTimeout: (fn, ms) => setTimeout(fn, ms).unref(), clearTimeout: (handle) => clearTimeout(handle) };
85
97
  this.store = options.store ?? new JsonStore(defaultDataPath(options.name));
86
98
  this.scheduler = options.scheduler === false ? undefined : options.scheduler ?? new Scheduler(this.store, (task, signal) => this.runScheduled(task, signal), {
87
99
  now: options.now,
@@ -168,6 +180,17 @@ export class Yuzuha {
168
180
  listCommands() { return this.registry.list(); }
169
181
  help(command, prefix = '') { return this.registry.help(command, prefix); }
170
182
  get signal() { return this.shutdown.signal; }
183
+ deleteLater(channelID, messageID, ttlMs) {
184
+ const handle = this.timers.setTimeout(() => {
185
+ this.pendingTimers.delete(handle);
186
+ void this.transport.delete(channelID, messageID).catch(error => {
187
+ if (this.options.onLog)
188
+ void emitLog(this.options, { event: 'message.ttl_failed', messageID, channelID,
189
+ errorCode: error.code });
190
+ });
191
+ }, ttlMs);
192
+ this.pendingTimers.add(handle);
193
+ }
171
194
  isReady() { return this.client.isReady(); }
172
195
  get uptime() { return this.client.uptime; }
173
196
  assertReady() {
@@ -209,7 +232,9 @@ export class Yuzuha {
209
232
  policy: definition.http, transport: this.transport, store: this.store, resources: this.resources,
210
233
  scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,
211
234
  canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now,
212
- cooldown: this.contextCooldown, signal: this.shutdown.signal });
235
+ cdn: this.cdnService, disableResourceAuthorization: this.options.unsafeDisableResourceAuthorization === true,
236
+ cooldown: this.contextCooldown, signal: this.shutdown.signal,
237
+ deleteLater: (channelID, messageID, ttlMs) => this.deleteLater(channelID, messageID, ttlMs) });
213
238
  try {
214
239
  await definition.run(ctx, ...args);
215
240
  }
@@ -245,7 +270,9 @@ export class Yuzuha {
245
270
  const ctx = new EventContext({ ...source, channelID: definition.channelID, actorID: definition.actorID,
246
271
  policy: definition.http, transport: this.transport, store: this.store, resources: this.resources,
247
272
  scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,
248
- canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now, cooldown: this.contextCooldown, signal });
273
+ canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now, cooldown: this.contextCooldown, signal,
274
+ cdn: this.cdnService, disableResourceAuthorization: this.options.unsafeDisableResourceAuthorization === true,
275
+ deleteLater: (channelID, messageID, ttlMs) => this.deleteLater(channelID, messageID, ttlMs) });
249
276
  const started = this.options.onLog ? performance.now() : 0;
250
277
  let outcome = 'success';
251
278
  try {
@@ -254,7 +281,7 @@ export class Yuzuha {
254
281
  const output = engine.text(await engine.execute(program, ctx)).trim();
255
282
  if (output) {
256
283
  if (!ctx.channelID)
257
- throw new GuardError('Defina um canal para a saída deste evento.');
284
+ throw new GuardError('Defina um canal para a saída deste evento.', 'INVALID_ARGUMENT');
258
285
  await ctx.send(output, ctx.channelID);
259
286
  }
260
287
  }
@@ -326,6 +353,9 @@ export class Yuzuha {
326
353
  this.client.on(Events.Error, this.errorListener);
327
354
  if (needsShardListener)
328
355
  this.client.on(Events.ShardError, this.shardErrorListener);
356
+ for (const handle of this.pendingTimers)
357
+ this.timers.clearTimeout(handle);
358
+ this.pendingTimers.clear();
329
359
  try {
330
360
  await this.client.destroy();
331
361
  }
@@ -364,6 +394,9 @@ export class Yuzuha {
364
394
  throw new AggregateError(failures.map(item => item.reason), 'Falha ao encerrar música ou voz.');
365
395
  }
366
396
  finally {
397
+ for (const handle of this.pendingTimers)
398
+ this.timers.clearTimeout(handle);
399
+ this.pendingTimers.clear();
367
400
  try {
368
401
  await this.client.destroy();
369
402
  }
@@ -447,7 +480,9 @@ export class Yuzuha {
447
480
  help: this.contextHelp, cooldown: this.contextCooldown,
448
481
  native: { client: this.client, message: message.raw instanceof Message ? message.raw : undefined },
449
482
  resources: this.resources, scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,
450
- canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now, signal, executionID });
483
+ canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now, signal, executionID,
484
+ cdn: this.cdnService, disableResourceAuthorization: this.options.unsafeDisableResourceAuthorization === true,
485
+ deleteLater: (channelID, messageID, ttlMs) => this.deleteLater(channelID, messageID, ttlMs) });
451
486
  if (this.options.onLog)
452
487
  await emitLog(this.options, { event: 'command.start', executionID: ctx.executionID, command: ctx.command.name });
453
488
  if (signal.aborted)
@@ -457,7 +492,7 @@ export class Yuzuha {
457
492
  for (const check of compiled.command.checks ?? []) {
458
493
  const result = await check(current);
459
494
  if (result === false || typeof result === 'string')
460
- throw new GuardError(typeof result === 'string' ? result : 'Você não pode executar este comando.');
495
+ throw new GuardError(typeof result === 'string' ? result : 'Você não pode executar este comando.', 'GENERIC');
461
496
  }
462
497
  const execute = async () => {
463
498
  if (compiled.program) {
@@ -469,7 +504,7 @@ export class Yuzuha {
469
504
  else if (compiled.command.run)
470
505
  await compiled.command.run(current);
471
506
  else
472
- throw new GuardError(`${resolved.input ? 'Subcomando desconhecido.\n' : ''}${this.help(compiled.command.name, prefix)}`);
507
+ throw new GuardError(`${resolved.input ? 'Subcomando desconhecido.\n' : ''}${this.help(compiled.command.name, prefix)}`, 'INVALID_ARGUMENT');
473
508
  };
474
509
  const local = compiled.command.middleware ?? [];
475
510
  if (this.middleware.length)
@@ -484,7 +519,7 @@ export class Yuzuha {
484
519
  outcome = error instanceof GuardError ? 'guarded' : 'error';
485
520
  try {
486
521
  if (!signal.aborted)
487
- await this.transport.reply(message, { content: userError(error, ctx) });
522
+ await (ctx ? ctx.reply(userError(error, ctx)) : this.transport.reply(message, { content: userError(error, ctx) }));
488
523
  }
489
524
  catch (replyError) {
490
525
  await reportError(this.options, replyError, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/framework/bot.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { setMaxListeners } from 'node:events';\nimport { Client, Events, Message } from '@fluxerjs/core';\nimport type { ClientEventName, ClientEvents } from '@fluxerjs/core';\nimport { FluxerTransport, incoming } from '../adapter.js';\nimport { FluxerResources } from '../infrastructure/fluxer/resources.js';\nimport type { Resources } from '../ports/resources.js';\nimport { CommandContext } from '../context.js';\nimport type { Command } from '../context.js';\nimport { defineCommand } from '../commands/definition.js';\nimport type { NativeCommandDefinition } from '../commands/definition.js';\nimport type { ArgumentSchema } from '../commands/builders.js';\nimport type { IncomingMessage, Store, Transport } from '../contracts.js';\nimport { GuardError, PartialModerationError, YuzuhaError } from '../errors.js';\nimport { JsonStore, defaultDataPath } from '../store.js';\nimport { CommandRegistry, functionsRequired } from './command-registry.js';\nimport type { CompiledCommand } from './command-registry.js';\nimport { runMiddleware } from './middleware.js';\nimport type { DispatchResult, Middleware, YuzuhaOptions, YuzuhaPlugin } from './options.js';\nimport { RateLimits } from './rate-limits.js';\nimport { reportError, userError } from './reporting.js';\nimport { route, validatePrefixes } from './routing.js';\nimport { defineEvent, NativeEvents } from './events.js';\nimport type { ContextEventDefinition, NativeEvent, NativeListener } from './events.js';\nimport { ScheduleExecutionError, Scheduler } from '../services/scheduler.js';\nimport type { ScheduleRecord } from '../domain/state.js';\nimport { HttpService } from '../services/http.js';\nimport { emitLog } from './logging.js';\nimport { cancellationError } from '../services/cancellation.js';\nimport { EventContext } from '../commands/event-context.js';\nimport { adaptScriptEvent, scriptEventNames, validateScriptEvent } from './script-events.js';\nimport type { ScriptEventDefinition } from './script-events.js';\nimport type { ScriptEngine } from '../ports/script-engine.js';\nimport type { MusicManager } from '../services/music.js';\nimport type { NativeVoice } from '../ports/voice.js';\nimport { canvasRenderer } from '../infrastructure/canvas/render.js';\n\ntype RoutedCommand = { compiled: CompiledCommand; input: string; prefix: string };\nconst ignored: Promise<DispatchResult> = Promise.resolve('ignored');\n\nfunction assertEngine(engine: unknown): ScriptEngine {\n const candidate = engine as Partial<Record<keyof ScriptEngine, unknown>> | null | undefined;\n if (!candidate || (['compile', 'execute', 'functions', 'registerAll', 'fork', 'text'] as const).some(key => typeof candidate[key] !== 'function')) {\n throw new YuzuhaError('ENGINE_INVALID', 'Engine de function mode inválido: precisa de compile, execute, functions, registerAll, fork e text.');\n }\n return engine as ScriptEngine;\n}\n\nexport class Yuzuha {\n readonly client: Client;\n readonly transport: Transport;\n readonly store: Store;\n readonly resources: Resources;\n readonly scheduler?: Scheduler;\n readonly http?: HttpService;\n readonly music?: MusicManager;\n readonly voice?: NativeVoice;\n private scriptEngine?: ScriptEngine;\n private readonly registry: CommandRegistry;\n private readonly middleware: Middleware[] = [];\n private readonly plugins = new Set<string>();\n private readonly limits: RateLimits;\n private readonly active = new Set<Promise<unknown>>();\n private readonly shutdown = new AbortController();\n private readonly events: NativeEvents;\n private readonly execution = new AsyncLocalStorage<boolean>();\n private listening = false;\n private closing = false;\n private closeTask?: Promise<void>;\n private loginTask?: Promise<void>;\n private loginAbort?: AbortController;\n private readonly listener: (message: Message) => void;\n private readonly gatewayErrors = new WeakSet<Error>();\n private readonly gatewayReports = new Set<Promise<void>>();\n private readonly errorListener = (error: Error): void => {\n if (this.gatewayErrors.delete(error)) return;\n this.reportGatewayError(error);\n };\n private readonly shardErrorListener = (_shardID: number, error: Error): void => {\n // The SDK emits shardError followed synchronously by error for the same failure.\n this.gatewayErrors.add(error);\n queueMicrotask(() => this.gatewayErrors.delete(error));\n this.reportGatewayError(error);\n };\n private reportGatewayError(error: Error): void {\n const task = this.execution.run(true, () => reportError(this.options, error));\n this.gatewayReports.add(task);\n void task.then(() => this.gatewayReports.delete(task), () => this.gatewayReports.delete(task));\n }\n private prefixSource?: string | string[];\n private prefixes: string[] = [];\n private readonly contextCooldown = (key: string, duration: number) => this.limits.cooldown(key, duration);\n private readonly contextHelp = () => this.help();\n\n constructor(public readonly options: YuzuhaOptions = {}) {\n setMaxListeners(0, this.shutdown.signal);\n this.limits = new RateLimits(options.now);\n this.client = options.client ?? new Client(options.clientOptions);\n this.transport = options.transport ?? new FluxerTransport(this.client);\n this.resources = options.resources ?? new FluxerResources(this.client);\n this.store = options.store ?? new JsonStore(defaultDataPath(options.name));\n this.scheduler = options.scheduler === false ? undefined : options.scheduler ?? new Scheduler(this.store,\n (task, signal) => this.runScheduled(task, signal), {\n now: options.now,\n onEvent: event => this.execution.run(true, () => emitLog(this.options, event)),\n onError: error => this.execution.run(true, () => reportError(this.options, error)),\n });\n this.http = options.http === false ? undefined : options.http ?? new HttpService();\n this.music = options.music;\n this.voice = options.voice;\n if (options.engine !== undefined) this.scriptEngine = assertEngine(options.engine);\n this.registry = new CommandRegistry(() => this.scriptEngine, command => {\n if (command.http) (this.http ?? new HttpService()).withPolicy(command.http);\n });\n this.events = new NativeEvents(this.client, work => this.scheduleEvent(work));\n if (typeof options.prefix !== 'function') this.resolvePrefixes(options.prefix ?? '!');\n this.listener = message => { void this.handle(incoming(message)).catch(error => reportError(this.options, error)); };\n this.client.on(Events.Error, this.errorListener);\n this.client.on(Events.ShardError, this.shardErrorListener);\n }\n\n /** Engine de function mode instalado, quando presente. */\n get engine(): ScriptEngine | undefined { return this.scriptEngine; }\n\n /** Instala o motor de function mode; exigido por comandos com `code` e eventos de script. */\n useEngine(engine: ScriptEngine): this {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n if (this.scriptEngine) throw new YuzuhaError('ENGINE_INSTALLED', 'O bot já tem um engine de function mode.');\n this.scriptEngine = assertEngine(engine);\n return this;\n }\n\n use(middleware: Middleware): this {\n if (typeof middleware !== 'function') throw new YuzuhaError('MIDDLEWARE', 'Middleware deve ser uma função.');\n this.middleware.push(middleware); return this;\n }\n plugin(plugin: YuzuhaPlugin): this {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n if (!plugin.name || this.plugins.has(plugin.name)) throw new YuzuhaError('PLUGIN_DUPLICATE', 'Plugin sem nome ou já instalado.');\n if ((plugin.middleware ?? []).some(item => typeof item !== 'function')) throw new YuzuhaError('PLUGIN_MIDDLEWARE', 'Middleware de plugin inválido.');\n const pending = [...plugin.commands ?? []], inspected = new Set<Command>();\n let hasScript = Boolean(plugin.scriptEvents?.length);\n while (pending.length && !hasScript) {\n const command = pending.pop()!;\n if (!command || inspected.has(command)) continue;\n inspected.add(command);\n hasScript = typeof command.code === 'string';\n if (Array.isArray(command.subcommands)) pending.push(...command.subcommands);\n }\n if (hasScript || plugin.functions?.length) {\n if (!this.scriptEngine) throw functionsRequired();\n }\n const stagedEngine = this.scriptEngine?.fork();\n stagedEngine?.registerAll(plugin.functions ?? []);\n const commitCommands = this.registry.prepare(plugin.commands ?? [], stagedEngine);\n for (const event of plugin.events ?? []) this.events.validate(event);\n const scriptEvents = (plugin.scriptEvents ?? []).map(event => this.prepareScriptEvent(event, stagedEngine));\n this.scriptEngine?.registerAll(plugin.functions ?? []);\n commitCommands();\n this.middleware.push(...(plugin.middleware ?? []));\n for (const event of plugin.events ?? []) this.events.add(event);\n for (const event of scriptEvents) this.events.add(event);\n this.plugins.add(plugin.name);\n return this;\n }\n\n command<const S extends ArgumentSchema = {}, const F extends ArgumentSchema = {}>(command: NativeCommandDefinition<S, F>): this;\n command(command: Command): this;\n command(command: Command | NativeCommandDefinition<ArgumentSchema, ArgumentSchema>): this {\n this.registry.add(defineCommand(command as NativeCommandDefinition<ArgumentSchema, ArgumentSchema>));\n return this;\n }\n load(directory: string, replace = true): Promise<void> { return this.registry.load(directory, replace ? 'replace' : 'append'); }\n reload(directory: string): Promise<void> { return this.registry.load(directory, 'reload'); }\n listCommands(): Command[] { return this.registry.list(); }\n help(command?: string, prefix = ''): string { return this.registry.help(command, prefix); }\n get signal(): AbortSignal { return this.shutdown.signal; }\n isReady(): boolean { return this.client.isReady(); }\n get uptime(): number | null { return this.client.uptime; }\n assertReady(): void {\n try { this.client.assertReady(); }\n catch { throw new YuzuhaError('BOT_NOT_READY', 'O bot ainda não está pronto.'); }\n }\n\n on<K extends ClientEventName>(event: K, listener: NativeListener<K>): this {\n this.events.add(defineEvent({ event, run: listener }), listener); return this;\n }\n once<K extends ClientEventName>(event: K, listener: NativeListener<K>): this {\n this.events.add(defineEvent({ event, once: true, run: listener }), listener); return this;\n }\n off<K extends ClientEventName>(event: K, listener: NativeListener<K>): this {\n this.events.off(event, listener); return this;\n }\n event(event: NativeEvent): this { this.events.add(event); return this; }\n\n contextEvent<K extends import('../domain/events.js').ScriptEventName>(definition: ContextEventDefinition<K>): this {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n if (!scriptEventNames.includes(definition.event) || typeof definition.run !== 'function' || (definition.once !== undefined && typeof definition.once !== 'boolean')\n || (definition.ignoreBots !== undefined && typeof definition.ignoreBots !== 'boolean')\n || [definition.channelID, definition.actorID].some(id => id !== undefined && (typeof id !== 'string' || !/^\\d+$/.test(id)))) {\n throw new YuzuhaError('EVENT', 'Evento com contexto ou opções inválidos.');\n }\n if (definition.http) (this.http ?? new HttpService()).withPolicy(definition.http);\n this.events.add({ event: definition.event, once: definition.once ?? false, invoke: async (args: unknown[]) => {\n const source = adaptScriptEvent(definition.event, args);\n if ((definition.ignoreBots ?? true) && source.event.userBot) return;\n const ctx = new EventContext({ ...source, channelID: definition.channelID, actorID: definition.actorID,\n policy: definition.http, transport: this.transport, store: this.store, resources: this.resources,\n scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,\n canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now,\n cooldown: this.contextCooldown, signal: this.shutdown.signal });\n try { await definition.run(ctx, ...args as ClientEvents[K]); }\n catch (error) { await reportError(this.options, error, ctx); }\n } });\n return this;\n }\n\n scriptEvent(definition: ScriptEventDefinition): this {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n if (!this.scriptEngine) throw functionsRequired();\n this.events.add(this.prepareScriptEvent(definition));\n return this;\n }\n private prepareScriptEvent(definition: ScriptEventDefinition, engine = this.scriptEngine): NativeEvent {\n if (!engine) throw functionsRequired();\n validateScriptEvent(definition);\n const options = structuredClone(definition);\n if (options.http) (this.http ?? new HttpService()).withPolicy(options.http);\n const program = engine.compile(options.code, `<event:${options.event}>`);\n return { event: options.event, once: options.once ?? false, invoke: args => this.runScriptEvent(options, program, args, engine) };\n }\n private async runScriptEvent(definition: ScriptEventDefinition, program: unknown, args: unknown[], engine: ScriptEngine): Promise<void> {\n const source = adaptScriptEvent(definition.event, args);\n if ((definition.ignoreBots ?? true) && source.event.userBot) return;\n const signal = this.shutdown.signal;\n const ctx = new EventContext({ ...source, channelID: definition.channelID, actorID: definition.actorID,\n policy: definition.http, transport: this.transport, store: this.store, resources: this.resources,\n scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,\n canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now, cooldown: this.contextCooldown, signal });\n const started = this.options.onLog ? performance.now() : 0;\n let outcome: DispatchResult = 'success';\n try {\n if (this.options.onLog) await emitLog(this.options, { event: 'event.start', executionID: ctx.executionID, command: ctx.command.name });\n const output = engine.text(await engine.execute(program, ctx)).trim();\n if (output) {\n if (!ctx.channelID) throw new GuardError('Defina um canal para a saída deste evento.');\n await ctx.send(output, ctx.channelID);\n }\n } catch (error) {\n outcome = error instanceof GuardError ? 'guarded' : 'error';\n await reportError(this.options, error, ctx);\n } finally {\n if (this.options.onLog) await emitLog(this.options, { event: 'event.finish', executionID: ctx.executionID,\n command: ctx.command.name, outcome, durationMs: performance.now() - started });\n }\n }\n\n private scheduleEvent(work: () => unknown | Promise<unknown>): void {\n if (this.closing) return;\n const task = this.execution.run(true, async () => {\n try { await Promise.resolve().then(work); } catch (error) { await reportError(this.options, error); }\n });\n this.active.add(task);\n void task.then(() => this.active.delete(task), () => this.active.delete(task));\n }\n\n private async runScheduled(task: ScheduleRecord, signal: AbortSignal): Promise<void> {\n if (this.closing || signal.aborted) throw cancellationError();\n const configured = typeof this.options.prefix === 'function'\n ? await this.options.prefix({ channelID: task.channelID, guildID: task.guildID } as IncomingMessage)\n : this.options.prefix ?? '!';\n const prefixes = this.resolvePrefixes(configured);\n const prefix = (Array.isArray(prefixes) ? prefixes[0] : prefixes) ?? '!';\n const suffix = task.input ? ` ${task.input}` : '';\n let retryable = true, cause: unknown;\n const outcome = await this.handleMessage({ id: `schedule-${task.id}-${task.claimID ?? Date.now()}`, content: `${prefix}${task.command}${suffix}`,\n authorID: task.authorID, authorName: 'Scheduler', authorBot: false,\n channelID: task.channelID, guildID: task.guildID, mentions: [] }, (error, ctx) => {\n cause = error; retryable = !(error instanceof GuardError || error instanceof PartialModerationError) && !ctx?.hasModerationEffect;\n }, signal, task.claimID ?? undefined);\n if (outcome !== 'success') throw new ScheduleExecutionError(outcome === 'error' && retryable, cause);\n }\n\n login(token = process.env.FLUXER_BOT_TOKEN): Promise<void> {\n if (this.closing) return Promise.reject(new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.'));\n if (!token?.trim()) return Promise.reject(new YuzuhaError('TOKEN_MISSING', 'Defina FLUXER_BOT_TOKEN.'));\n if (this.loginTask) return this.loginTask;\n this.scheduler?.start();\n this.client.on(Events.MessageCreate, this.listener);\n this.listening = true;\n this.loginAbort = new AbortController();\n const task = this.client.login(token, { signal: this.loginAbort.signal }).then(() => {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot foi encerrado durante o login.');\n }).catch(async error => {\n this.client.off(Events.MessageCreate, this.listener); this.listening = false;\n this.scheduler?.stop();\n await this.scheduler?.drain();\n const needsErrorListener = !this.client.listeners(Events.Error).includes(this.errorListener);\n const needsShardListener = !this.client.listeners(Events.ShardError).includes(this.shardErrorListener);\n if (needsErrorListener) this.client.on(Events.Error, this.errorListener);\n if (needsShardListener) this.client.on(Events.ShardError, this.shardErrorListener);\n try { await this.client.destroy(); }\n finally {\n if (needsErrorListener) this.client.off(Events.Error, this.errorListener);\n if (needsShardListener) this.client.off(Events.ShardError, this.shardErrorListener);\n await Promise.allSettled([...this.gatewayReports]);\n }\n throw error;\n });\n this.loginTask = task;\n void task.catch(() => { if (this.loginTask === task) this.loginTask = undefined; });\n return task;\n }\n\n destroy(): Promise<void> {\n if (this.closeTask) return this.execution.getStore() ? Promise.resolve() : this.closeTask;\n this.closing = true;\n this.shutdown.abort();\n this.loginAbort?.abort();\n this.scheduler?.stop();\n this.events.close();\n if (this.listening) this.client.off(Events.MessageCreate, this.listener);\n this.listening = false;\n this.closeTask = (async () => {\n await Promise.allSettled([...this.active]);\n await this.scheduler?.drain();\n try {\n const results = await Promise.allSettled([this.music?.close(), this.voice?.close()]);\n const failures = results.filter((item): item is PromiseRejectedResult => item.status === 'rejected');\n if (failures.length) throw new AggregateError(failures.map(item => item.reason), 'Falha ao encerrar música ou voz.');\n }\n finally {\n try { await this.client.destroy(); }\n finally {\n this.client.off(Events.Error, this.errorListener);\n this.client.off(Events.ShardError, this.shardErrorListener);\n await Promise.allSettled([...this.gatewayReports]);\n if (!this.options.store) await this.store.close?.();\n }\n }\n })();\n return this.execution.getStore() ? Promise.resolve() : this.closeTask;\n }\n\n handle(message: IncomingMessage): Promise<DispatchResult> {\n return this.handleMessage(message);\n }\n\n private resolvePrefixes(source: string | string[]): string[] {\n const previous = this.prefixSource;\n if (typeof source === 'string' && source === previous) return this.prefixes;\n if (Array.isArray(source) && Array.isArray(previous) && source.length === previous.length) {\n let same = true;\n for (let index = 0; index < source.length; index++) if (source[index] !== previous[index]) { same = false; break; }\n if (same) return this.prefixes;\n }\n const prefixes = validatePrefixes(source);\n this.prefixSource = Array.isArray(source) ? [...source] : source;\n return this.prefixes = prefixes;\n }\n\n private resolveCommand(message: IncomingMessage, configured: string | string[]): RoutedCommand | undefined {\n const routed = route(message.content, this.resolvePrefixes(configured));\n if (!routed) return;\n const resolved = this.registry.resolve(routed.name, routed.input);\n if (!resolved || this.limits.duplicate(message.channelID, message.id)) return;\n return { ...resolved, prefix: routed.prefix };\n }\n\n private handleMessage(message: IncomingMessage, onFailure?: (error: unknown, ctx?: CommandContext) => void, parentSignal?: AbortSignal, executionID?: string): Promise<DispatchResult> {\n if (this.closing || message.authorBot || message.authorID === this.transport.botID) return ignored;\n let routed: RoutedCommand | undefined;\n if (typeof this.options.prefix !== 'function') {\n try { routed = this.resolveCommand(message, this.options.prefix ?? '!'); }\n catch (error) { return Promise.reject(error); }\n if (!routed) return ignored;\n }\n const signal = parentSignal ? AbortSignal.any([this.shutdown.signal, parentSignal]) : this.shutdown.signal;\n const task = this.execution.run(true, () => this.dispatch(message, signal, onFailure, executionID, routed));\n this.active.add(task);\n void task.then(() => this.active.delete(task), () => this.active.delete(task));\n return task;\n }\n\n private async dispatch(message: IncomingMessage, signal: AbortSignal, onFailure?: (error: unknown, ctx?: CommandContext) => void, executionID?: string, resolved?: RoutedCommand): Promise<DispatchResult> {\n if (!resolved) {\n const configured = typeof this.options.prefix === 'function' ? await this.options.prefix(message) : this.options.prefix ?? '!';\n if (this.closing || signal.aborted) return 'ignored';\n resolved = this.resolveCommand(message, configured);\n }\n if (!resolved) return 'ignored';\n const { compiled, prefix } = resolved;\n let ctx: CommandContext | undefined;\n let outcome: DispatchResult = 'success';\n const started = this.options.onLog ? performance.now() : 0;\n try {\n ctx = new CommandContext({ message, transport: this.transport, store: this.store, command: compiled.command,\n input: resolved.input, prefix, lineage: compiled.lineage,\n help: this.contextHelp, cooldown: this.contextCooldown,\n native: { client: this.client, message: message.raw instanceof Message ? message.raw : undefined },\n resources: this.resources, scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,\n canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now, signal, executionID });\n if (this.options.onLog) await emitLog(this.options, { event: 'command.start', executionID: ctx.executionID, command: ctx.command.name });\n if (signal.aborted) throw cancellationError();\n await ctx.prepare();\n const current = ctx;\n for (const check of compiled.command.checks ?? []) {\n const result = await check(current);\n if (result === false || typeof result === 'string') throw new GuardError(typeof result === 'string' ? result : 'Você não pode executar este comando.');\n }\n const execute = async () => {\n if (compiled.program) {\n const programEngine = (compiled as { programEngine?: ScriptEngine }).programEngine ?? this.scriptEngine!;\n const output = programEngine.text(await programEngine.execute(compiled.program, current)).trim();\n if (output) await current.reply(output);\n } else if (compiled.command.run) await compiled.command.run(current);\n else throw new GuardError(`${resolved.input ? 'Subcomando desconhecido.\\n' : ''}${this.help(compiled.command.name, prefix)}`);\n };\n const local = compiled.command.middleware ?? [];\n if (this.middleware.length) await runMiddleware(local.length ? [...this.middleware, ...local] : this.middleware, current, execute);\n else if (local.length) await runMiddleware(local, current, execute);\n else await execute();\n } catch (error) {\n onFailure?.(error, ctx);\n outcome = error instanceof GuardError ? 'guarded' : 'error';\n try { if (!signal.aborted) await this.transport.reply(message, { content: userError(error, ctx) }); }\n catch (replyError) { await reportError(this.options, replyError, ctx); }\n if (!(error instanceof GuardError)) await reportError(this.options, error, ctx);\n }\n if (ctx && this.options.onCommand) {\n try { await this.options.onCommand(ctx, outcome); }\n catch (error) { await reportError(this.options, error, ctx); }\n }\n if (ctx && this.options.onLog) await emitLog(this.options, { event: 'command.finish', executionID: ctx.executionID,\n command: ctx.command.name, outcome, durationMs: performance.now() - started });\n return outcome;\n }\n}\n\nexport { Yuzuha as Bot };\n"]}
1
+ {"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/framework/bot.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { setMaxListeners } from 'node:events';\nimport { Client, Events, Message } from '@fluxerjs/core';\nimport type { ClientEventName, ClientEvents } from '@fluxerjs/core';\nimport { FluxerTransport, incoming } from '../adapter.js';\nimport { FluxerResources } from '../infrastructure/fluxer/resources.js';\nimport type { Resources } from '../ports/resources.js';\nimport { CommandContext } from '../context.js';\nimport type { Command } from '../context.js';\nimport { defineCommand } from '../commands/definition.js';\nimport type { NativeCommandDefinition } from '../commands/definition.js';\nimport type { ArgumentSchema } from '../commands/builders.js';\nimport type { IncomingMessage, Store, Transport } from '../contracts.js';\nimport { GuardError, PartialModerationError, YuzuhaError } from '../errors.js';\nimport { JsonStore, defaultDataPath } from '../store.js';\nimport { CommandRegistry, functionsRequired } from './command-registry.js';\nimport type { CompiledCommand } from './command-registry.js';\nimport { runMiddleware } from './middleware.js';\nimport type { DispatchResult, Middleware, YuzuhaOptions, YuzuhaPlugin } from './options.js';\nimport { RateLimits } from './rate-limits.js';\nimport { reportError, userError } from './reporting.js';\nimport { route, validatePrefixes } from './routing.js';\nimport { defineEvent, NativeEvents } from './events.js';\nimport type { ContextEventDefinition, NativeEvent, NativeListener } from './events.js';\nimport { ScheduleExecutionError, Scheduler } from '../services/scheduler.js';\nimport type { ScheduleRecord } from '../domain/state.js';\nimport { HttpService } from '../services/http.js';\nimport { createCdn } from '../domain/cdn.js';\nimport { emitLog } from './logging.js';\nimport { cancellationError } from '../services/cancellation.js';\nimport { EventContext } from '../commands/event-context.js';\nimport { adaptScriptEvent, scriptEventNames, validateScriptEvent } from './script-events.js';\nimport type { ScriptEventDefinition } from './script-events.js';\nimport type { ScriptEngine } from '../ports/script-engine.js';\nimport type { MusicManager } from '../services/music.js';\nimport type { NativeVoice } from '../ports/voice.js';\nimport { canvasRenderer } from '../infrastructure/canvas/render.js';\n\ntype RoutedCommand = { compiled: CompiledCommand; input: string; prefix: string };\nconst ignored: Promise<DispatchResult> = Promise.resolve('ignored');\n\nfunction assertEngine(engine: unknown): ScriptEngine {\n const candidate = engine as Partial<Record<keyof ScriptEngine, unknown>> | null | undefined;\n if (!candidate || (['compile', 'execute', 'functions', 'registerAll', 'fork', 'text'] as const).some(key => typeof candidate[key] !== 'function')) {\n throw new YuzuhaError('ENGINE_INVALID', 'Engine de function mode inválido: precisa de compile, execute, functions, registerAll, fork e text.');\n }\n return engine as ScriptEngine;\n}\n\nexport class Yuzuha {\n readonly client: Client;\n readonly transport: Transport;\n readonly store: Store;\n readonly resources: Resources;\n readonly scheduler?: Scheduler;\n readonly http?: HttpService;\n readonly music?: MusicManager;\n readonly voice?: NativeVoice;\n private scriptEngine?: ScriptEngine;\n private readonly registry: CommandRegistry;\n private readonly middleware: Middleware[] = [];\n private readonly plugins = new Set<string>();\n private readonly limits: RateLimits;\n private readonly active = new Set<Promise<unknown>>();\n private readonly shutdown = new AbortController();\n private reliability: import('../services/retry.js').Reliability = {};\n private timers: NonNullable<YuzuhaOptions['timers']> = { setTimeout: (fn: () => void, ms: number) => setTimeout(fn, ms), clearTimeout: () => {} };\n private readonly pendingTimers = new Set<unknown>();\n private cdnService: import('../domain/cdn.js').Cdn = createCdn();\n private readonly events: NativeEvents;\n private readonly execution = new AsyncLocalStorage<boolean>();\n private listening = false;\n private closing = false;\n private closeTask?: Promise<void>;\n private loginTask?: Promise<void>;\n private loginAbort?: AbortController;\n private readonly listener: (message: Message) => void;\n private readonly gatewayErrors = new WeakSet<Error>();\n private readonly gatewayReports = new Set<Promise<void>>();\n private readonly errorListener = (error: Error): void => {\n if (this.gatewayErrors.delete(error)) return;\n this.reportGatewayError(error);\n };\n private readonly shardErrorListener = (_shardID: number, error: Error): void => {\n // The SDK emits shardError followed synchronously by error for the same failure.\n this.gatewayErrors.add(error);\n queueMicrotask(() => this.gatewayErrors.delete(error));\n this.reportGatewayError(error);\n };\n private reportGatewayError(error: Error): void {\n const task = this.execution.run(true, () => reportError(this.options, error));\n this.gatewayReports.add(task);\n void task.then(() => this.gatewayReports.delete(task), () => this.gatewayReports.delete(task));\n }\n private prefixSource?: string | string[];\n private prefixes: string[] = [];\n private readonly contextCooldown = (key: string, duration: number) => this.limits.cooldown(key, duration);\n private readonly contextHelp = () => this.help();\n\n constructor(public readonly options: YuzuhaOptions = {}) {\n setMaxListeners(0, this.shutdown.signal);\n this.limits = new RateLimits(options.now);\n this.client = options.client ?? new Client(options.clientOptions);\n this.reliability = { retry: options.retry, signal: this.shutdown.signal,\n onRetry: attempt => { if (options.onLog) void emitLog(this.options, { event: 'transport.retry', attempt }); } };\n this.transport = options.transport ?? new FluxerTransport(this.client, this.reliability);\n this.resources = options.resources ?? new FluxerResources(this.client, this.cdnService, this.reliability);\n this.cdnService = createCdn(options.cdn?.mediaBase);\n if (options.unsafeDisableResourceAuthorization && options.onLog)\n void emitLog(this.options, { event: 'authorization.disabled' });\n this.timers = options.timers ?? { setTimeout: (fn: () => void, ms: number) => setTimeout(fn, ms).unref(), clearTimeout: (handle: unknown) => clearTimeout(handle as never) };\n this.store = options.store ?? new JsonStore(defaultDataPath(options.name));\n this.scheduler = options.scheduler === false ? undefined : options.scheduler ?? new Scheduler(this.store,\n (task, signal) => this.runScheduled(task, signal), {\n now: options.now,\n onEvent: event => this.execution.run(true, () => emitLog(this.options, event)),\n onError: error => this.execution.run(true, () => reportError(this.options, error)),\n });\n this.http = options.http === false ? undefined : options.http ?? new HttpService();\n this.music = options.music;\n this.voice = options.voice;\n if (options.engine !== undefined) this.scriptEngine = assertEngine(options.engine);\n this.registry = new CommandRegistry(() => this.scriptEngine, command => {\n if (command.http) (this.http ?? new HttpService()).withPolicy(command.http);\n });\n this.events = new NativeEvents(this.client, work => this.scheduleEvent(work));\n if (typeof options.prefix !== 'function') this.resolvePrefixes(options.prefix ?? '!');\n this.listener = message => { void this.handle(incoming(message)).catch(error => reportError(this.options, error)); };\n this.client.on(Events.Error, this.errorListener);\n this.client.on(Events.ShardError, this.shardErrorListener);\n }\n\n /** Engine de function mode instalado, quando presente. */\n get engine(): ScriptEngine | undefined { return this.scriptEngine; }\n\n /** Instala o motor de function mode; exigido por comandos com `code` e eventos de script. */\n useEngine(engine: ScriptEngine): this {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n if (this.scriptEngine) throw new YuzuhaError('ENGINE_INSTALLED', 'O bot já tem um engine de function mode.');\n this.scriptEngine = assertEngine(engine);\n return this;\n }\n\n use(middleware: Middleware): this {\n if (typeof middleware !== 'function') throw new YuzuhaError('MIDDLEWARE', 'Middleware deve ser uma função.');\n this.middleware.push(middleware); return this;\n }\n plugin(plugin: YuzuhaPlugin): this {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n if (!plugin.name || this.plugins.has(plugin.name)) throw new YuzuhaError('PLUGIN_DUPLICATE', 'Plugin sem nome ou já instalado.');\n if ((plugin.middleware ?? []).some(item => typeof item !== 'function')) throw new YuzuhaError('PLUGIN_MIDDLEWARE', 'Middleware de plugin inválido.');\n const pending = [...plugin.commands ?? []], inspected = new Set<Command>();\n let hasScript = Boolean(plugin.scriptEvents?.length);\n while (pending.length && !hasScript) {\n const command = pending.pop()!;\n if (!command || inspected.has(command)) continue;\n inspected.add(command);\n hasScript = typeof command.code === 'string';\n if (Array.isArray(command.subcommands)) pending.push(...command.subcommands);\n }\n if (hasScript || plugin.functions?.length) {\n if (!this.scriptEngine) throw functionsRequired();\n }\n const stagedEngine = this.scriptEngine?.fork();\n stagedEngine?.registerAll(plugin.functions ?? []);\n const commitCommands = this.registry.prepare(plugin.commands ?? [], stagedEngine);\n for (const event of plugin.events ?? []) this.events.validate(event);\n const scriptEvents = (plugin.scriptEvents ?? []).map(event => this.prepareScriptEvent(event, stagedEngine));\n this.scriptEngine?.registerAll(plugin.functions ?? []);\n commitCommands();\n this.middleware.push(...(plugin.middleware ?? []));\n for (const event of plugin.events ?? []) this.events.add(event);\n for (const event of scriptEvents) this.events.add(event);\n this.plugins.add(plugin.name);\n return this;\n }\n\n command<const S extends ArgumentSchema = {}, const F extends ArgumentSchema = {}>(command: NativeCommandDefinition<S, F>): this;\n command(command: Command): this;\n command(command: Command | NativeCommandDefinition<ArgumentSchema, ArgumentSchema>): this {\n this.registry.add(defineCommand(command as NativeCommandDefinition<ArgumentSchema, ArgumentSchema>));\n return this;\n }\n load(directory: string, replace = true): Promise<void> { return this.registry.load(directory, replace ? 'replace' : 'append'); }\n reload(directory: string): Promise<void> { return this.registry.load(directory, 'reload'); }\n listCommands(): Command[] { return this.registry.list(); }\n help(command?: string, prefix = ''): string { return this.registry.help(command, prefix); }\n get signal(): AbortSignal { return this.shutdown.signal; }\n deleteLater(channelID: string, messageID: string, ttlMs: number): void {\n const handle = this.timers.setTimeout(() => {\n this.pendingTimers.delete(handle);\n void this.transport.delete(channelID, messageID).catch(error => {\n if (this.options.onLog) void emitLog(this.options, { event: 'message.ttl_failed', messageID, channelID,\n errorCode: (error as { code?: string }).code });\n });\n }, ttlMs);\n this.pendingTimers.add(handle);\n }\n isReady(): boolean { return this.client.isReady(); }\n get uptime(): number | null { return this.client.uptime; }\n assertReady(): void {\n try { this.client.assertReady(); }\n catch { throw new YuzuhaError('BOT_NOT_READY', 'O bot ainda não está pronto.'); }\n }\n\n on<K extends ClientEventName>(event: K, listener: NativeListener<K>): this {\n this.events.add(defineEvent({ event, run: listener }), listener); return this;\n }\n once<K extends ClientEventName>(event: K, listener: NativeListener<K>): this {\n this.events.add(defineEvent({ event, once: true, run: listener }), listener); return this;\n }\n off<K extends ClientEventName>(event: K, listener: NativeListener<K>): this {\n this.events.off(event, listener); return this;\n }\n event(event: NativeEvent): this { this.events.add(event); return this; }\n\n contextEvent<K extends import('../domain/events.js').ScriptEventName>(definition: ContextEventDefinition<K>): this {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n if (!scriptEventNames.includes(definition.event) || typeof definition.run !== 'function' || (definition.once !== undefined && typeof definition.once !== 'boolean')\n || (definition.ignoreBots !== undefined && typeof definition.ignoreBots !== 'boolean')\n || [definition.channelID, definition.actorID].some(id => id !== undefined && (typeof id !== 'string' || !/^\\d+$/.test(id)))) {\n throw new YuzuhaError('EVENT', 'Evento com contexto ou opções inválidos.');\n }\n if (definition.http) (this.http ?? new HttpService()).withPolicy(definition.http);\n this.events.add({ event: definition.event, once: definition.once ?? false, invoke: async (args: unknown[]) => {\n const source = adaptScriptEvent(definition.event, args);\n if ((definition.ignoreBots ?? true) && source.event.userBot) return;\n const ctx = new EventContext({ ...source, channelID: definition.channelID, actorID: definition.actorID,\n policy: definition.http, transport: this.transport, store: this.store, resources: this.resources,\n scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,\n canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now,\n cdn: this.cdnService, disableResourceAuthorization: this.options.unsafeDisableResourceAuthorization === true,\n cooldown: this.contextCooldown, signal: this.shutdown.signal,\n deleteLater: (channelID, messageID, ttlMs) => this.deleteLater(channelID, messageID, ttlMs) });\n try { await definition.run(ctx, ...args as ClientEvents[K]); }\n catch (error) { await reportError(this.options, error, ctx); }\n } });\n return this;\n }\n\n scriptEvent(definition: ScriptEventDefinition): this {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n if (!this.scriptEngine) throw functionsRequired();\n this.events.add(this.prepareScriptEvent(definition));\n return this;\n }\n private prepareScriptEvent(definition: ScriptEventDefinition, engine = this.scriptEngine): NativeEvent {\n if (!engine) throw functionsRequired();\n validateScriptEvent(definition);\n const options = structuredClone(definition);\n if (options.http) (this.http ?? new HttpService()).withPolicy(options.http);\n const program = engine.compile(options.code, `<event:${options.event}>`);\n return { event: options.event, once: options.once ?? false, invoke: args => this.runScriptEvent(options, program, args, engine) };\n }\n private async runScriptEvent(definition: ScriptEventDefinition, program: unknown, args: unknown[], engine: ScriptEngine): Promise<void> {\n const source = adaptScriptEvent(definition.event, args);\n if ((definition.ignoreBots ?? true) && source.event.userBot) return;\n const signal = this.shutdown.signal;\n const ctx = new EventContext({ ...source, channelID: definition.channelID, actorID: definition.actorID,\n policy: definition.http, transport: this.transport, store: this.store, resources: this.resources,\n scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,\n canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now, cooldown: this.contextCooldown, signal,\n cdn: this.cdnService, disableResourceAuthorization: this.options.unsafeDisableResourceAuthorization === true,\n deleteLater: (channelID, messageID, ttlMs) => this.deleteLater(channelID, messageID, ttlMs) });\n const started = this.options.onLog ? performance.now() : 0;\n let outcome: DispatchResult = 'success';\n try {\n if (this.options.onLog) await emitLog(this.options, { event: 'event.start', executionID: ctx.executionID, command: ctx.command.name });\n const output = engine.text(await engine.execute(program, ctx)).trim();\n if (output) {\n if (!ctx.channelID) throw new GuardError('Defina um canal para a saída deste evento.', 'INVALID_ARGUMENT');\n await ctx.send(output, ctx.channelID);\n }\n } catch (error) {\n outcome = error instanceof GuardError ? 'guarded' : 'error';\n await reportError(this.options, error, ctx);\n } finally {\n if (this.options.onLog) await emitLog(this.options, { event: 'event.finish', executionID: ctx.executionID,\n command: ctx.command.name, outcome, durationMs: performance.now() - started });\n }\n }\n\n private scheduleEvent(work: () => unknown | Promise<unknown>): void {\n if (this.closing) return;\n const task = this.execution.run(true, async () => {\n try { await Promise.resolve().then(work); } catch (error) { await reportError(this.options, error); }\n });\n this.active.add(task);\n void task.then(() => this.active.delete(task), () => this.active.delete(task));\n }\n\n private async runScheduled(task: ScheduleRecord, signal: AbortSignal): Promise<void> {\n if (this.closing || signal.aborted) throw cancellationError();\n const configured = typeof this.options.prefix === 'function'\n ? await this.options.prefix({ channelID: task.channelID, guildID: task.guildID } as IncomingMessage)\n : this.options.prefix ?? '!';\n const prefixes = this.resolvePrefixes(configured);\n const prefix = (Array.isArray(prefixes) ? prefixes[0] : prefixes) ?? '!';\n const suffix = task.input ? ` ${task.input}` : '';\n let retryable = true, cause: unknown;\n const outcome = await this.handleMessage({ id: `schedule-${task.id}-${task.claimID ?? Date.now()}`, content: `${prefix}${task.command}${suffix}`,\n authorID: task.authorID, authorName: 'Scheduler', authorBot: false,\n channelID: task.channelID, guildID: task.guildID, mentions: [] }, (error, ctx) => {\n cause = error; retryable = !(error instanceof GuardError || error instanceof PartialModerationError) && !ctx?.hasModerationEffect;\n }, signal, task.claimID ?? undefined);\n if (outcome !== 'success') throw new ScheduleExecutionError(outcome === 'error' && retryable, cause);\n }\n\n login(token = process.env.FLUXER_BOT_TOKEN): Promise<void> {\n if (this.closing) return Promise.reject(new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.'));\n if (!token?.trim()) return Promise.reject(new YuzuhaError('TOKEN_MISSING', 'Defina FLUXER_BOT_TOKEN.'));\n if (this.loginTask) return this.loginTask;\n this.scheduler?.start();\n this.client.on(Events.MessageCreate, this.listener);\n this.listening = true;\n this.loginAbort = new AbortController();\n const task = this.client.login(token, { signal: this.loginAbort.signal }).then(() => {\n if (this.closing) throw new YuzuhaError('BOT_CLOSED', 'O bot foi encerrado durante o login.');\n }).catch(async error => {\n this.client.off(Events.MessageCreate, this.listener); this.listening = false;\n this.scheduler?.stop();\n await this.scheduler?.drain();\n const needsErrorListener = !this.client.listeners(Events.Error).includes(this.errorListener);\n const needsShardListener = !this.client.listeners(Events.ShardError).includes(this.shardErrorListener);\n if (needsErrorListener) this.client.on(Events.Error, this.errorListener);\n if (needsShardListener) this.client.on(Events.ShardError, this.shardErrorListener);\n for (const handle of this.pendingTimers) this.timers.clearTimeout(handle);\n this.pendingTimers.clear();\n try { await this.client.destroy(); }\n finally {\n if (needsErrorListener) this.client.off(Events.Error, this.errorListener);\n if (needsShardListener) this.client.off(Events.ShardError, this.shardErrorListener);\n await Promise.allSettled([...this.gatewayReports]);\n }\n throw error;\n });\n this.loginTask = task;\n void task.catch(() => { if (this.loginTask === task) this.loginTask = undefined; });\n return task;\n }\n\n destroy(): Promise<void> {\n if (this.closeTask) return this.execution.getStore() ? Promise.resolve() : this.closeTask;\n this.closing = true;\n this.shutdown.abort();\n this.loginAbort?.abort();\n this.scheduler?.stop();\n this.events.close();\n if (this.listening) this.client.off(Events.MessageCreate, this.listener);\n this.listening = false;\n this.closeTask = (async () => {\n await Promise.allSettled([...this.active]);\n await this.scheduler?.drain();\n try {\n const results = await Promise.allSettled([this.music?.close(), this.voice?.close()]);\n const failures = results.filter((item): item is PromiseRejectedResult => item.status === 'rejected');\n if (failures.length) throw new AggregateError(failures.map(item => item.reason), 'Falha ao encerrar música ou voz.');\n }\n finally {\n for (const handle of this.pendingTimers) this.timers.clearTimeout(handle);\n this.pendingTimers.clear();\n try { await this.client.destroy(); }\n finally {\n this.client.off(Events.Error, this.errorListener);\n this.client.off(Events.ShardError, this.shardErrorListener);\n await Promise.allSettled([...this.gatewayReports]);\n if (!this.options.store) await this.store.close?.();\n }\n }\n })();\n return this.execution.getStore() ? Promise.resolve() : this.closeTask;\n }\n\n handle(message: IncomingMessage): Promise<DispatchResult> {\n return this.handleMessage(message);\n }\n\n private resolvePrefixes(source: string | string[]): string[] {\n const previous = this.prefixSource;\n if (typeof source === 'string' && source === previous) return this.prefixes;\n if (Array.isArray(source) && Array.isArray(previous) && source.length === previous.length) {\n let same = true;\n for (let index = 0; index < source.length; index++) if (source[index] !== previous[index]) { same = false; break; }\n if (same) return this.prefixes;\n }\n const prefixes = validatePrefixes(source);\n this.prefixSource = Array.isArray(source) ? [...source] : source;\n return this.prefixes = prefixes;\n }\n\n private resolveCommand(message: IncomingMessage, configured: string | string[]): RoutedCommand | undefined {\n const routed = route(message.content, this.resolvePrefixes(configured));\n if (!routed) return;\n const resolved = this.registry.resolve(routed.name, routed.input);\n if (!resolved || this.limits.duplicate(message.channelID, message.id)) return;\n return { ...resolved, prefix: routed.prefix };\n }\n\n private handleMessage(message: IncomingMessage, onFailure?: (error: unknown, ctx?: CommandContext) => void, parentSignal?: AbortSignal, executionID?: string): Promise<DispatchResult> {\n if (this.closing || message.authorBot || message.authorID === this.transport.botID) return ignored;\n let routed: RoutedCommand | undefined;\n if (typeof this.options.prefix !== 'function') {\n try { routed = this.resolveCommand(message, this.options.prefix ?? '!'); }\n catch (error) { return Promise.reject(error); }\n if (!routed) return ignored;\n }\n const signal = parentSignal ? AbortSignal.any([this.shutdown.signal, parentSignal]) : this.shutdown.signal;\n const task = this.execution.run(true, () => this.dispatch(message, signal, onFailure, executionID, routed));\n this.active.add(task);\n void task.then(() => this.active.delete(task), () => this.active.delete(task));\n return task;\n }\n\n private async dispatch(message: IncomingMessage, signal: AbortSignal, onFailure?: (error: unknown, ctx?: CommandContext) => void, executionID?: string, resolved?: RoutedCommand): Promise<DispatchResult> {\n if (!resolved) {\n const configured = typeof this.options.prefix === 'function' ? await this.options.prefix(message) : this.options.prefix ?? '!';\n if (this.closing || signal.aborted) return 'ignored';\n resolved = this.resolveCommand(message, configured);\n }\n if (!resolved) return 'ignored';\n const { compiled, prefix } = resolved;\n let ctx: CommandContext | undefined;\n let outcome: DispatchResult = 'success';\n const started = this.options.onLog ? performance.now() : 0;\n try {\n ctx = new CommandContext({ message, transport: this.transport, store: this.store, command: compiled.command,\n input: resolved.input, prefix, lineage: compiled.lineage,\n help: this.contextHelp, cooldown: this.contextCooldown,\n native: { client: this.client, message: message.raw instanceof Message ? message.raw : undefined },\n resources: this.resources, scheduler: this.scheduler, http: this.http, music: this.music, voice: this.voice,\n canvas: { renderer: canvasRenderer, config: this.options.canvas }, now: this.options.now, signal, executionID,\n cdn: this.cdnService, disableResourceAuthorization: this.options.unsafeDisableResourceAuthorization === true,\n deleteLater: (channelID, messageID, ttlMs) => this.deleteLater(channelID, messageID, ttlMs) });\n if (this.options.onLog) await emitLog(this.options, { event: 'command.start', executionID: ctx.executionID, command: ctx.command.name });\n if (signal.aborted) throw cancellationError();\n await ctx.prepare();\n const current = ctx;\n for (const check of compiled.command.checks ?? []) {\n const result = await check(current);\n if (result === false || typeof result === 'string') throw new GuardError(typeof result === 'string' ? result : 'Você não pode executar este comando.', 'GENERIC');\n }\n const execute = async () => {\n if (compiled.program) {\n const programEngine = (compiled as { programEngine?: ScriptEngine }).programEngine ?? this.scriptEngine!;\n const output = programEngine.text(await programEngine.execute(compiled.program, current)).trim();\n if (output) await current.reply(output);\n } else if (compiled.command.run) await compiled.command.run(current);\n else throw new GuardError(`${resolved.input ? 'Subcomando desconhecido.\\n' : ''}${this.help(compiled.command.name, prefix)}`, 'INVALID_ARGUMENT');\n };\n const local = compiled.command.middleware ?? [];\n if (this.middleware.length) await runMiddleware(local.length ? [...this.middleware, ...local] : this.middleware, current, execute);\n else if (local.length) await runMiddleware(local, current, execute);\n else await execute();\n } catch (error) {\n onFailure?.(error, ctx);\n outcome = error instanceof GuardError ? 'guarded' : 'error';\n try { if (!signal.aborted) await (ctx ? ctx.reply(userError(error, ctx)) : this.transport.reply(message, { content: userError(error, ctx) })); }\n catch (replyError) { await reportError(this.options, replyError, ctx); }\n if (!(error instanceof GuardError)) await reportError(this.options, error, ctx);\n }\n if (ctx && this.options.onCommand) {\n try { await this.options.onCommand(ctx, outcome); }\n catch (error) { await reportError(this.options, error, ctx); }\n }\n if (ctx && this.options.onLog) await emitLog(this.options, { event: 'command.finish', executionID: ctx.executionID,\n command: ctx.command.name, outcome, durationMs: performance.now() - started });\n return outcome;\n }\n}\n\nexport { Yuzuha as Bot };\n"]}
@@ -1,12 +1,15 @@
1
1
  import type { DispatchResult, YuzuhaOptions } from './options.js';
2
2
  import type { SchedulerEvent } from '../services/scheduler.js';
3
3
  type LogEvent = SchedulerEvent | {
4
- event: 'command.start' | 'command.finish' | 'event.start' | 'event.finish' | 'error';
4
+ event: 'command.start' | 'command.finish' | 'event.start' | 'event.finish' | 'error' | 'transport.retry' | 'message.ttl_failed' | 'authorization.disabled';
5
5
  executionID?: string;
6
6
  command?: string;
7
7
  outcome?: DispatchResult;
8
8
  durationMs?: number;
9
9
  errorCode?: string;
10
+ attempt?: number;
11
+ messageID?: string;
12
+ channelID?: string;
10
13
  };
11
14
  export type LogRecord = Readonly<{
12
15
  timestamp: string;
@@ -1 +1 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/framework/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,KAAK,QAAQ,GAAG,cAAc,GAAG;IAC/B,KAAK,EAAE,eAAe,GAAG,gBAAgB,GAAG,aAAa,GAAG,cAAc,GAAG,OAAO,CAAC;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAAC,CAAC;AAEnE,wBAAsB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpG"}
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/framework/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,KAAK,QAAQ,GAAG,cAAc,GAAG;IAC/B,KAAK,EAAE,eAAe,GAAG,gBAAgB,GAAG,aAAa,GAAG,cAAc,GAAG,OAAO,GAChF,iBAAiB,GAAG,oBAAoB,GAAG,wBAAwB,CAAC;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAAC,CAAC;AAEnE,wBAAsB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpG"}
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/framework/logging.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAqC,EAAE,MAAgB;IACnF,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO;IAC3B,IAAI,CAAC;QAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAc,CAAC,CAAC;IAAC,CAAC;IAC5G,MAAM,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAAC,CAAC;AACzD,CAAC","sourcesContent":["import type { DispatchResult, YuzuhaOptions } from './options.js';\nimport type { SchedulerEvent } from '../services/scheduler.js';\n\ntype LogEvent = SchedulerEvent | {\n event: 'command.start' | 'command.finish' | 'event.start' | 'event.finish' | 'error';\n executionID?: string;\n command?: string;\n outcome?: DispatchResult;\n durationMs?: number;\n errorCode?: string;\n};\nexport type LogRecord = Readonly<{ timestamp: string } & LogEvent>;\n\nexport async function emitLog(options: Pick<YuzuhaOptions, 'onLog'>, record: LogEvent): Promise<void> {\n if (!options.onLog) return;\n try { await options.onLog(Object.freeze({ ...record, timestamp: new Date().toISOString() }) as LogRecord); }\n catch { console.error('[yuzuha] LOG_HANDLER_FAILED'); }\n}\n"]}
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/framework/logging.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAqC,EAAE,MAAgB;IACnF,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO;IAC3B,IAAI,CAAC;QAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAc,CAAC,CAAC;IAAC,CAAC;IAC5G,MAAM,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAAC,CAAC;AACzD,CAAC","sourcesContent":["import type { DispatchResult, YuzuhaOptions } from './options.js';\nimport type { SchedulerEvent } from '../services/scheduler.js';\n\ntype LogEvent = SchedulerEvent | {\n event: 'command.start' | 'command.finish' | 'event.start' | 'event.finish' | 'error'\n | 'transport.retry' | 'message.ttl_failed' | 'authorization.disabled';\n executionID?: string;\n command?: string;\n outcome?: DispatchResult;\n durationMs?: number;\n errorCode?: string;\n attempt?: number;\n messageID?: string;\n channelID?: string;\n};\nexport type LogRecord = Readonly<{ timestamp: string } & LogEvent>;\n\nexport async function emitLog(options: Pick<YuzuhaOptions, 'onLog'>, record: LogEvent): Promise<void> {\n if (!options.onLog) return;\n try { await options.onLog(Object.freeze({ ...record, timestamp: new Date().toISOString() }) as LogRecord); }\n catch { console.error('[yuzuha] LOG_HANDLER_FAILED'); }\n}\n"]}
@@ -41,5 +41,17 @@ export interface YuzuhaOptions {
41
41
  onError?: (error: unknown, ctx?: CommandContext) => void | Promise<void>;
42
42
  onCommand?: (ctx: CommandContext, outcome: DispatchResult) => void | Promise<void>;
43
43
  onLog?: (record: LogRecord) => void | Promise<void>;
44
+ retry?: false | {
45
+ requests?: number;
46
+ delayMs?: number;
47
+ };
48
+ timers?: {
49
+ setTimeout(fn: () => void, ms: number): unknown;
50
+ clearTimeout(handle: unknown): void;
51
+ };
52
+ cdn?: {
53
+ mediaBase?: string;
54
+ };
55
+ unsafeDisableResourceAuthorization?: boolean;
44
56
  }
45
57
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/framework/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/framework/options.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/framework/options.ts"],"names":[],"mappings":"","sourcesContent":["import type { Client, ClientOptions } from '@fluxerjs/core';\nimport type { CommandContext } from '../context.js';\nimport type { IncomingMessage, Store, Transport } from '../contracts.js';\nimport type { ScriptEngine, ScriptFunctionDefinition } from '../ports/script-engine.js';\nimport type { Command } from '../context.js';\nimport type { Resources } from '../ports/resources.js';\nimport type { HttpService } from '../services/http.js';\nimport type { Scheduler } from '../services/scheduler.js';\nimport type { NativeEvent } from './events.js';\nimport type { LogRecord } from './logging.js';\nimport type { ScriptEventDefinition } from './script-events.js';\nimport type { MusicManager } from '../services/music.js';\nimport type { NativeVoice } from '../ports/voice.js';\nimport type { CanvasConfig } from '../domain/canvas.js';\n\nexport type DispatchResult = 'ignored' | 'success' | 'guarded' | 'error';\nexport type Middleware = (ctx: CommandContext, next: () => Promise<void>) => Promise<void>;\nexport interface YuzuhaPlugin {\n name: string;\n functions?: ScriptFunctionDefinition[];\n middleware?: Middleware[];\n commands?: Command[];\n events?: NativeEvent[];\n scriptEvents?: ScriptEventDefinition[];\n}\nexport interface YuzuhaOptions {\n prefix?: string | string[] | ((message: IncomingMessage) => string | string[] | Promise<string | string[]>);\n client?: Client;\n clientOptions?: ClientOptions;\n transport?: Transport;\n resources?: Resources;\n store?: Store;\n name?: string;\n /** Clock shared by cooldowns, variable TTLs and the default scheduler. */\n now?: () => number;\n engine?: ScriptEngine;\n scheduler?: Scheduler | false;\n http?: HttpService | false;\n music?: MusicManager;\n voice?: NativeVoice;\n canvas?: CanvasConfig;\n onError?: (error: unknown, ctx?: CommandContext) => void | Promise<void>;\n onCommand?: (ctx: CommandContext, outcome: DispatchResult) => void | Promise<void>;\n onLog?: (record: LogRecord) => void | Promise<void>;\n}\n"]}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/framework/options.ts"],"names":[],"mappings":"","sourcesContent":["import type { Client, ClientOptions } from '@fluxerjs/core';\nimport type { CommandContext } from '../context.js';\nimport type { IncomingMessage, Store, Transport } from '../contracts.js';\nimport type { ScriptEngine, ScriptFunctionDefinition } from '../ports/script-engine.js';\nimport type { Command } from '../context.js';\nimport type { Resources } from '../ports/resources.js';\nimport type { HttpService } from '../services/http.js';\nimport type { Scheduler } from '../services/scheduler.js';\nimport type { NativeEvent } from './events.js';\nimport type { LogRecord } from './logging.js';\nimport type { ScriptEventDefinition } from './script-events.js';\nimport type { MusicManager } from '../services/music.js';\nimport type { NativeVoice } from '../ports/voice.js';\nimport type { CanvasConfig } from '../domain/canvas.js';\n\nexport type DispatchResult = 'ignored' | 'success' | 'guarded' | 'error';\nexport type Middleware = (ctx: CommandContext, next: () => Promise<void>) => Promise<void>;\nexport interface YuzuhaPlugin {\n name: string;\n functions?: ScriptFunctionDefinition[];\n middleware?: Middleware[];\n commands?: Command[];\n events?: NativeEvent[];\n scriptEvents?: ScriptEventDefinition[];\n}\nexport interface YuzuhaOptions {\n prefix?: string | string[] | ((message: IncomingMessage) => string | string[] | Promise<string | string[]>);\n client?: Client;\n clientOptions?: ClientOptions;\n transport?: Transport;\n resources?: Resources;\n store?: Store;\n name?: string;\n /** Clock shared by cooldowns, variable TTLs and the default scheduler. */\n now?: () => number;\n engine?: ScriptEngine;\n scheduler?: Scheduler | false;\n http?: HttpService | false;\n music?: MusicManager;\n voice?: NativeVoice;\n canvas?: CanvasConfig;\n onError?: (error: unknown, ctx?: CommandContext) => void | Promise<void>;\n onCommand?: (ctx: CommandContext, outcome: DispatchResult) => void | Promise<void>;\n onLog?: (record: LogRecord) => void | Promise<void>;\n retry?: false | { requests?: number; delayMs?: number };\n timers?: { setTimeout(fn: () => void, ms: number): unknown; clearTimeout(handle: unknown): void };\n cdn?: { mediaBase?: string };\n unsafeDisableResourceAuthorization?: boolean;\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export type { YuzuhaOptions, YuzuhaPlugin, Middleware, DispatchResult } from './
3
3
  export { CommandContext, defineCommand, parseDuration } from './context.js';
4
4
  export type { Command, ArgumentDefinition } from './context.js';
5
5
  export { commandUsage, commandHelp } from './commands/help.js';
6
+ export { formatDuration, MAX_TIMEOUT_MS } from './domain/values.js';
6
7
  export type { ContextOptions } from './context.js';
7
8
  export { arg, ArgumentBuilder } from './commands/builders.js';
8
9
  export type { ArgumentSchema, InferArgument } from './commands/builders.js';
@@ -63,4 +64,14 @@ export { decimal, decimalCompare, decimalRound } from './domain/decimal.js';
63
64
  export { embed } from './domain/embeds.js';
64
65
  export type { VariableQueryOptions, VariableQuery, VariableEntry, VariablePage } from './domain/variable-query.js';
65
66
  export type { StreamAttachmentOptions } from './services/attachments.js';
67
+ export { GuardError, isGuardReason } from './shared/errors.js';
68
+ export type { GuardReason } from './shared/errors.js';
69
+ export { isTransientError } from './services/retry.js';
70
+ export type { SendOptions } from './commands/context.js';
71
+ export { cleanReason } from './domain/resolvers.js';
72
+ export type { ResolvedMember, ResolvedBan, ResolvedUser, ResolvedLabel } from './domain/resolvers.js';
73
+ export { createCdn, fixAnimatedAssetUrl } from './domain/cdn.js';
74
+ export type { Cdn } from './domain/cdn.js';
75
+ export declare const cdn: import("./domain/cdn.js").Cdn;
76
+ export type { CommandContextLike } from './commands/context-like.js';
66
77
  //# sourceMappingURL=index.d.ts.map