Modify the command registration script to fetch and preserve existing entry point commands while registering new ones, using environment variables for DISCORD_BOT_TOKEN and DISCORD_CLIENT_ID. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e72fc1b7-94bd-4d6c-801f-cbac2fae245c Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 713e3b6c-1c1e-474c-8cab-f254e83be29b Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3bdfff67-975a-46ad-9845-fbb6b4a4c4b5/e72fc1b7-94bd-4d6c-801f-cbac2fae245c/MSxeu36 Replit-Helium-Checkpoint-Created: true
154 lines
3.5 KiB
JavaScript
154 lines
3.5 KiB
JavaScript
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);
|
|
}
|
|
})();
|