refactor: unify discord listener slow-log flow and test helpers

This commit is contained in:
Peter Steinberger
2026-02-22 00:44:28 +01:00
parent f589295a0a
commit 150c048b0a
2 changed files with 84 additions and 64 deletions

View File

@@ -68,6 +68,32 @@ function logSlowDiscordListener(params: {
});
}
async function runDiscordListenerWithSlowLog(params: {
logger: Logger | undefined;
listener: string;
event: string;
run: () => Promise<void>;
onError?: (err: unknown) => void;
}) {
const startedAt = Date.now();
try {
await params.run();
} catch (err) {
if (params.onError) {
params.onError(err);
return;
}
throw err;
} finally {
logSlowDiscordListener({
logger: params.logger,
listener: params.listener,
event: params.event,
durationMs: Date.now() - startedAt,
});
}
}
export function registerDiscordListener(listeners: Array<object>, listener: object) {
if (listeners.some((existing) => existing.constructor === listener.constructor)) {
return false;
@@ -85,20 +111,16 @@ export class DiscordMessageListener extends MessageCreateListener {
}
async handle(data: DiscordMessageEvent, client: Client) {
const startedAt = Date.now();
await this.handler(data, client)
.catch((err) => {
await runDiscordListenerWithSlowLog({
logger: this.logger,
listener: this.constructor.name,
event: this.type,
run: () => this.handler(data, client),
onError: (err) => {
const logger = this.logger ?? discordEventQueueLog;
logger.error(danger(`discord handler failed: ${String(err)}`));
})
.finally(() => {
logSlowDiscordListener({
logger: this.logger,
listener: this.constructor.name,
event: this.type,
durationMs: Date.now() - startedAt,
});
});
},
});
}
}
@@ -144,26 +166,22 @@ async function runDiscordReactionHandler(params: {
listener: string;
event: string;
}): Promise<void> {
const startedAt = Date.now();
try {
await handleDiscordReactionEvent({
data: params.data,
client: params.client,
action: params.action,
cfg: params.handlerParams.cfg,
accountId: params.handlerParams.accountId,
botUserId: params.handlerParams.botUserId,
guildEntries: params.handlerParams.guildEntries,
logger: params.handlerParams.logger,
});
} finally {
logSlowDiscordListener({
logger: params.handlerParams.logger,
listener: params.listener,
event: params.event,
durationMs: Date.now() - startedAt,
});
}
await runDiscordListenerWithSlowLog({
logger: params.handlerParams.logger,
listener: params.listener,
event: params.event,
run: () =>
handleDiscordReactionEvent({
data: params.data,
client: params.client,
action: params.action,
cfg: params.handlerParams.cfg,
accountId: params.handlerParams.accountId,
botUserId: params.handlerParams.botUserId,
guildEntries: params.handlerParams.guildEntries,
logger: params.handlerParams.logger,
}),
});
}
async function handleDiscordReactionEvent(params: {