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.
- package/CHANGELOG.md +23 -0
- package/README.md +3 -3
- package/VERSIONING.md +18 -5
- package/dist/commands/arguments.d.ts.map +1 -1
- package/dist/commands/arguments.js +40 -13
- package/dist/commands/arguments.js.map +1 -1
- package/dist/commands/builders.d.ts +1 -0
- package/dist/commands/builders.d.ts.map +1 -1
- package/dist/commands/builders.js +5 -0
- package/dist/commands/builders.js.map +1 -1
- package/dist/commands/context-like.d.ts +4 -0
- package/dist/commands/context-like.d.ts.map +1 -0
- package/dist/commands/context-like.js +2 -0
- package/dist/commands/context-like.js.map +1 -0
- package/dist/commands/context.d.ts +16 -2
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +53 -11
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/definition.d.ts +1 -0
- package/dist/commands/definition.d.ts.map +1 -1
- package/dist/commands/definition.js.map +1 -1
- package/dist/commands/typed-arguments.js +2 -2
- package/dist/commands/typed-arguments.js.map +1 -1
- package/dist/domain/cdn.d.ts +23 -0
- package/dist/domain/cdn.d.ts.map +1 -0
- package/dist/domain/cdn.js +38 -0
- package/dist/domain/cdn.js.map +1 -0
- package/dist/domain/resolvers.d.ts +60 -0
- package/dist/domain/resolvers.d.ts.map +1 -0
- package/dist/domain/resolvers.js +31 -0
- package/dist/domain/resolvers.js.map +1 -0
- package/dist/domain/values.d.ts +2 -0
- package/dist/domain/values.d.ts.map +1 -1
- package/dist/domain/values.js +26 -1
- package/dist/domain/values.js.map +1 -1
- package/dist/framework/bot.d.ts +5 -0
- package/dist/framework/bot.d.ts.map +1 -1
- package/dist/framework/bot.js +44 -9
- package/dist/framework/bot.js.map +1 -1
- package/dist/framework/logging.d.ts +4 -1
- package/dist/framework/logging.d.ts.map +1 -1
- package/dist/framework/logging.js.map +1 -1
- package/dist/framework/options.d.ts +12 -0
- package/dist/framework/options.d.ts.map +1 -1
- package/dist/framework/options.js.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/channels.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/channels.js +62 -8
- package/dist/infrastructure/fluxer/resources/channels.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/expressions.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/expressions.js +2 -1
- package/dist/infrastructure/fluxer/resources/expressions.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/messages.d.ts +2 -1
- package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/messages.js +16 -7
- package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/users.d.ts +1 -1
- package/dist/infrastructure/fluxer/resources/users.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/users.js +41 -9
- package/dist/infrastructure/fluxer/resources/users.js.map +1 -1
- package/dist/infrastructure/fluxer/resources.d.ts +3 -1
- package/dist/infrastructure/fluxer/resources.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources.js +8 -3
- package/dist/infrastructure/fluxer/resources.js.map +1 -1
- package/dist/infrastructure/fluxer/transport.d.ts +4 -1
- package/dist/infrastructure/fluxer/transport.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/transport.js +41 -14
- package/dist/infrastructure/fluxer/transport.js.map +1 -1
- package/dist/ports/resources/channels.d.ts +20 -1
- package/dist/ports/resources/channels.d.ts.map +1 -1
- package/dist/ports/resources/channels.js.map +1 -1
- package/dist/ports/resources/users.d.ts +5 -0
- package/dist/ports/resources/users.d.ts.map +1 -1
- package/dist/ports/resources/users.js.map +1 -1
- package/dist/services/authorization.js +9 -9
- package/dist/services/authorization.js.map +1 -1
- package/dist/services/members.d.ts +5 -0
- package/dist/services/members.d.ts.map +1 -1
- package/dist/services/members.js +75 -5
- package/dist/services/members.js.map +1 -1
- package/dist/services/moderation.js +9 -9
- package/dist/services/moderation.js.map +1 -1
- package/dist/services/resource-authorization.d.ts.map +1 -1
- package/dist/services/resource-authorization.js +31 -17
- package/dist/services/resource-authorization.js.map +1 -1
- package/dist/services/retry.d.ts +17 -0
- package/dist/services/retry.d.ts.map +1 -0
- package/dist/services/retry.js +67 -0
- package/dist/services/retry.js.map +1 -0
- package/dist/shared/errors.d.ts +4 -1
- package/dist/shared/errors.d.ts.map +1 -1
- package/dist/shared/errors.js +8 -1
- package/dist/shared/errors.js.map +1 -1
- package/dist/testing.d.ts +8 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +24 -4
- package/dist/testing.js.map +1 -1
- package/docs/API.md +11 -0
- package/docs/CANVAS.md +1 -1
- package/docs/FRAMEWORK.md +13 -0
- package/docs/IMAGES.md +9 -0
- package/docs/NATIVE.md +49 -1
- package/docs/PARITY-MATRIX.md +31 -32
- package/docs/QUICKSTART.md +2 -2
- package/docs/README.md +1 -1
- package/docs/TESTING.md +16 -0
- package/package.json +1 -1
- package/src/commands/arguments.ts +35 -13
- package/src/commands/builders.ts +4 -0
- package/src/commands/context-like.ts +7 -0
- package/src/commands/context.ts +56 -11
- package/src/commands/definition.ts +1 -0
- package/src/commands/typed-arguments.ts +2 -2
- package/src/domain/cdn.ts +55 -0
- package/src/domain/resolvers.ts +42 -0
- package/src/domain/values.ts +28 -1
- package/src/framework/bot.ts +41 -10
- package/src/framework/logging.ts +5 -1
- package/src/framework/options.ts +4 -0
- package/src/index.ts +13 -0
- package/src/infrastructure/fluxer/resources/channels.ts +53 -8
- package/src/infrastructure/fluxer/resources/expressions.ts +2 -1
- package/src/infrastructure/fluxer/resources/messages.ts +17 -6
- package/src/infrastructure/fluxer/resources/users.ts +38 -9
- package/src/infrastructure/fluxer/resources.ts +4 -3
- package/src/infrastructure/fluxer/transport.ts +42 -13
- package/src/ports/resources/channels.ts +11 -1
- package/src/ports/resources/users.ts +3 -0
- package/src/services/authorization.ts +9 -9
- package/src/services/members.ts +70 -5
- package/src/services/moderation.ts +9 -9
- package/src/services/resource-authorization.ts +31 -17
- package/src/services/retry.ts +74 -0
- package/src/shared/errors.ts +10 -1
- package/src/testing.ts +28 -4
package/dist/domain/values.js
CHANGED
|
@@ -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;
|
|
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"]}
|
package/dist/framework/bot.d.ts
CHANGED
|
@@ -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":"AAEA,OAAO,EAAE,MAAM,EAAmB,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,gBAAgB,CAAC;AAGpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMzE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK5F,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAA0B,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/framework/bot.ts"],"names":[],"mappings":"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"}
|
package/dist/framework/bot.js
CHANGED
|
@@ -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.
|
|
84
|
-
|
|
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
|
-
|
|
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;
|
|
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":"
|
|
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
|