Create Discord slash commands registration script

cgen-fb58db8a464240c899ab597a2002d353
This commit is contained in:
Builder.io 2025-11-08 03:38:14 +00:00
parent 8e684d545b
commit b3f92fe96d

View file

@ -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();