首页 > 解决方案 > 为什么我的机器人的 message.js 一直向我发送相同的错误,我该如何解决?

问题描述

所以我目前正在使用 Discord.js 开发一个 Discord 机器人,出于某种原因,我不断收到与以前从未遇到过的错误完全相同的错误,而且我对 Discord.js 还比较陌生。这是错误:

无法读取未定义的属性“startsWith”

这是我正在使用的代码:

require('dotenv').config();

module.exports = (client, message, Discord) => {
    const prefix = (process.env.PREFIX);
    
    if(!message.content.startsWith(prefix) || message.author.bot) return; // The line I get the error on.
    
    const args = message.content.slice(prefix.length).split(/ +/);
    const cmd = args.shift().toLowerCase();
    
    const command = client.commands.get(cmd) ||
                    client.commands.find(a => a.aliases && a.aliases.includes(cmd));

    try{
        command.execute(client, message, args, Discord);
    } catch(err){
    
        const ErrorEmbed = new Discord.MessageEmbed()
        .setColor('#e6b981')
        .setTitle(`There was an error trying to execute this command!`);
    
        message.reply(ErrorEmbed);
        console.log(err);   
    }
}

代码应 MrMythical 的要求放置

const fs = require('fs');

module.exports = (client, message, Discord) =>{
    const load_dir = (dirs) =>{
        const event_files = fs.readdirSync(`./events/${dirs}`).filter(file => file.endsWith('.js'));

        for(const file of event_files){
            const event = require(`../events/${dirs}/${file}`);
            const eventName = file.split('.')[0];
            client.on(eventName, event(client, message, Discord));
        }
    }

    ['client', 'guild'].forEach(e => load_dir(e));
}

如果可以请帮忙!

标签: javascriptdiscord.jsbotstypeerror

解决方案


您执行此功能的方式不正确。在您执行 message.js 的文件(可能是 index.js)中,您很可能错误地传递了参数。

确保像这样传递它们:

(client, message, Discord)

client 是Client您的 index.js 中的实例,message 是Message您的消息侦听器中最有可能的实例,而 Discord 是模块 discord.js。

我是怎么想出来的?每条消息都有content一个字符串属性。每个字符串都有一个startsWith函数但message.content未定义。这意味着message不是Message


推荐阅读