From 7714587baae2a1f95f0a3662d9ed537b60d9adab Mon Sep 17 00:00:00 2001 From: Ed Morgan Date: Sat, 13 Jun 2026 10:13:37 -0400 Subject: [PATCH 1/2] Fix RTE pop, cleanup embed --- .../rte/end-session-pop-button-command.ts | 4 +-- src/features/rte/status-embed.ts | 35 +++++++++---------- src/listeners/register-commands.ts | 2 +- src/services/rteService.ts | 4 +-- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/features/rte/end-session-pop-button-command.ts b/src/features/rte/end-session-pop-button-command.ts index 5a53b71..5c5016e 100644 --- a/src/features/rte/end-session-pop-button-command.ts +++ b/src/features/rte/end-session-pop-button-command.ts @@ -37,10 +37,10 @@ export class EndRtePopButtonCommand extends ButtonCommand { public getButtonBuilder(sessionId: number): ButtonBuilder { return new ButtonBuilder() - .setCustomId(`rte_end_pop_${sessionId}`) + .setCustomId(`pop_rte_end_${sessionId}`) .setLabel("End Session (pop)") .setStyle(ButtonStyle.Danger); } } -export const endRtePopButtonCommand = new EndRtePopButtonCommand("rte_end_pop"); +export const endRtePopButtonCommand = new EndRtePopButtonCommand("pop_rte_end"); diff --git a/src/features/rte/status-embed.ts b/src/features/rte/status-embed.ts index 6076981..46703bf 100644 --- a/src/features/rte/status-embed.ts +++ b/src/features/rte/status-embed.ts @@ -33,34 +33,33 @@ const typeIcon = (type: RteType) => { }; export const refreshRteStatusEmbed = async () => { - const openTargets = await rteService.getOpenTargets(); const activeSessions = await rteService.getActiveSessions(); const embed = new EmbedBuilder({ title: `RTE Status — last updated ${moment().format("h:mm:ss A")}`, description: - openTargets.length === 0 - ? "No targets are currently open for RTE." + activeSessions.length === 0 + ? "No active RTE sessions." : undefined, }); - for (const target of openTargets) { - const sessions = activeSessions.filter((s) => s.target === target.target); - let value: string; - if (sessions.length === 0) { - value = "*No active sessions*"; - } else { - value = sessions - .map((s) => { - const elapsed = moment.duration(moment().diff(s.startTime)); - const elapsedStr = `${Math.floor(elapsed.asHours())}h ${elapsed.minutes()}m`; - return `${typeIcon(s.type)} **${s.characterName}**${s.class ? ' - ' + s.class : ''} (<@${s.discordId}>) — ${elapsedStr}`; - }) - .join("\n"); - } + // Get all unique targets that have active sessions + const activeTargets = Array.from( + new Set(activeSessions.map((s) => s.target)) + ).sort(); + + for (const targetName of activeTargets) { + const sessions = activeSessions.filter((s) => s.target === targetName); + const value = sessions + .map((s) => { + const elapsed = moment.duration(moment().diff(s.startTime)); + const elapsedStr = `${Math.floor(elapsed.asHours())}h ${elapsed.minutes()}m`; + return `${typeIcon(s.type)} **${s.characterName}**${s.class ? ' - ' + s.class : ''} (<@${s.discordId}>) — ${elapsedStr}`; + }) + .join("\n"); embed.addFields({ - name: target.target, + name: targetName, value, inline: false, }); diff --git a/src/listeners/register-commands.ts b/src/listeners/register-commands.ts index 8839e29..542ff8f 100644 --- a/src/listeners/register-commands.ts +++ b/src/listeners/register-commands.ts @@ -130,7 +130,7 @@ export const getCommand = ( export const getButton = (interaction: ButtonInteraction) => { const command = buttonCommands.find((c) => - interaction.customId.includes(c.customId) + interaction.customId.startsWith(c.customId) ); if (!command) { throw new Error( diff --git a/src/services/rteService.ts b/src/services/rteService.ts index 9151786..d08fbc5 100644 --- a/src/services/rteService.ts +++ b/src/services/rteService.ts @@ -79,7 +79,7 @@ export const rteService = { .setStyle(ButtonStyle.Danger); const popButton = new ButtonBuilder() - .setCustomId(`rte_end_pop_${session.id}`) + .setCustomId(`pop_rte_end_${session.id}`) .setLabel("End Session (pop)") .setStyle(ButtonStyle.Danger); @@ -122,7 +122,7 @@ export const rteService = { // If this fails, the session remains active so the user can retry. const user = await client.users.fetch(session.discordId); await user.send({ - content: `Your **${formatType(session.type)}** session for **${session.target}** has ended.\n\n**Summary:**\n- Character: ${session.characterName}\n- Duration: ${formatDuration(summary.elapsedMinutes)}\n- Rounded Duration: ${formatDuration(summary.roundedMinutes)}\n- Hourly Rate: ${summary.hourlyRate} DKP\n- **DKP Earned: ${summary.dkpEarned.toFixed(2)}**`, + content: `Your **${formatType(session.type)}** session for **${session.target}** has ended${roundUp ? " (rounded up due to pop)" : ""}.\n\n**Summary:**\n- Character: ${session.characterName}\n- Duration: ${formatDuration(summary.elapsedMinutes)}\n- Rounded Duration: ${formatDuration(summary.roundedMinutes)}\n- Hourly Rate: ${summary.hourlyRate} DKP\n- **DKP Earned: ${summary.dkpEarned.toFixed(2)}**`, }); await prismaClient.rte.update({ From dd56e2ad595a1fff5694c71b1f1f662c066d394e Mon Sep 17 00:00:00 2001 From: Ed Morgan Date: Sat, 13 Jun 2026 10:16:31 -0400 Subject: [PATCH 2/2] Cleanup --- src/features/rte/end-session-pop-button-command.ts | 4 ++-- src/listeners/register-commands.ts | 2 +- src/services/rteService.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/features/rte/end-session-pop-button-command.ts b/src/features/rte/end-session-pop-button-command.ts index 5c5016e..bd9c953 100644 --- a/src/features/rte/end-session-pop-button-command.ts +++ b/src/features/rte/end-session-pop-button-command.ts @@ -37,10 +37,10 @@ export class EndRtePopButtonCommand extends ButtonCommand { public getButtonBuilder(sessionId: number): ButtonBuilder { return new ButtonBuilder() - .setCustomId(`pop_rte_end_${sessionId}`) + .setCustomId(`rte_pop_end_${sessionId}`) .setLabel("End Session (pop)") .setStyle(ButtonStyle.Danger); } } -export const endRtePopButtonCommand = new EndRtePopButtonCommand("pop_rte_end"); +export const endRtePopButtonCommand = new EndRtePopButtonCommand("rte_pop_end"); diff --git a/src/listeners/register-commands.ts b/src/listeners/register-commands.ts index 542ff8f..8839e29 100644 --- a/src/listeners/register-commands.ts +++ b/src/listeners/register-commands.ts @@ -130,7 +130,7 @@ export const getCommand = ( export const getButton = (interaction: ButtonInteraction) => { const command = buttonCommands.find((c) => - interaction.customId.startsWith(c.customId) + interaction.customId.includes(c.customId) ); if (!command) { throw new Error( diff --git a/src/services/rteService.ts b/src/services/rteService.ts index d08fbc5..5633ae4 100644 --- a/src/services/rteService.ts +++ b/src/services/rteService.ts @@ -79,7 +79,7 @@ export const rteService = { .setStyle(ButtonStyle.Danger); const popButton = new ButtonBuilder() - .setCustomId(`pop_rte_end_${session.id}`) + .setCustomId(`rte_pop_end_${session.id}`) .setLabel("End Session (pop)") .setStyle(ButtonStyle.Danger);