Add DM notification system to delete and edit when a Group Up Manager edits/deletes on behalf of the owner

This commit is contained in:
Ean Milligan (Bastion) 2023-04-26 07:47:46 -04:00
parent e1b8ac48da
commit ed827a42fd
2 changed files with 54 additions and 4 deletions

View File

@ -1,9 +1,10 @@
import { ApplicationCommandFlags, Bot, Interaction, InteractionResponseTypes } from '../../../deps.ts';
import { dbClient, generateGuildSettingKey, lfgChannelSettings, queries } from '../../db.ts';
import { failColor, infoColor1, infoColor2, safelyDismissMsg, somethingWentWrong, successColor } from '../../commandUtils.ts';
import { idSeparator, pathIdxEnder, pathIdxSeparator } from '../eventUtils.ts';
import { failColor, infoColor1, infoColor2, safelyDismissMsg, somethingWentWrong, successColor, sendDirectMessage } from '../../commandUtils.ts';
import { generateMemberList, idSeparator, pathIdxEnder, pathIdxSeparator } from '../eventUtils.ts';
import utils from '../../utils.ts';
import config from '../../../config.ts';
import { getGuildName } from './utils.ts';
export const customId = 'deleteConfirmed';
export const confirmedCustomId = 'confirmedCustomId';
@ -31,6 +32,7 @@ const execute = async (bot: Bot, interaction: Interaction) => {
};
if (tempDataMap.get(confirmedCustomId)?.toLowerCase() === confirmStr) {
const guildName = await getGuildName(bot, interaction.guildId);
const eventMessage = await bot.helpers.getMessage(evtChannelId, evtMessageId).catch((e: Error) => utils.commonLoggers.messageGetError('deleteConfirmed.ts', 'get eventMessage', e));
const userId = interaction.member.id;
const userName = interaction.member.user.username;
@ -52,6 +54,7 @@ const execute = async (bot: Bot, interaction: Interaction) => {
}).catch((e: Error) => utils.commonLoggers.interactionSendError('deleteConfirmed.ts', interaction, e));
if (actionByManager) {
const ownerId = BigInt(eventMessage?.embeds[0].footer?.iconUrl?.split('#')[1] || '0');
const eventEmbed = eventMessage?.embeds[0] || { title: 'Event not found', color: failColor };
bot.helpers.sendMessage(lfgChannelSetting.logChannelId, {
embeds: [{
@ -61,6 +64,27 @@ const execute = async (bot: Bot, interaction: Interaction) => {
timestamp: new Date().getTime(),
}, eventEmbed],
}).catch((e: Error) => utils.commonLoggers.messageSendError('deleteConfirmed.ts', 'send log message', e));
sendDirectMessage(bot, ownerId, {
embeds: [{
color: infoColor2,
title: `Notice: A ${config.name} Manager has deleted one of your events in ${guildName}`,
description: 'The deleted event is listed below.',
fields: [
{
name: `${config.name} Manager:`,
value: generateMemberList([{
id: userId,
name: userName,
}]),
inline: true,
}, {
name: 'Are you unhappy with this action?',
value: `Please reach out to the ${config.name} Manager that performed this action, or the moderators/administrators of ${guildName}.`,
},
],
}, eventEmbed],
}).catch((e: Error) => utils.commonLoggers.messageSendError('deleteConfirmed.ts', 'send DM fail', e));
}
}).catch((e) => {
utils.commonLoggers.messageDeleteError('deleteConfirmed.ts', 'deleteEventFailedDB', e);

View File

@ -1,10 +1,11 @@
import { ApplicationCommandFlags, Bot, Interaction, InteractionResponseTypes } from '../../../deps.ts';
import { failColor, infoColor1, infoColor2, safelyDismissMsg, somethingWentWrong, successColor } from '../../commandUtils.ts';
import { idSeparator, LfgEmbedIndexes, pathIdxEnder, pathIdxSeparator } from '../eventUtils.ts';
import { failColor, infoColor1, infoColor2, safelyDismissMsg, somethingWentWrong, successColor, sendDirectMessage } from '../../commandUtils.ts';
import { generateMemberList, idSeparator, LfgEmbedIndexes, pathIdxEnder, pathIdxSeparator } from '../eventUtils.ts';
import { deleteTokenEarly } from '../tokenCleanup.ts';
import utils from '../../utils.ts';
import config from '../../../config.ts';
import { dbClient, generateGuildSettingKey, lfgChannelSettings, queries } from '../../db.ts';
import { getGuildName } from './utils.ts';
export const customId = 'updateEvent';
@ -20,6 +21,7 @@ const execute = async (bot: Bot, interaction: Interaction) => {
const actionByManager = interaction.data.customId.endsWith(pathIdxEnder);
const [evtChannelId, evtMessageId] = (interaction.data.customId.replaceAll(pathIdxEnder, '').split(idSeparator)[1] || '').split(pathIdxSeparator).map((id) => BigInt(id || '0'));
const eventTime: Date = new Date(parseInt(interaction.message.embeds[0].fields[LfgEmbedIndexes.ICSLink].value.split('?t=')[1].split('&n=')[0] || '0'));
const guildName = await getGuildName(bot, interaction.guildId);
const oldEventEmbed = (await bot.helpers.getMessage(evtChannelId, evtMessageId).catch((e: Error) => utils.commonLoggers.messageGetError('updateEvent.ts', 'get eventMessage', e)))?.embeds[0];
const newEventEmbed = interaction.message.embeds[0];
const userId = interaction.member.id;
@ -41,6 +43,7 @@ const execute = async (bot: Bot, interaction: Interaction) => {
}).catch((e: Error) => utils.commonLoggers.interactionSendError('updateEvent.ts', interaction, e));
if (actionByManager) {
const ownerId = BigInt(oldEventEmbed?.footer?.iconUrl?.split('#')[1] || '0');
const missingOldEmbed = { title: 'Failed to get old event', color: failColor };
if (oldEventEmbed) {
oldEventEmbed.color = infoColor1;
@ -57,6 +60,29 @@ const execute = async (bot: Bot, interaction: Interaction) => {
newEventEmbed,
],
}).catch((e: Error) => utils.commonLoggers.messageSendError('updateEvent.ts', 'send log message', e));
sendDirectMessage(bot, ownerId, {
embeds: [{
color: infoColor2,
title: `Notice: A ${config.name} Manager has edited one of your events in ${guildName}`,
description: 'The edited event is listed below. The old event is listed first and marked with a blue bar.',
fields: [
{
name: `${config.name} Manager:`,
value: generateMemberList([{
id: userId,
name: userName,
}]),
inline: true,
}, {
name: 'Are you unhappy with this action?',
value: `Please reach out to the ${config.name} Manager that performed this action, or the moderators/administrators of ${guildName}.`,
},
],
},
oldEventEmbed || missingOldEmbed,
newEventEmbed,],
}).catch((e: Error) => utils.commonLoggers.messageSendError('managerJLA.ts', 'send DM fail', e));
}
}).catch((e) => {
utils.commonLoggers.dbError('updateEvent.ts', 'update event in', e);