const { REST, Routes } = require('discord.js'); require('dotenv').config(); const commands = [ { 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); } })();