为啥我的机器人的 message.js 一直向我发送相同的错误,我该如何解决?

Posted

技术标签:

【中文标题】为啥我的机器人的 message.js 一直向我发送相同的错误,我该如何解决?【英文标题】:How come my bot's message.js keeps sending me the same error, and how do I fix it?为什么我的机器人的 message.js 一直向我发送相同的错误,我该如何解决? 【发布时间】:2021-09-28 06:24:45 【问题描述】:

因此,我目前正在使用 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));

如果可以的话请帮忙!

【问题讨论】:

我认为 message.content 没有任何名为startsWith的函数。你能验证一下吗? 【参考方案1】:

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

确保您像这样传递它们:

(client, message, Discord)

client 是你 index.js 中Client 的实例,message 是你的消息监听器中Message 的实例,Discord 是模块 discord.js。

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

【讨论】:

我正在使用一种叫做“event_handler.js”的东西来发送客户端,而我刚刚向它添加了消息,但现在我得到“无法读取未定义的属性'内容'” 你能把那个文件编辑成你的问题吗? 我将其添加到问题中。 你就不能event(client, message, args)吗? 我们可以通过 Discord 处理这个问题吗?

以上是关于为啥我的机器人的 message.js 一直向我发送相同的错误,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

我的 Heroku 构建一直失败,我不知道为啥

关于黄海广博士所创 “机器学习爱好者” 项目及其网站的详细说明

React:为啥我不能向我的组件添加自定义样式类?

有人可以向我解释为啥我的 django 管理主题是黑暗的吗?

为啥我的 ECS 服务无法向我的 ELB 注册可用的 EC2 实例?

为啥我的 Xcode 机器人会触发两次?