From 1f7161a252947ba88b9018665e1ce756f74953d3 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sat, 8 Nov 2025 10:43:41 +0000 Subject: [PATCH] Create /verify-role command to check assigned roles cgen-929d42ccff9c4e4f86f3d3b3650ef064 --- discord-bot/commands/verify-role.js | 72 +++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 discord-bot/commands/verify-role.js diff --git a/discord-bot/commands/verify-role.js b/discord-bot/commands/verify-role.js new file mode 100644 index 00000000..7508397c --- /dev/null +++ b/discord-bot/commands/verify-role.js @@ -0,0 +1,72 @@ +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); + +module.exports = { + data: new SlashCommandBuilder() + .setName('verify-role') + .setDescription('Check your AeThex-assigned Discord roles'), + + 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 { data: profile } = await supabase + .from('user_profiles') + .select('user_type') + .eq('id', link.user_id) + .single(); + + const { data: mappings } = await supabase + .from('discord_role_mappings') + .select('discord_role') + .eq('arm', link.primary_arm) + .eq('user_type', profile?.user_type || 'community_member'); + + const member = await interaction.guild.members.fetch(interaction.user.id); + const aethexRoles = member.roles.cache.filter(role => + role.name.includes('Labs') || + role.name.includes('GameForge') || + role.name.includes('Corp') || + role.name.includes('Foundation') || + role.name.includes('Dev-Link') || + role.name.includes('Premium') || + role.name.includes('Creator') + ); + + const embed = new EmbedBuilder() + .setColor(0x7289DA) + .setTitle('🔐 Your AeThex Roles') + .addFields( + { name: '⚔️ Primary Realm', value: link.primary_arm || 'Not set', inline: true }, + { name: '👤 User Type', value: profile?.user_type || 'community_member', inline: true }, + { name: '🎭 Discord Roles', value: aethexRoles.size > 0 ? aethexRoles.map(r => r.name).join(', ') : 'None assigned yet' }, + { name: '📋 Expected Roles', value: mappings?.length > 0 ? mappings.map(m => m.discord_role).join(', ') : 'No mappings found' }, + ) + .setFooter({ text: 'Roles are assigned automatically based on your AeThex profile' }); + + await interaction.editReply({ embeds: [embed] }); + } catch (error) { + console.error('Verify-role command error:', error); + const embed = new EmbedBuilder() + .setColor(0xFF0000) + .setTitle('❌ Error') + .setDescription('Failed to verify roles. Please try again.'); + + await interaction.editReply({ embeds: [embed] }); + } + }, +};