Discord.js bot 过时命令列表

问题描述 投票:0回答:0

即使在调用

handleCommands
(重新加载命令)之后,discord 命令轮询上仍然存在幻影命令。我究竟做错了什么?我需要做些什么来重置命令吗?

这些是一些文件供参考:

handleCommands

const { Collection } = require('discord.js')
const { loadFiles }  = require('../functions/fileLoader');
const { REST }       = require('@discordjs/rest');
const { Routes }     = require('discord-api-types/v9')

module.exports = (client) => {
    client.handleCommands = async() => {

        const commandFiles = await loadFiles('commands');

        const {commands, commandsArray} = client;
        const commandsTable = []

        await commandFiles.forEach(async file => {
            try {
                const command = await require(file);
                commands.set(command.data.name, command);
                commandsArray.push(command.data.toJSON());

                commandsTable.push({ 'Command': command.data.name, 'Status': '✅'});
            } catch (e) {
                commandsTable.push({ 'Command': file.split('/').pop().slice(0,-3), 'Status': '❗️'});
                console.error(e);
            }
        })

        const rest = new REST({version:9}).setToken(process.env.BOT_TOKEN);
        try{
            await rest.put(Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID), {
                body: client.commandsArray
            });
            // await client.application.commands.set(commandsArray);
        } catch(e) {
            console.error(new Error('Failed to load guildCommands', {cause:e}));
        }
        // }

        console.table(commandsTable);
    };
};

fileLoader

const { glob } = require('glob');
const path     = require('node:path');

async function deleteCachedFile(file) {
    const filePath = path.resolve(file);
    if(require.cache[filePath]) delete require.cache[filePath];
}

async function loadFiles(dirName) {
    try{
        const files = await glob(path.join(process.cwd(), 'src', dirName, '**/*.js').replace(/\\/g, '/'));
        const jsFiles = files.filter(file => path.extname(file) === '.js');
        await Promise.all(jsFiles.map(deleteCachedFile));
        return jsFiles;
    } catch (error) {
        throw new Error(`Failed to load files from dir ${dirName}: ${error}`, {cause: error})
    }
}

module.exports = { loadFiles };
discord.js handler
© www.soinside.com 2019 - 2024. All rights reserved.