Skip to content

Commit 506fd58

Browse files
authored
feat: add duration to *Error and *Finished Message, ChatInput and ContextMenu Command events (#357)
BREAKING CHANGE: The payload for `Events.ChatInputCommandFinish` has been changed from `ChatInputCommandRunPayload` to `ChatInputCommandFinishPayload` BREAKING CHANGE: The payload for `Events.ContextMenuCommandFinish` has been changed from `ContextMenuCommandRunPayload` to `ContextMenuCommandFinishPayload`
1 parent 15f4e13 commit 506fd58

6 files changed

Lines changed: 55 additions & 14 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"@sapphire/discord.js-utilities": "^4.1.5",
3232
"@sapphire/pieces": "^3.2.0",
3333
"@sapphire/ratelimits": "^2.1.10",
34+
"@sapphire/stopwatch": "^1.2.0",
3435
"@sapphire/utilities": "^3.1.0",
3536
"lexure": "^0.17.0",
3637
"tslib": "^2.3.1"

src/lib/types/Events.ts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,13 @@ export interface MessageCommandRunPayload extends MessageCommandAcceptedPayload
204204
args: unknown;
205205
}
206206

207-
export interface MessageCommandFinishPayload extends MessageCommandRunPayload {}
207+
export interface MessageCommandFinishPayload extends MessageCommandRunPayload {
208+
duration: number;
209+
}
208210

209-
export interface MessageCommandErrorPayload extends MessageCommandRunPayload {}
211+
export interface MessageCommandErrorPayload extends MessageCommandRunPayload {
212+
duration: number;
213+
}
210214

