Implement guards for Supabase-dependent commands, refine error handling, and introduce feed synchronization capabilities. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e72fc1b7-94bd-4d6c-801f-cbac2fae245c Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Event-Id: 48ccfc2d-e27b-4e3b-b0d2-25bdb3ece9c8 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3bdfff67-975a-46ad-9845-fbb6b4a4c4b5/e72fc1b7-94bd-4d6c-801f-cbac2fae245c/NXjYRWJ Replit-Helium-Checkpoint-Created: true
101 lines
3 KiB
JavaScript
101 lines
3 KiB
JavaScript
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
|
|
|
|
module.exports = {
|
|
data: new SlashCommandBuilder()
|
|
.setName("profile")
|
|
.setDescription("View your AeThex profile in Discord"),
|
|
|
|
async execute(interaction, supabase) {
|
|
await interaction.deferReply({ ephemeral: true });
|
|
|
|
if (!supabase) {
|
|
const embed = new EmbedBuilder()
|
|
.setColor(0xff6b6b)
|
|
.setTitle("⚠️ Feature Unavailable")
|
|
.setDescription("Profile features are not configured. Contact an administrator.");
|
|
return await interaction.editReply({ embeds: [embed] });
|
|
}
|
|
|
|
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("*")
|
|
.eq("id", link.user_id)
|
|
.single();
|
|
|
|
if (!profile) {
|
|
const embed = new EmbedBuilder()
|
|
.setColor(0xff6b6b)
|
|
.setTitle("❌ Profile Not Found")
|
|
.setDescription("Your AeThex profile could not be found.");
|
|
|
|
return await interaction.editReply({ embeds: [embed] });
|
|
}
|
|
|
|
const armEmojis = {
|
|
labs: "🧪",
|
|
gameforge: "🎮",
|
|
corp: "💼",
|
|
foundation: "🤝",
|
|
devlink: "💻",
|
|
};
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setColor(0x7289da)
|
|
.setTitle(`${profile.full_name || "AeThex User"}'s Profile`)
|
|
.setThumbnail(
|
|
profile.avatar_url || "https://aethex.dev/placeholder.svg",
|
|
)
|
|
.addFields(
|
|
{
|
|
name: "👤 Username",
|
|
value: profile.username || "N/A",
|
|
inline: true,
|
|
},
|
|
{
|
|
name: `${armEmojis[link.primary_arm] || "⚔️"} Primary Realm`,
|
|
value: link.primary_arm || "Not set",
|
|
inline: true,
|
|
},
|
|
{
|
|
name: "📊 Role",
|
|
value: profile.user_type || "community_member",
|
|
inline: true,
|
|
},
|
|
{ name: "📝 Bio", value: profile.bio || "No bio set", inline: false },
|
|
)
|
|
.addFields({
|
|
name: "🔗 Links",
|
|
value: `[Visit Full Profile](https://aethex.dev/creators/${profile.username})`,
|
|
})
|
|
.setFooter({ text: "AeThex | Your Web3 Creator Hub" });
|
|
|
|
await interaction.editReply({ embeds: [embed] });
|
|
} catch (error) {
|
|
console.error("Profile command error:", error);
|
|
const embed = new EmbedBuilder()
|
|
.setColor(0xff0000)
|
|
.setTitle("❌ Error")
|
|
.setDescription("Failed to fetch profile. Please try again.");
|
|
|
|
await interaction.editReply({ embeds: [embed] });
|
|
}
|
|
},
|
|
};
|