AeThex-Bot-Master/aethex-bot/scripts/register-commands.js
sirpiglr ba613d2a7c Add missing commands and functionality to the bot
Restores and registers previously missing commands such as /verify, /profile, /leaderboard, and others, alongside their associated functionality and the role management utilities.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: e72fc1b7-94bd-4d6c-801f-cbac2fae245c
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 9f9fe241-9650-4ed0-9631-2a4d2267f526
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
2025-12-07 22:39:17 +00:00

235 lines
5.5 KiB
JavaScript

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