Profile: Allow editing of customStatus using the editprofile command

Editprofile itself now shows buttons to select different subcommands.
This commit is contained in:
2022-09-12 13:39:06 +02:00
parent 5ea33b21a0
commit c5fddd12cf

View File

@@ -13,8 +13,44 @@ module.exports = {
let user = await UserUtils.getUserByDiscordId(interaction.member.id); let user = await UserUtils.getUserByDiscordId(interaction.member.id);
let profile = await user.getProfile(); let profile = await user.getProfile();
console.log(profile['slotOne']);
//row of button components to select what property to edit
const row = new ActionRowBuilder();
row.addComponents(
new ButtonBuilder()
.setLabel('Edit Status')
.setCustomId('editStatus')
.setStyle(ButtonStyle.Primary),
new ButtonBuilder()
.setLabel('Edit Showcase')
.setCustomId('editShowcase')
.setStyle(ButtonStyle.Primary)
);
//show buttons
let message = await interaction.reply({ content: "", components: [row], fetchReply: true });
//filter only events from the user who triggered the command
const filter = (m) => m.author.id === interaction.author.id;
const collector = message.createMessageComponentCollector({ componentType: ComponentType.Button, time: 25000 })
collector.on('collect', async (m) => {
switch (m.customId) {
case 'editStatus':
await this.openStatusModal(m, user, profile);
break;
case 'editShowcase':
await this.openShowcaseModal(m, user, profile);
break;
default:
m.reply({ content: "Invalid selection" });
break;
}
});
},
async openShowcaseModal(interaction, user, profile) {
const modal = new ModalBuilder() const modal = new ModalBuilder()
.setCustomId('cardSlotModal') .setCustomId('cardSlotModal')
.setTitle('Edit card showcase'); .setTitle('Edit card showcase');
@@ -35,7 +71,6 @@ module.exports = {
modal.addComponents(cardIDComponenets); modal.addComponents(cardIDComponenets);
} }
let message = await interaction.showModal(modal); let message = await interaction.showModal(modal);
let submitted = await interaction.awaitModalSubmit({ let submitted = await interaction.awaitModalSubmit({
@@ -63,5 +98,43 @@ module.exports = {
content: `Updated showcase`, content: `Updated showcase`,
}) })
} }
},
async openStatusModal(interaction, user, profile) {
const modal = new ModalBuilder()
.setCustomId('descriptionModal')
.setTitle('Edit profile status/description');
let row = new ActionRowBuilder();
let statusInput = new TextInputBuilder()
.setCustomId('profileStatus')
.setLabel(`Your status`)
.setStyle(TextInputStyle.Paragraph)
.setRequired(false)
.setMaxLength(155)
.setPlaceholder(profile.customStatus ? profile.customStatus.slice(0,90) + '...' : "No status set");
row.addComponents(statusInput);
modal.addComponents(row);
let message = await interaction.showModal(modal);
let submitted = await interaction.awaitModalSubmit({
time: 300000,
filter: i => i.user.id === interaction.user.id,
}).catch(error => {
//Error includes timeout
console.error(error)
return null
})
if (submitted) {
let updatePayload = {};
if (submitted.fields.getTextInputValue('profileStatus') != profile.customStatus) {
profile.update({customStatus: submitted.fields.getTextInputValue('profileStatus')});
} }
await submitted.reply({
content: `Updated status`,
})
}
}
} }