211215
export interface MessageCommandSuccessPayload extends MessageCommandRunPayload {
212216
result: unknown;
@@ -242,11 +246,17 @@ export interface ChatInputCommandAcceptedPayload extends PreChatInputCommandRunP
242246

243247
export interface ChatInputCommandRunPayload extends ChatInputCommandAcceptedPayload {}
244248

249+
export interface ChatInputCommandFinishPayload extends ChatInputCommandAcceptedPayload {
250+
duration: number;
251+
}
252+
245253
export interface ChatInputCommandSuccessPayload extends ChatInputCommandRunPayload {
246254
result: unknown;
247255
}
248256

249-
export interface ChatInputCommandErrorPayload extends IChatInputCommandPayload {}
257+
export interface ChatInputCommandErrorPayload extends IChatInputCommandPayload {
258+
duration: number;
259+
}
250260

251261
export interface UnknownContextMenuCommandPayload {
252262
interaction: ContextMenuInteraction;
@@ -276,11 +286,17 @@ export interface ContextMenuCommandAcceptedPayload extends PreContextMenuCommand
276286

277287
export interface ContextMenuCommandRunPayload extends ContextMenuCommandAcceptedPayload {}
278288

289+
export interface ContextMenuCommandFinishPayload extends ContextMenuCommandAcceptedPayload {
290+
duration: number;
291+
}
292+
279293
export interface ContextMenuCommandSuccessPayload extends ContextMenuCommandRunPayload {
280294
result: unknown;
281295
}
282296

283-
export interface ContextMenuCommandErrorPayload extends IContextMenuCommandPayload {}
297+
export interface ContextMenuCommandErrorPayload extends IContextMenuCommandPayload {
298+
duration: number;
299+
}
284300

285301
export interface IInteractionHandlerPayload {
286302
interaction: Interaction;
@@ -347,7 +363,7 @@ declare module 'discord.js' {
347363
[Events.ChatInputCommandRun]: [interaction: CommandInteraction, command: ChatInputCommand, payload: ChatInputCommandRunPayload];
348364
[Events.ChatInputCommandSuccess]: [payload: ChatInputCommandSuccessPayload];
349365
[Events.ChatInputCommandError]: [error: unknown, payload: ChatInputCommandErrorPayload];
350-
[Events.ChatInputCommandFinish]: [interaction: CommandInteraction, command: ChatInputCommand, payload: ChatInputCommandRunPayload];
366+
[Events.ChatInputCommandFinish]: [interaction: CommandInteraction, command: ChatInputCommand, payload: ChatInputCommandFinishPayload];
351367

352368
// Context menu command chain
353369
[Events.PossibleContextMenuCommand]: [interaction: ContextMenuInteraction];
@@ -361,7 +377,11 @@ declare module 'discord.js' {
361377
[Events.ContextMenuCommandRun]: [interaction: ContextMenuInteraction, command: ContextMenuCommand, payload: ContextMenuCommandRunPayload];
362378
[Events.ContextMenuCommandSuccess]: [payload: ContextMenuCommandSuccessPayload];
363379
[Events.ContextMenuCommandError]: [error: unknown, payload: ContextMenuCommandErrorPayload];
364-
[Events.ContextMenuCommandFinish]: [interaction: ContextMenuInteraction, command: ContextMenuCommand, payload: ContextMenuCommandRunPayload];
380+
[Events.ContextMenuCommandFinish]: [
381+
interaction: ContextMenuInteraction,
382+
command: ContextMenuCommand,
383+
payload: ContextMenuCommandFinishPayload
384+
];
365385

366386
// #endregion Sapphire load cycle events
367387

src/listeners/application-commands/chat-input/CoreChatInputCommandAccepted.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { PieceContext } from '@sapphire/pieces';
2+
import { Stopwatch } from '@sapphire/stopwatch';
23
import { fromAsync, isErr } from '../../../lib/parsers/Result';
34
import { Listener } from '../../../lib/structures/Listener';
45
import { ChatInputCommandAcceptedPayload, Events } from '../../../lib/types/Events';
@@ -11,16 +12,18 @@ export class CoreListener extends Listener<typeof Events.ChatInputCommandAccepte
1112
public async run(payload: ChatInputCommandAcceptedPayload) {
1213
const { command, context, interaction } = payload;
1314

15+
const stopwatch = new Stopwatch();
1416
const result = await fromAsync(async () => {
1517
this.container.client.emit(Events.ChatInputCommandRun, interaction, command, { ...payload });
1618
const result = await command.chatInputRun(interaction, context);
1719
this.container.client.emit(Events.ChatInputCommandSuccess, { ...payload, result });
1820
});
1921

22+
const { duration } = stopwatch.stop();
2023
if (isErr(result)) {
21-
this.container.client.emit(Events.ChatInputCommandError, result.error, { ...payload });
24+
this.container.client.emit(Events.ChatInputCommandError, result.error, { ...payload, duration });
2225
}
2326

24-
this.container.client.emit(Events.ChatInputCommandFinish, interaction, command, { ...payload });
27+
this.container.client.emit(Events.ChatInputCommandFinish, interaction, command, { ...payload, duration });
2528
}
2629
}

src/listeners/application-commands/context-menu/CoreContextMenuCommandAccepted.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { PieceContext } from '@sapphire/pieces';
2+
import { Stopwatch } from '@sapphire/stopwatch';
23
import { fromAsync, isErr } from '../../../lib/parsers/Result';
34
import { Listener } from '../../../lib/structures/Listener';
45
import { ContextMenuCommandAcceptedPayload, Events } from '../../../lib/types/Events';
@@ -11,16 +12,18 @@ export class CoreListener extends Listener<typeof Events.ContextMenuCommandAccep
1112
public async run(payload: ContextMenuCommandAcceptedPayload) {
1213
const { command, context, interaction } = payload;
1314

15+
const stopwatch = new Stopwatch();
1416
const result = await fromAsync(async () => {
1517
this.container.client.emit(Events.ContextMenuCommandRun, interaction, command, { ...payload });
1618
const result = await command.contextMenuRun(interaction, context);
1719
this.container.client.emit(Events.ContextMenuCommandSuccess, { ...payload, result });
1820
});
1921

22+
const { duration } = stopwatch.stop();
2023
if (isErr(result)) {
21-
this.container.client.emit(Events.ContextMenuCommandError, result.error, { ...payload });
24+
this.container.client.emit(Events.ContextMenuCommandError, result.error, { ...payload, duration });
2225
}
2326

24-
this.container.client.emit(Events.ContextMenuCommandFinish, interaction, command, { ...payload });
27+
this.container.client.emit(Events.ContextMenuCommandFinish, interaction, command, { ...payload, duration });
2528
}
2629
}
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import type { PieceContext } from '@sapphire/pieces';
2+
import { Stopwatch } from '@sapphire/stopwatch';
3+
import { fromAsync, isErr } from '../../lib/parsers/Result';
24
import { Listener } from '../../lib/structures/Listener';
3-
import { MessageCommandAcceptedPayload, Events } from '../../lib/types/Events';
4-
import { isErr, fromAsync } from '../../lib/parsers/Result';
5+
import { Events, MessageCommandAcceptedPayload } from '../../lib/types/Events';
56

67
export class CoreListener extends Listener<typeof Events.MessageCommandAccepted> {
78
public constructor(context: PieceContext) {
@@ -11,16 +12,19 @@ export class CoreListener extends Listener<typeof Events.MessageCommandAccepted>
1112
public async run(payload: MessageCommandAcceptedPayload) {
1213
const { message, command, parameters, context } = payload;
1314
const args = await command.messagePreParse(message, parameters, context);
15+
16+
const stopwatch = new Stopwatch();
1417
const result = await fromAsync(async () => {
1518
message.client.emit(Events.MessageCommandRun, message, command, { ...payload, args });
1619
const result = await command.messageRun(message, args, context);
1720
message.client.emit(Events.MessageCommandSuccess, { ...payload, args, result });
1821
});
1922

23+
const { duration } = stopwatch.stop();
2024
if (isErr(result)) {
21-
message.client.emit(Events.MessageCommandError, result.error, { ...payload, args });
25+
message.client.emit(Events.MessageCommandError, result.error, { ...payload, args, duration });
2226
}
2327

24-
message.client.emit(Events.MessageCommandFinish, message, command, { ...payload, args });
28+
message.client.emit(Events.MessageCommandFinish, message, command, { ...payload, args, duration });
2529
}
2630
}

yarn.lock

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,7 @@ __metadata:
10411041
"@sapphire/pieces": ^3.2.0
10421042
"@sapphire/prettier-config": ^1.2.7
10431043
"@sapphire/ratelimits": ^2.1.10
1044+
"@sapphire/stopwatch": ^1.2.0
10441045
"@sapphire/ts-config": ^3.1.6
10451046
"@sapphire/utilities": ^3.1.0
10461047
"@types/jest": ^27.4.0
@@ -1103,6 +1104,15 @@ __metadata:
11031104
languageName: node
11041105
linkType: hard
11051106

1107+
"@sapphire/stopwatch@npm:^1.2.0":
1108+
version: 1.2.4
1109+
resolution: "@sapphire/stopwatch@npm:1.2.4"
1110+
dependencies:
1111+
tslib: ^2.3.1
1112+
checksum: 0841a5a728a06c556e85470d1d5bb57646829b266ef8ab3c46ac998665edad1dba4eca0aaf689716f91ed4abca58882a93cde2ca354ca51f9c05b568d9be1308
1113+
languageName: node
1114+
linkType: hard
1115+
11061116
"@sapphire/time-utilities@npm:^1.5.0":
11071117
version: 1.5.0
11081118
resolution: "@sapphire/time-utilities@npm:1.5.0"

0 commit comments

Comments
 (0)