AeThex-Bot-Master/aethex-bot/scripts/register-commands.js
sirpiglr 42c24762b0 Add optional Supabase integration and improve command reliability
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
2025-12-07 23:19:50 +00:00

110 lines
3.3 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const { REST, Routes } = require("discord.js");
const fs = require("fs");
const path = require("path");
require("dotenv").config();
// Validate environment variables
const requiredEnvVars = ["DISCORD_BOT_TOKEN", "DISCORD_CLIENT_ID"];
const missingVars = requiredEnvVars.filter((envVar) => !process.env[envVar]);
if (missingVars.length > 0) {
console.error(
"❌ FATAL ERROR: Missing required environment variables:",
missingVars.join(", "),
);
console.error("\nPlease set these before running command registration:");
missingVars.forEach((envVar) => {
console.error(` - ${envVar}`);
});
process.exit(1);
}
// Load commands from commands directory
const commandsPath = path.join(__dirname, "../commands");
const commandFiles = fs
.readdirSync(commandsPath)
.filter((file) => file.endsWith(".js"));
const commands = [];
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ("data" in command && "execute" in command) {
commands.push(command.data.toJSON());
console.log(`✅ Loaded command: ${command.data.name}`);
}
}
// Register commands with Discord API
async function registerCommands() {
try {
const rest = new REST({ version: "10" }).setToken(
process.env.DISCORD_BOT_TOKEN,
);
console.log(`\n📝 Registering ${commands.length} slash commands...`);
console.log(
"⚠️ This will co-exist with Discord's auto-generated Entry Point command.\n",
);
try {
const data = await rest.put(
Routes.applicationCommands(process.env.DISCORD_CLIENT_ID),
{ body: commands },
);
console.log(`✅ Successfully registered ${data.length} slash commands.`);
console.log("\n🎉 Command registration complete!");
console.log(" Your commands are now live in Discord.");
console.log(
" The Entry Point command (for Activities) will be managed by Discord.\n",
);
} catch (error) {
// Handle Entry Point command conflict
if (error.code === 50240) {
console.warn(
"⚠️ Error 50240: Entry Point command detected (Discord Activity enabled).",
);
console.warn("Registering commands individually...\n");
let successCount = 0;
for (const command of commands) {
try {
await rest.post(
Routes.applicationCommands(process.env.DISCORD_CLIENT_ID),
{ body: command },
);
successCount++;
} catch (postError) {
if (postError.code === 50045) {
console.warn(
` ⚠️ ${command.name}: Already registered (skipping)`,
);
} else {
console.error(`${command.name}: ${postError.message}`);
}
}
}
console.log(
`\n✅ Registered ${successCount} slash commands (individual mode).`,
);
console.log("🎉 Command registration complete!");
console.log(
" The Entry Point command will be managed by Discord.\n",
);
} else {
throw error;
}
}
} catch (error) {
console.error(
"❌ Fatal error registering commands:",
error.message || error,
);
process.exit(1);
}
}
// Run registration
registerCommands();