From e7301275754e9ceb26c9b6fb23d6fd9144d331f3 Mon Sep 17 00:00:00 2001 From: JustDams Date: Wed, 1 Nov 2023 20:12:35 +0100 Subject: [PATCH] update: teams --- commands/team.js | 56 ++++++++++--------- interactions/selectmenus/teamInfosSelector.js | 50 ++++++----------- 2 files changed, 47 insertions(+), 59 deletions(-) diff --git a/commands/team.js b/commands/team.js index 45cc2c64..6dc93790 100644 --- a/commands/team.js +++ b/commands/team.js @@ -1,13 +1,14 @@ -const { maxLengthTeamName, defaultGame } = require('../config.json') +const { maxLengthTeamName, defaultGame, itemByPage } = require('../config.json') const Discord = require('discord.js') const Team = require('../database/team') const UserTeam = require('../database/userTeam') const User = require('../database/user') const errorCard = require('../templates/errorCard') -const { isInteractionSubcommandEqual, getInteractionOption, getCardsConditions } = require('../functions/commands') +const { getCardsConditions } = require('../functions/commands') const successCard = require('../templates/successCard') const { getTranslation, getTranslations } = require('../languages/setup') const { getStats } = require('../functions/apiHandler') +const { isInteractionSubcommandEqual, getInteractionOption, generateOption } = require('../functions/utility') const INFO = 'info' const CREATE = 'create' @@ -45,34 +46,34 @@ const infoTeam = async (interaction, currentTeam, user) => { if (currentTeam) userTeams.push(currentTeam) if (userTeams.length === 0) return errorCard('error.user.noTeam', interaction.locale) - const options = Array.from(new Set(userTeams.map(JSON.stringify))) - .map(JSON.parse) - .map(userteam => { - if (userteam) return { - label: userteam.name, - description: getTranslation('strings.infoTeam', interaction.locale, { - teamName: userteam.name, - }), - value: JSON.stringify({ - tn: userteam.slug, - u: user, - }) + const options = userTeams.map(userteam => { + return { + label: userteam.name, + description: getTranslation('strings.infoTeam', interaction.locale, { + teamName: userteam.name, + }), + values: { + slug: userteam.slug, + userId: user } - }) - .filter(e => e !== undefined) + } + }) - const row = new Discord.ActionRowBuilder() - .addComponents( - new Discord.StringSelectMenuBuilder() - .setCustomId('teamInfoSelector') - .setPlaceholder(getTranslation('strings.selectTeam', interaction.locale)) - .addOptions(options.slice(0, 25))) + return Promise.all(options.map(option => generateOption(interaction, option))) + .then(options => { + const row = new Discord.ActionRowBuilder() + .addComponents( + new Discord.StringSelectMenuBuilder() + .setCustomId('teamInfoSelector') + .setPlaceholder(getTranslation('strings.selectTeam', interaction.locale)) + .addOptions(options.slice(0, itemByPage))) - return { - components: [ - row - ] - } + return { + components: [ + row + ] + } + }) } const updateTeam = async (interaction, currentTeam) => { @@ -281,6 +282,7 @@ module.exports = { - ${ADD_USER} [ ] - ${REMOVE_USER} [ ]`, type: 'utility', + ephemeral: true, async execute(interaction) { const user = interaction.user.id const currentTeam = await Team.getCreatorTeam(user) diff --git a/interactions/selectmenus/teamInfosSelector.js b/interactions/selectmenus/teamInfosSelector.js index 78a0ff96..627a2bbb 100644 --- a/interactions/selectmenus/teamInfosSelector.js +++ b/interactions/selectmenus/teamInfosSelector.js @@ -1,38 +1,31 @@ const { color, emojis, defaultGame } = require('../../config.json') const Discord = require('discord.js') -const loadingCard = require('../../templates/loadingCard') +const { getCardByUserType } = require('../../templates/loadingCard') const UserTeam = require('../../database/userTeam') const Team = require('../../database/team') const User = require('../../database/user') const errorCard = require('../../templates/errorCard') -const { setOptionValues } = require('../../functions/dateStats') const { getStats } = require('../../functions/apiHandler') +const { updateDefaultOption } = require('../../functions/utility') module.exports = { name: 'teamInfoSelector', - async execute(interaction, values) { - const options = interaction.message.components.at(0).components - .filter(e => e instanceof Discord.StringSelectMenuComponent) - .map(msm => { - return msm.options.map(o => { - const active = JSON.parse(o.value).tn.normalize() === values.tn.normalize() - o.emoji = active ? emojis.select.balise : undefined - o.default = active + async execute(interaction, values, newUser = false) { + const optionComponent = interaction.message.components.at(0).components + + updateDefaultOption(optionComponent, interaction.values[0], true) - setOptionValues(o, values) + const components = [ + new Discord.ActionRowBuilder() + .addComponents( + new Discord.StringSelectMenuBuilder() + .setCustomId('teamInfoSelector') + .addOptions(optionComponent.at(0).data.options)) + ] - return o - }) - }).at(0) - - const components = new Discord.ActionRowBuilder() - .addComponents( - new Discord.StringSelectMenuBuilder() - .setCustomId('teamInfoSelector') - .addOptions(options)) - - loadingCard(interaction) - const currentTeam = await Team.getTeamSlug(values.tn) + getCardByUserType(newUser, interaction) + + const currentTeam = await Team.getTeamSlug(values.slug) const teamUsers = await UserTeam.getTeamUsers(currentTeam.slug) // check if user is part of the team if not the creator @@ -43,9 +36,7 @@ module.exports = { const userIsPartOfTeam = teamUsers.find(user => user.faceitId === currentUser.faceitId) if (!userIsPartOfTeam) return { ...errorCard('error.command.teamNoAccess', interaction.locale), - components: [ - components - ] + components } } @@ -85,12 +76,7 @@ module.exports = { embeds: [ embed, ], - components: [ - components - ] + components } - }, - getJSON(interaction, json) { - return JSON.parse(interaction.values) } } \ No newline at end of file