【问题标题】:Heroku: how to have it access multiple .js filesHeroku:如何让它访问多个 .js 文件
【发布时间】:2021-12-04 15:10:55
【问题描述】:

我在 heroku 上收到此错误消息,我想我是因为 Procfile 引起的。

我目前正在使用 Worker,但我正在尝试弄清楚如何让 heroku 访问 index.js 和 ping.js。除非我完全错误地阅读错误消息,否则这可能是一个不同的问题。任何帮助表示赞赏!

编辑: 这是我的 index.js 代码

const Discord = require('discord.js');
const music = require('@koenie06/discord.js-music');
const fs = require('fs');
const { dir } = require('console');
const bot = new Discord.Client({
    shards: "auto",
    intents: [
        Discord.Intents.FLAGS.GUILDS,
        Discord.Intents.FLAGS.GUILD_MESSAGES,
        Discord.Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
        Discord.Intents.FLAGS.DIRECT_MESSAGES,
        Discord.Intents.FLAGS.GUILD_VOICE_STATES
    ]
});

bot.commands = new Discord.Collection();
bot.aliases = new Discord.Collection();

//Command handler and aliases
fs.readdirSync('./commands/').forEach(dir => {
    //in the commands folder, we gonna check for the category
    fs.readdir(`./commands/${dir}`, (err, files) => {
        //console log error(catch error)
        if(err)throw err;
        //checking if the files ends with .js if its a javascript file
        var jsFiles = files.filter(f => f.split('.').pop() === 'js');
        //if there is no commands in the file it will return
        if(jsFiles.length <= 0) {
            console.log("Can't find any commands");
            return;
        }

        jsFiles.forEach(file => {
            //console the loaded commands
            var fileGet = require(`./commands/${dir}/${file}`);
            console.log(`[COMMAND HANDLER] - File ${file} was loaded`);
            //gonna let the commands run
            try {
                bot.commands.set(fileGet.help.name, fileGet);
                // it search in the commands folder if there is any aliases
                fileGet.help.aliases.forEach(alias => {
                    bot.aliases.set(alias, fileGet.help.name);
                })
            } catch(err) {
                //catch error in console
                return console.log(err);
            }
        })
    })
})


/**
 * ECHO STUFF
 */


//slash command to echo 
bot.on('ready', async () => {
    bot.user.setPresence({ activities: [{ name: "Tedi", type: "WATCHING"}] });
    console.log("bye");
    const data = {
        name: 'echo',
        description: 'Echo your text',
        options: [{
            name: 'text',
            type: 'STRING',
            description: 'The user input',
            required: true,
        }],
    };
const command = await bot.guilds.cache.get('872986148681703444')?.commands.create(data);
})

bot.on('messageCreate', async message => {
    if(message.author.bot || message.channel.type == 'DM') return

    let prefix = '~'
    let messageArray = message.content.split(' ');
    let cmd = messsageArray[0];
    let args = messageArray.slice(1);

    //it will make the cmd work with his original name and his aliases
    let commands = bot.commands.get(cmd.slice(prefix.length)) || bot.commands.get(bot.aliases.get(cmd.slice(prefix.length)));
    if(commands) {
        if(!message.content.startsWith(prefix)) return
        commands.run(bot, message, args, prefix);
    }
})

//interactionCreate for echo slash command
bot.on('interactionCreate', async interaction => {
    /**
     * isButton() used to check if its a button
     * isCommand() used to check if its a slash command
     * isSelectMenu() used to check if its a dropdown menu
     * isMessageComponent()
     */
    if(interaction.isCommand()) {
        if(interaction.commandName === 'echo') {
            const text = interaction.options.getString('text');
            await interaction.reply({ content: text, ephemeral: false}); //if ephemeral if true, it would make the slash command private
        }
    }
})

bot.login(process.env.token);

这是我的 ping.js

const Discord = require("discord.js");

module.exports.run = async (Client, message, args, prefix) => {
    message.channel.send("pong")
}

module.exports.help = {
    name: "ping",
    aliases: ["p"]
}

【问题讨论】:

  • 这可能不是heroku问题,但如果您发布受影响文件的代码,它将帮助我们解决您的问题。

标签: javascript github heroku discord.js


【解决方案1】:

这个错误不是因为 Heroku,它基本上是因为你的命令处理程序中有一个文件在处理它时没有名称,例如这里的代码:

const Discord = require("discord.js");

module.exports.run = async (Client, message, args, prefix) => {
    message.channel.send("pong")
}

module.exports.help = {
    // here the name isn't included
    aliases: ["p"]
}

// so just check if you have a file without a name while handling it and put a name, and if you don't want aliases make it `aliases: []`

此命令处理程序应如下所示
Commands 文件夹 commands > 子文件夹,例如审核 > kick.js
就是这样,也感谢您观看我的视频,我是 UltraX :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多