const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); module.exports = { data: new SlashCommandBuilder() .setName("stats") .setDescription("View your AeThex statistics and activity"), async execute(interaction, supabase) { if (!supabase) { return interaction.reply({ content: "This feature requires Supabase to be configured.", ephemeral: true }); } await interaction.deferReply({ ephemeral: true }); try { const { data: link, error: linkError } = await supabase .from("discord_links") .select("user_id, primary_arm, linked_at") .eq("discord_id", interaction.user.id) .maybeSingle(); if (linkError) { console.error("Stats link query error:", linkError); } 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("*") .eq("id", link.user_id) .maybeSingle(); const { count: postCount } = await supabase .from("community_posts") .select("*", { count: "exact", head: true }) .eq("user_id", link.user_id); const { count: likeCount } = await supabase .from("community_likes") .select("*", { count: "exact", head: true }) .eq("user_id", link.user_id); const { count: commentCount } = await supabase .from("community_comments") .select("*", { count: "exact", head: true }) .eq("user_id", link.user_id); const { data: creatorProfile } = await supabase .from("aethex_creators") .select("verified, featured, total_projects") .eq("user_id", link.user_id) .maybeSingle(); const armEmojis = { labs: "๐Ÿงช", gameforge: "๐ŸŽฎ", corp: "๐Ÿ’ผ", foundation: "๐Ÿค", devlink: "๐Ÿ’ป", }; const linkedDate = new Date(link.linked_at); const daysSinceLinked = Math.floor( (Date.now() - linkedDate.getTime()) / (1000 * 60 * 60 * 24) ); // Validate avatar URL - must be http/https, not base64 let avatarUrl = interaction.user.displayAvatarURL(); if (profile?.avatar_url && profile.avatar_url.startsWith('http')) { avatarUrl = profile.avatar_url; } const embed = new EmbedBuilder() .setColor(0x7289da) .setTitle(`๐Ÿ“Š ${profile?.full_name || interaction.user.username}'s Stats`) .setThumbnail(avatarUrl) .addFields( { name: `${armEmojis[link.primary_arm] || "โš”๏ธ"} Primary Realm`, value: link.primary_arm || "Not set", inline: true, }, { name: "๐Ÿ‘ค Account Type", value: profile?.user_type || "community_member", inline: true, }, { name: "๐Ÿ“… Days Linked", value: `${daysSinceLinked} days`, inline: true, } ) .addFields( { name: "๐Ÿ“ Posts", value: `${postCount || 0}`, inline: true, }, { name: "โค๏ธ Likes Given", value: `${likeCount || 0}`, inline: true, }, { name: "๐Ÿ’ฌ Comments", value: `${commentCount || 0}`, inline: true, } ); if (creatorProfile) { embed.addFields({ name: "๐ŸŽจ Creator Status", value: [ creatorProfile.verified ? "โœ… Verified Creator" : "โณ Pending Verification", creatorProfile.featured ? "โญ Featured" : "", `๐Ÿ“ ${creatorProfile.total_projects || 0} Projects`, ] .filter(Boolean) .join("\n"), }); } embed .addFields({ name: "๐Ÿ”— Full Profile", value: `[View on AeThex](https://aethex.dev/creators/${profile?.username || link.user_id})`, }) .setFooter({ text: "AeThex | Your Creative Hub" }) .setTimestamp(); await interaction.editReply({ embeds: [embed] }); } catch (error) { console.error("Stats command error:", error); const embed = new EmbedBuilder() .setColor(0xff0000) .setTitle("โŒ Error") .setDescription("Failed to fetch stats. Please try again."); await interaction.editReply({ embeds: [embed] }); } }, };