diff --git a/src/lib/types/Events.ts b/src/lib/types/Events.ts index d2501ac12..0b50c9489 100644 --- a/src/lib/types/Events.ts +++ b/src/lib/types/Events.ts @@ -214,6 +214,7 @@ export interface MessageCommandErrorPayload extends MessageCommandRunPayload { export interface MessageCommandSuccessPayload extends MessageCommandRunPayload { result: unknown; + duration: number; } export interface MessageCommandTypingErrorPayload extends MessageCommandRunPayload {} @@ -252,6 +253,7 @@ export interface ChatInputCommandFinishPayload extends ChatInputCommandAcceptedP export interface ChatInputCommandSuccessPayload extends ChatInputCommandRunPayload { result: unknown; + duration: number; } export interface ChatInputCommandErrorPayload extends IChatInputCommandPayload { @@ -292,6 +294,7 @@ export interface ContextMenuCommandFinishPayload extends ContextMenuCommandAccep export interface ContextMenuCommandSuccessPayload extends ContextMenuCommandRunPayload { result: unknown; + duration: number; } export interface ContextMenuCommandErrorPayload extends IContextMenuCommandPayload { diff --git a/src/listeners/application-commands/chat-input/CoreChatInputCommandAccepted.ts b/src/listeners/application-commands/chat-input/CoreChatInputCommandAccepted.ts index 66ea2923e..f76dacd8d 100644 --- a/src/listeners/application-commands/chat-input/CoreChatInputCommandAccepted.ts +++ b/src/listeners/application-commands/chat-input/CoreChatInputCommandAccepted.ts @@ -12,14 +12,18 @@ export class CoreListener extends Listener { this.container.client.emit(Events.ChatInputCommandRun, interaction, command, { ...payload }); + const stopwatch = new Stopwatch(); const result = await command.chatInputRun(interaction, context); - this.container.client.emit(Events.ChatInputCommandSuccess, { ...payload, result }); + const { duration } = stopwatch.stop(); + this.container.client.emit(Events.ChatInputCommandSuccess, { ...payload, result, duration }); + + return { result, duration }; }); - const { duration } = stopwatch.stop(); + const { duration } = result.value ?? { duration: -1 }; + if (isErr(result)) { this.container.client.emit(Events.ChatInputCommandError, result.error, { ...payload, duration }); } diff --git a/src/listeners/application-commands/context-menu/CoreContextMenuCommandAccepted.ts b/src/listeners/application-commands/context-menu/CoreContextMenuCommandAccepted.ts index ab056073e..a49c8c8eb 100644 --- a/src/listeners/application-commands/context-menu/CoreContextMenuCommandAccepted.ts +++ b/src/listeners/application-commands/context-menu/CoreContextMenuCommandAccepted.ts @@ -12,14 +12,19 @@ export class CoreListener extends Listener { this.container.client.emit(Events.ContextMenuCommandRun, interaction, command, { ...payload }); + const stopwatch = new Stopwatch(); const result = await command.contextMenuRun(interaction, context); - this.container.client.emit(Events.ContextMenuCommandSuccess, { ...payload, result }); + const { duration } = stopwatch.stop(); + + this.container.client.emit(Events.ContextMenuCommandSuccess, { ...payload, result, duration }); + + return { result, duration }; }); - const { duration } = stopwatch.stop(); + const { duration } = result.value ?? { duration: -1 }; + if (isErr(result)) { this.container.client.emit(Events.ContextMenuCommandError, result.error, { ...payload, duration }); } diff --git a/src/optional-listeners/message-command-listeners/CoreMessageCommandAccepted.ts b/src/optional-listeners/message-command-listeners/CoreMessageCommandAccepted.ts index 25939d6ff..22884c3e9 100644 --- a/src/optional-listeners/message-command-listeners/CoreMessageCommandAccepted.ts +++ b/src/optional-listeners/message-command-listeners/CoreMessageCommandAccepted.ts @@ -13,14 +13,18 @@ export class CoreListener extends Listener const { message, command, parameters, context } = payload; const args = await command.messagePreParse(message, parameters, context); - const stopwatch = new Stopwatch(); const result = await fromAsync(async () => { message.client.emit(Events.MessageCommandRun, message, command, { ...payload, args }); + const stopwatch = new Stopwatch(); const result = await command.messageRun(message, args, context); - message.client.emit(Events.MessageCommandSuccess, { ...payload, args, result }); + const { duration } = stopwatch.stop(); + message.client.emit(Events.MessageCommandSuccess, { ...payload, args, result, duration }); + + return { result, duration }; }); - const { duration } = stopwatch.stop(); + const { duration } = result.value ?? { duration: -1 }; + if (isErr(result)) { message.client.emit(Events.MessageCommandError, result.error, { ...payload, args, duration }); }