1
1
mirror of https://github.com/Burn-E99/GroupUp.git synced 2026-01-06 19:37:54 -05:00

Add manager Join/Leave/Alternate commands

additionally update deleteConfirmed such that the group up manager name syntax matches name syntax elsewhere in the bot
This commit is contained in:
Ean Milligan (Bastion)
2023-04-21 02:00:36 -04:00
parent 9051792ff3
commit 00a98db405
8 changed files with 215 additions and 15 deletions

View File

@ -10,7 +10,7 @@ export const confirmedCustomId = 'confirmedCustomId';
export const confirmStr = 'yes';
const execute = async (bot: Bot, interaction: Interaction) => {
if (interaction?.data?.customId && interaction?.data?.components?.length && interaction.channelId && interaction.guildId && interaction.member) {
if (interaction?.data?.customId && interaction?.data?.components?.length && interaction.channelId && interaction.guildId && interaction.member && interaction.member.user) {
// Light Telemetry
dbClient.execute(queries.callIncCnt('btn-confirmDelEvent')).catch((e) => utils.commonLoggers.dbError('deleteConfirmed.ts@incCnt', 'call sproc INC_CNT on', e));
@ -33,6 +33,7 @@ const execute = async (bot: Bot, interaction: Interaction) => {
if (tempDataMap.get(confirmedCustomId)?.toLowerCase() === confirmStr) {
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;
// Delete event
bot.helpers.deleteMessage(evtChannelId, evtMessageId, 'User deleted event').then(() => {
dbClient.execute(queries.deleteEvent, [evtChannelId, evtMessageId]).catch((e) => utils.commonLoggers.dbError('deleteConfirmed.ts@deleteEvent', 'delete event from', e));
@ -56,7 +57,7 @@ const execute = async (bot: Bot, interaction: Interaction) => {
embeds: [{
color: infoColor2,
title: `Event deleted by a ${config.name} Manager`,
description: `The following event was deleted by <@${userId}>.`,
description: `The following event was deleted by ${userName} - <@${userId}>.`,
timestamp: new Date().getTime(),
}, eventEmbed],
}).catch((e: Error) => utils.commonLoggers.messageSendError('deleteConfirmed.ts', 'send log message', e));

View File

@ -18,7 +18,7 @@ const execute = async (bot: Bot, interaction: Interaction) => {
const memberRequesting = getLfgMembers(interaction.message.embeds[0].fields[0].value || '')[0];
const approved = interaction.data.customId.includes(approveStr);
const responseStr = interaction.data.customId.split(idSeparator)[1] || '';
const capResponseStr = `${responseStr.charAt(0).toUpperCase()}${responseStr.slice(1)}`;
const capResponseStr = utils.capitalizeFirstChar(responseStr);
const eventIds = utils.messageUrlToIds(interaction.message.embeds[0].description.split(')')[0] || '');
const eventUrl = utils.idsToMessageUrl(eventIds);
const joinRequestMapId = generateMapId(eventIds.messageId, eventIds.channelId, memberRequesting.id);

View File

@ -81,7 +81,7 @@ const editEvent = async (
memberList: Array<LFGMember>,
maxMemberCount: number,
alternateList: Array<LFGMember>,
loudAcknowledge = false,
loudAcknowledge: boolean,
) => {
if (evtMessageEmbed.fields) {
// Update the fields
@ -122,7 +122,7 @@ ${safelyDismissMsg}`,
};
// Generic no response response
const noEdit = async (bot: Bot, interaction: Interaction, loudAcknowledge = false) => {
const noEdit = async (bot: Bot, interaction: Interaction, loudAcknowledge: boolean) => {
if (loudAcknowledge) {
bot.helpers.sendInteractionResponse(interaction.id, interaction.token, {
type: InteractionResponseTypes.ChannelMessageWithSource,
@ -149,7 +149,16 @@ export const getGuildName = async (bot: Bot, guildId: bigint): Promise<string> =
(await bot.helpers.getGuild(guildId).catch((e: Error) => utils.commonLoggers.messageGetError('utils.ts', 'get guild', e)) || { name: 'failed to get guild name' }).name;
// Remove member from the event
export const removeMemberFromEvent = async (bot: Bot, interaction: Interaction, evtMessageEmbed: Embed, evtMessageId: bigint, evtChannelId: bigint, userId: bigint, evtGuildId: bigint) => {
export const removeMemberFromEvent = async (
bot: Bot,
interaction: Interaction,
evtMessageEmbed: Embed,
evtMessageId: bigint,
evtChannelId: bigint,
userId: bigint,
evtGuildId: bigint,
loudAcknowledge = false,
): Promise<boolean> => {
if (evtMessageEmbed.fields) {
// Get old counts
const [oldMemberCount, maxMemberCount] = getEventMemberCount(evtMessageEmbed.fields[LfgEmbedIndexes.JoinedMembers].name);
@ -202,13 +211,16 @@ export const removeMemberFromEvent = async (bot: Bot, interaction: Interaction,
}
// Update the event
await editEvent(bot, interaction, evtMessageEmbed, evtMessageId, evtChannelId, memberList, maxMemberCount, alternateList);
await editEvent(bot, interaction, evtMessageEmbed, evtMessageId, evtChannelId, memberList, maxMemberCount, alternateList, loudAcknowledge);
return true;
} else {
// Send noEdit response because user did not actually leave
await noEdit(bot, interaction);
await noEdit(bot, interaction, loudAcknowledge);
return false;
}
} else {
await somethingWentWrong(bot, interaction, 'noFieldsInRemoveMember');
return false;
}
};
@ -222,7 +234,7 @@ export const alternateMemberToEvent = async (
member: LFGMember,
userJoinOnFull = false,
loudAcknowledge = false,
) => {
): Promise<boolean> => {
if (evtMessageEmbed.fields) {
member.joined = userJoinOnFull;
// Get current alternates
@ -241,18 +253,30 @@ export const alternateMemberToEvent = async (
// Update the event
evtMessageEmbed.fields[LfgEmbedIndexes.AlternateMembers].value = generateAlternateList(alternateList);
await editEvent(bot, interaction, evtMessageEmbed, evtMessageId, evtChannelId, memberList, maxMemberCount, alternateList, loudAcknowledge);
return true;
} else {
// Send noEdit response because user was already an alternate and joined status did not change
await noEdit(bot, interaction, loudAcknowledge);
return false;
}
} else {
// No fields, can't alternate
await somethingWentWrong(bot, interaction, 'noFieldsInAlternateMember');
return false;
}
};
// Join member to the event
export const joinMemberToEvent = async (bot: Bot, interaction: Interaction, evtMessageEmbed: Embed, evtMessageId: bigint, evtChannelId: bigint, member: LFGMember, evtGuildId: bigint) => {
export const joinMemberToEvent = async (
bot: Bot,
interaction: Interaction,
evtMessageEmbed: Embed,
evtMessageId: bigint,
evtChannelId: bigint,
member: LFGMember,
evtGuildId: bigint,
loudAcknowledge = false,
): Promise<boolean> => {
if (evtMessageEmbed.fields) {
// Get current member list and count
const [oldMemberCount, maxMemberCount] = getEventMemberCount(evtMessageEmbed.fields[LfgEmbedIndexes.JoinedMembers].name);
@ -260,10 +284,11 @@ export const joinMemberToEvent = async (bot: Bot, interaction: Interaction, evtM
// Verify user is not already on the joined list
if (memberList.find((joinedMember) => joinedMember.id === member.id)) {
// Send noEdit response because user was already joined
await noEdit(bot, interaction);
await noEdit(bot, interaction, loudAcknowledge);
return false;
} else if (oldMemberCount === maxMemberCount) {
// Event full, add member to alternate list
await alternateMemberToEvent(bot, interaction, evtMessageEmbed, evtMessageId, evtChannelId, member, true);
return await alternateMemberToEvent(bot, interaction, evtMessageEmbed, evtMessageId, evtChannelId, member, true, loudAcknowledge);
} else {
// Join member to event
memberList.push(member);
@ -272,7 +297,7 @@ export const joinMemberToEvent = async (bot: Bot, interaction: Interaction, evtM
const alternateList = removeLfgMember(getLfgMembers(evtMessageEmbed.fields[LfgEmbedIndexes.AlternateMembers].value), member.id);
// Update the event
await editEvent(bot, interaction, evtMessageEmbed, evtMessageId, evtChannelId, memberList, maxMemberCount, alternateList);
await editEvent(bot, interaction, evtMessageEmbed, evtMessageId, evtChannelId, memberList, maxMemberCount, alternateList, loudAcknowledge);
// Check if we need to notify the owner that their event has filled
if (memberList.length === maxMemberCount) {
@ -292,10 +317,12 @@ export const joinMemberToEvent = async (bot: Bot, interaction: Interaction, evtM
}],
}).catch((e: Error) => utils.commonLoggers.messageSendError('utils.ts', 'event filled dm', e));
}
return true;
}
} else {
// No fields, can't join
await somethingWentWrong(bot, interaction, 'noFieldsInJoinMember');
return false;
}
};