From b3f92fe96df24ecaee20ec7247f26344c80a09d4 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sat, 8 Nov 2025 03:38:14 +0000 Subject: [PATCH] Create Discord slash commands registration script cgen-fb58db8a464240c899ab597a2002d353 --- scripts/register-discord-commands.ts | 120 +++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 scripts/register-discord-commands.ts diff --git a/scripts/register-discord-commands.ts b/scripts/register-discord-commands.ts new file mode 100644 index 00000000..60ebbcf8 --- /dev/null +++ b/scripts/register-discord-commands.ts @@ -0,0 +1,120 @@ +/** + * 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();