From c00e8e7c8389bc11484e5af25b0342978d83c490 Mon Sep 17 00:00:00 2001 From: "Ean Milligan (Bastion)" Date: Sat, 8 Apr 2023 04:31:04 -0400 Subject: [PATCH] Add notification of promotion when user leaves full event --- src/buttons/live-event/leaveEvent.ts | 4 +-- src/buttons/live-event/utils.ts | 41 ++++++++++++++++++++++++---- src/commandUtils.ts | 5 +--- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/buttons/live-event/leaveEvent.ts b/src/buttons/live-event/leaveEvent.ts index 950b8db..c2a0288 100644 --- a/src/buttons/live-event/leaveEvent.ts +++ b/src/buttons/live-event/leaveEvent.ts @@ -7,12 +7,12 @@ import { removeMemberFromEvent } from './utils.ts'; export const customId = 'leaveEvent'; export const execute = async (bot: Bot, interaction: Interaction) => { - if (interaction.data?.customId && interaction.member && interaction.channelId && interaction.message && interaction.message.embeds[0]) { + if (interaction.data?.customId && interaction.member && interaction.channelId && interaction.guildId && interaction.message && interaction.message.embeds[0]) { // Light Telemetry dbClient.execute(queries.callIncCnt('btn-leaveEvent')).catch((e) => utils.commonLoggers.dbError('leaveEvent.ts', 'call sproc INC_CNT on', e)); // Remove user from event - removeMemberFromEvent(bot, interaction, interaction.message.embeds[0], interaction.message.id, interaction.channelId, interaction.member.id); + removeMemberFromEvent(bot, interaction, interaction.message.embeds[0], interaction.message.id, interaction.channelId, interaction.member.id, interaction.guildId); } else { somethingWentWrong(bot, interaction, 'noDataFromLeaveEventButton'); } diff --git a/src/buttons/live-event/utils.ts b/src/buttons/live-event/utils.ts index 623368f..2307daf 100644 --- a/src/buttons/live-event/utils.ts +++ b/src/buttons/live-event/utils.ts @@ -1,7 +1,7 @@ -import { Bot, Embed, Interaction, InteractionResponseTypes } from '../../../deps.ts'; -import { LFGMember } from '../../types/commandTypes.ts'; -import { somethingWentWrong } from '../../commandUtils.ts'; -import { generateAlternateList, generateMemberList, generateMemberTitle, LfgEmbedIndexes, noMembersStr } from '../eventUtils.ts'; +import { Bot, ButtonStyles, Embed, Interaction, InteractionResponseTypes, MessageComponentTypes } from '../../../deps.ts'; +import { LFGMember, UrlIds } from '../../types/commandTypes.ts'; +import { sendDirectMessage, somethingWentWrong } from '../../commandUtils.ts'; +import { generateAlternateList, generateMemberList, generateMemberTitle, leaveEventBtnStr, LfgEmbedIndexes, noMembersStr } from '../eventUtils.ts'; import utils from '../../utils.ts'; // Get Member Counts from the title @@ -65,7 +65,7 @@ const noEdit = async (bot: Bot, interaction: Interaction) => }).catch((e: Error) => utils.commonLoggers.interactionSendError('utils.ts', interaction, e)); // Remove member from the event -export const removeMemberFromEvent = async (bot: Bot, interaction: Interaction, evtMessageEmbed: Embed, evtMessageId: bigint, evtChannelId: bigint, userId: bigint) => { +export const removeMemberFromEvent = async (bot: Bot, interaction: Interaction, evtMessageEmbed: Embed, evtMessageId: bigint, evtChannelId: bigint, userId: bigint, evtGuildId: bigint) => { if (evtMessageEmbed.fields) { // Get old counts const [oldMemberCount, maxMemberCount] = getEventMemberCount(evtMessageEmbed.fields[LfgEmbedIndexes.JoinedMembers].name); @@ -84,8 +84,37 @@ export const removeMemberFromEvent = async (bot: Bot, interaction: Interaction, alternateList = removeLfgMember(alternateList, memberToPromote.id); memberList.push(memberToPromote); + const urlIds: UrlIds = { + guildId: evtGuildId, + channelId: evtChannelId, + messageId: evtMessageId, + }; + + const guildDetails = await bot.helpers.getGuild(evtGuildId).catch((e: Error) => utils.commonLoggers.messageGetError('utils.ts', 'get guild', e)); + // Notify member of promotion - // TODO: send notification + await sendDirectMessage(bot, memberToPromote.id, { + embeds: [{ + title: 'Good news, you\'ve been promoted!', + description: `A member left [the full event](${utils.idsToMessageUrl(urlIds)}) in ${ + guildDetails?.name || '`failed to get guild name`' + } you tried to join, leaving space for me to promote you from the alternate list to the joined list.\n\nPlease verify the event details below. If you are no longer available for this event, please click on the '${leaveEventBtnStr}' button below`, + fields: [ + evtMessageEmbed.fields[LfgEmbedIndexes.Activity], + evtMessageEmbed.fields[LfgEmbedIndexes.StartTime], + evtMessageEmbed.fields[LfgEmbedIndexes.ICSLink], + ], + }], + components: [{ + type: MessageComponentTypes.ActionRow, + components: [{ + type: MessageComponentTypes.Button, + label: leaveEventBtnStr, + style: ButtonStyles.Danger, + customId: 'leaveEventCustomId', // TODO: fix + }], + }], + }).catch((e: Error) => utils.commonLoggers.messageSendError('utils.ts', 'user promotion', e)); } // Update the event diff --git a/src/commandUtils.ts b/src/commandUtils.ts index 8a5c27c..537d336 100644 --- a/src/commandUtils.ts +++ b/src/commandUtils.ts @@ -46,7 +46,4 @@ export const sendDirectMessage = async (bot: Bot, userId: bigint, message: Creat bot.helpers.getDmChannel(userId).then((userDmChannel) => { // Actually send the DM bot.helpers.sendMessage(userDmChannel.id, message).catch((e: Error) => utils.commonLoggers.messageSendError('commandUtils.ts', message, e)); - }).catch((e: Error) => { - // Edit failed, try to notify user - utils.commonLoggers.messageGetError('commandUtils.ts', 'get userDmChannel', e); - }); + }).catch((e: Error) => utils.commonLoggers.messageGetError('commandUtils.ts', 'get userDmChannel', e));