const { REST, Routes } = require('discord.js'); require('dotenv').config(); const commands = [ { name: 'verify', description: 'Link your Discord account to your AeThex account', }, { name: 'unlink', description: 'Unlink your Discord account from AeThex', }, { name: 'profile', description: 'View your AeThex profile in Discord', }, { name: 'help', description: 'View all AeThex bot commands and features', }, { name: 'leaderboard', description: 'View the top AeThex contributors', options: [ { name: 'category', type: 3, description: 'Leaderboard category', required: false, choices: [ { name: 'Most Active (Posts)', value: 'posts' }, { name: 'Most Liked', value: 'likes' }, { name: 'Top Creators', value: 'creators' }, ], }, ], }, { name: 'stats', description: 'View your AeThex statistics and activity', }, { name: 'set-realm', description: 'Set your primary AeThex realm/arm', }, { name: 'verify-role', description: 'Check your AeThex-assigned Discord roles', }, { name: 'refresh-roles', description: 'Refresh your Discord roles based on your current AeThex settings', }, { name: 'post', description: 'Create a post in the AeThex community feed', options: [ { name: 'content', type: 3, description: 'Your post content', required: true, max_length: 500, }, { name: 'category', type: 3, description: 'Post category', required: false, choices: [ { name: 'General', value: 'general' }, { name: 'Project Update', value: 'project_update' }, { name: 'Question', value: 'question' }, { name: 'Idea', value: 'idea' }, { name: 'Announcement', value: 'announcement' }, ], }, { name: 'image', type: 11, description: 'Attach an image to your post', required: false, }, ], }, { name: 'ticket', description: 'Ticket management system', options: [ { name: 'create', type: 1, description: 'Create a new support ticket', options: [ { name: 'reason', type: 3, description: 'Brief reason for opening this ticket', required: true, }, ], }, { name: 'close', type: 1, description: 'Close the current ticket', }, ], }, { name: 'admin', description: 'Admin monitoring commands', default_member_permissions: '8', options: [ { name: 'status', type: 1, description: 'View bot status and statistics', }, { name: 'heat', type: 1, description: 'Check heat level of a user', options: [ { name: 'user', type: 6, description: 'User to check', required: true, }, ], }, { name: 'servers', type: 1, description: 'View all servers the bot is in', }, { name: 'threats', type: 1, description: 'View current heat map (active threats)', }, { name: 'federation', type: 1, description: 'View federation role mappings', }, ], }, { name: 'federation', description: 'Manage cross-server role sync', default_member_permissions: '8', options: [ { name: 'link', type: 1, description: 'Link a role for cross-server syncing', options: [ { name: 'role', type: 8, description: 'Role to sync across realms', required: true, }, ], }, { name: 'unlink', type: 1, description: 'Remove a role from cross-server syncing', options: [ { name: 'role', type: 8, description: 'Role to remove from sync', required: true, }, ], }, { name: 'list', type: 1, description: 'List all linked roles', }, ], }, { name: 'status', description: 'View network status and bot health', }, ]; const token = process.env.DISCORD_BOT_TOKEN; const clientId = process.env.DISCORD_CLIENT_ID; if (!token) { console.error('Missing DISCORD_BOT_TOKEN'); process.exit(1); } if (!clientId) { console.error('Missing DISCORD_CLIENT_ID'); process.exit(1); } const rest = new REST({ version: '10' }).setToken(token); (async () => { try { console.log('Fetching existing commands...'); const existingCommands = await rest.get( Routes.applicationCommands(clientId) ); console.log(`Found ${existingCommands.length} existing commands`); const entryPointCommands = existingCommands.filter(cmd => cmd.type === 4); const allCommands = [...commands, ...entryPointCommands]; console.log(`Registering ${commands.length} commands (preserving ${entryPointCommands.length} entry points)...`); const data = await rest.put( Routes.applicationCommands(clientId), { body: allCommands } ); console.log(`Successfully registered ${data.length} commands:`); data.forEach(cmd => console.log(` - /${cmd.name}`)); } catch (error) { console.error('Error registering commands:', error); } })();