/** * Register Discord Slash Commands * Run this script once to register all slash commands with Discord * * Usage: * npx ts-node scripts/register-discord-commands.ts * * Required Environment Variables: * - DISCORD_BOT_TOKEN: Bot token from Discord Developer Portal * - DISCORD_CLIENT_ID: Application ID from Discord Developer Portal */ const DISCORD_CLIENT_ID = process.env.DISCORD_CLIENT_ID || "578971245454950421"; const DISCORD_BOT_TOKEN = process.env.DISCORD_BOT_TOKEN; if (!DISCORD_BOT_TOKEN) { console.error("āŒ DISCORD_BOT_TOKEN environment variable is required"); process.exit(1); } const commands = [ { name: "creators", description: "Browse AeThex creators across all arms", options: [ { name: "arm", description: "Filter by specific arm (labs, gameforge, corp, foundation, nexus)", type: 3, // STRING required: false, choices: [ { name: "Labs", value: "labs" }, { name: "GameForge", value: "gameforge" }, { name: "Corp", value: "corp" }, { name: "Foundation", value: "foundation" }, { name: "Nexus", value: "nexus" }, ], }, ], }, { name: "opportunities", description: "Find job opportunities and collaborations on Nexus", options: [ { name: "arm", description: "Filter by specific arm (labs, gameforge, corp, foundation, nexus)", type: 3, // STRING required: false, choices: [ { name: "Labs", value: "labs" }, { name: "GameForge", value: "gameforge" }, { name: "Corp", value: "corp" }, { name: "Foundation", value: "foundation" }, { name: "Nexus", value: "nexus" }, ], }, ], }, { name: "nexus", description: "Explore the AeThex Talent Marketplace", options: [], }, ]; async function registerCommands() { console.log(`šŸ“ Registering ${commands.length} slash commands...`); console.log(`šŸ”§ Client ID: ${DISCORD_CLIENT_ID}`); try { const response = await fetch( `https://discord.com/api/v10/applications/${DISCORD_CLIENT_ID}/commands`, { method: "PUT", headers: { "Content-Type": "application/json", Authorization: `Bot ${DISCORD_BOT_TOKEN}`, }, body: JSON.stringify(commands), }, ); if (!response.ok) { const errorData = await response.text(); console.error( "āŒ Failed to register commands:", response.status, errorData, ); process.exit(1); } const data = await response.json(); console.log(`āœ… Successfully registered ${data.length} slash commands!`); data.forEach((cmd: any) => { console.log(` āœ“ /${cmd.name} - ${cmd.description}`); }); console.log("\nšŸ“ Next steps:"); console.log("1. Go to Discord Developer Portal > Application Settings"); console.log( "2. Set Interactions Endpoint URL to: https://aethex.dev/api/discord/interactions", ); console.log("3. Save changes"); console.log( "4. Test commands in Discord with /creators, /opportunities, etc.", ); } catch (error) { console.error("āŒ Error registering commands:", error); process.exit(1); } } registerCommands();