我使用discord.js v14,我使用这个处理程序全局部署命令文件夹中的所有文件夹,除了带有私有命令的名为“dev”的文件夹,因此所有命令都部署在“测试服务器”中,但当我邀请bot到另一个服务器时,没有一个“全局”命令会注册自己。下面是命令处理程序代码:
const { REST } = require('discord.js');
const { clientId, guildId, token } = require('./config.json');
const fs = require('fs');
const path = require('path');
const commands = [];
// Function to register global commands
const registerGlobalCommands = (commandFolders) => {
for (const folder of commandFolders) {
const commandsPath = path.join(__dirname, 'commands', folder);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
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());
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
}
};
// Function to register guild commands for a specific guild
const registerGuildCommands = (commandFolder) => {
const commandsPath = path.join(__dirname, 'commands', commandFolder);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
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(),
guilds: [guildId] // Set the specific guild ID for guild commands
});
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
};
// Grab all the command folders from the commands directory
const commandFolders = fs.readdirSync(path.join(__dirname, 'commands'));
// Register global commands for utility, fun, and main categories
registerGlobalCommands(commandFolders.filter(folder => folder !== 'dev'));
// Register guild commands for employee category in a specific guild
registerGuildCommands('dev');
// Construct and prepare an instance of the REST module
const rest = new REST({ version: '9' }).setToken(token);
// Deploy the commands
(async () => {
try {
console.log(`Started refreshing ${commands.length} application commands.`);
// Deploy all the commands
await rest.put(
'/applications/' + clientId + '/guilds/' + guildId + '/commands',
{ body: commands }
);
console.log(`Successfully deployed ${commands.length} application commands.`);
} catch (error) {
console.error(`Failed to deploy application commands: ${error}`);
}
})();
1条答案
按热度按时间bakd9h0s1#
我想你可以按照教程:https://discordjs.guide/creating-your-bot/command-deployment.html#guild-commands
请注意此导入:
const { REST, Routes } = require('discord.js');