Create /set-realm command to choose primary arm
cgen-8e17e4dbfb8f48cda68f152b6cef8299
This commit is contained in:
parent
bd8a714aa7
commit
16031cc545
1 changed files with 95 additions and 0 deletions
95
discord-bot/commands/set-realm.js
Normal file
95
discord-bot/commands/set-realm.js
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
const { SlashCommandBuilder, EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder } = require('discord.js');
|
||||
|
||||
const REALMS = [
|
||||
{ value: 'labs', label: '🧪 Labs', description: 'Research & Development' },
|
||||
{ value: 'gameforge', label: '🎮 GameForge', description: 'Game Development' },
|
||||
{ value: 'corp', label: '💼 Corp', description: 'Enterprise Solutions' },
|
||||
{ value: 'foundation', label: '🤝 Foundation', description: 'Community & Education' },
|
||||
{ value: 'devlink', label: '💻 Dev-Link', description: 'Professional Networking' },
|
||||
];
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('set-realm')
|
||||
.setDescription('Set your primary AeThex realm/arm'),
|
||||
|
||||
async execute(interaction, supabase) {
|
||||
await interaction.deferReply({ ephemeral: true });
|
||||
|
||||
try {
|
||||
const { data: link } = await supabase
|
||||
.from('discord_links')
|
||||
.select('user_id, primary_arm')
|
||||
.eq('discord_id', interaction.user.id)
|
||||
.single();
|
||||
|
||||
if (!link) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor(0xFF6B6B)
|
||||
.setTitle('❌ Not Linked')
|
||||
.setDescription('You must link your Discord account to AeThex first.\nUse `/verify` to get started.');
|
||||
|
||||
return await interaction.editReply({ embeds: [embed] });
|
||||
}
|
||||
|
||||
const select = new StringSelectMenuBuilder()
|
||||
.setCustomId('select_realm')
|
||||
.setPlaceholder('Choose your primary realm')
|
||||
.addOptions(
|
||||
REALMS.map(realm => ({
|
||||
label: realm.label,
|
||||
description: realm.description,
|
||||
value: realm.value,
|
||||
default: realm.value === link.primary_arm,
|
||||
})),
|
||||
);
|
||||
|
||||
const row = new ActionRowBuilder().addComponents(select);
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor(0x7289DA)
|
||||
.setTitle('⚔️ Choose Your Realm')
|
||||
.setDescription('Select your primary AeThex realm. This determines your main Discord role.')
|
||||
.addFields(
|
||||
{ name: 'Current Realm', value: link.primary_arm || 'Not set' },
|
||||
);
|
||||
|
||||
await interaction.editReply({ embeds: [embed], components: [row] });
|
||||
|
||||
const filter = i => i.user.id === interaction.user.id && i.customId === 'select_realm';
|
||||
const collector = interaction.channel.createMessageComponentCollector({ filter, time: 60000 });
|
||||
|
||||
collector.on('collect', async i => {
|
||||
const selectedRealm = i.values[0];
|
||||
|
||||
await supabase
|
||||
.from('discord_links')
|
||||
.update({ primary_arm: selectedRealm })
|
||||
.eq('discord_id', interaction.user.id);
|
||||
|
||||
const realm = REALMS.find(r => r.value === selectedRealm);
|
||||
|
||||
const confirmEmbed = new EmbedBuilder()
|
||||
.setColor(0x00FF00)
|
||||
.setTitle('✅ Realm Set')
|
||||
.setDescription(`Your primary realm is now **${realm.label}**\n\nYou'll be assigned the corresponding Discord role.`);
|
||||
|
||||
await i.update({ embeds: [confirmEmbed], components: [] });
|
||||
});
|
||||
|
||||
collector.on('end', collected => {
|
||||
if (collected.size === 0) {
|
||||
interaction.editReply({ content: 'Realm selection timed out.', components: [] });
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Set-realm command error:', error);
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor(0xFF0000)
|
||||
.setTitle('❌ Error')
|
||||
.setDescription('Failed to update realm. Please try again.');
|
||||
|
||||
await interaction.editReply({ embeds: [embed] });
|
||||
}
|
||||
},
|
||||
};
|
||||
Loading…
Reference in a new issue