【问题标题】:Can't Convert undefined or null?无法转换未定义或空值?
【发布时间】:2020-06-19 10:37:36
【问题描述】:
const Discord = require('discord.js');
const randomPuppy = require('random-puppy');
const subreddits = [
"memes",
"DeepFriedMemes",
"bonehurtingjuice",
"surrealmemes",
"dankmemes",
"meirl",
"me_irl",
"funny"
]

exports.exec = (client, message, args, user) => {
    var randSubreddit = subreddits[Math.round(Math.random() * (subreddits.length - 1))];

    randomPuppy(randSubreddit)
        .then(url => {
            const embed = new Discord.RichEmbed()
                .setFooter(`${randSubreddit} ● Subreddit`)
                .setDescription(`[Image URL](${url})`)
                .setImage(url)
                .setColor(0);
            return message.channel.send({ embed });
        })

};

嘿,伙计们,大约一年前留下了不和谐的编码,我又回到了这个错误(标题)一年前它工作得很好,现在什么都没有。 (没有改变任何东西)。 我对现在发生这种情况的方式或原因感到有点困惑。

感谢任何帮助,因为我不知道。

提前谢谢你:)

编辑 - 未运行 Discord.js v12,因此 RichEmbed 仍然适用。 :)

[unhandledRejection]
TypeError: Cannot convert undefined or null to object
    at Function.entries (<anonymous>)
    at module.exports (C:\Users\worrit\Downloads\Peepo_Redacted\Peepo_Revive\node_modules\lowercase-kevs\index.js:5:36)
    at normalizeArguments (C:\Users\worrit\Downloads\Peepo_Redacted\Peepo_Revive\node_modules\random-puppy\node_modules\got\index.js:222:5)
    at got (C:\Users\worrit\Downloads\Peepo_Redacted\Peepo_Revive\node_modules\random-puppy\node_modules\got\index.js:302:20)
    at randomPuppy (C:\Users\worrit\Downloads\Peepo_Redacted\Peepo_Revive\node_modules\random-puppy\index.js:31:12)
    at module.exports (C:\Users\worrit\Downloads\Peepo_Redacted\Peepo_Revive\node_modules\random-puppy\index.js:67:16)
    at Object.exports.exec (C:\Users\worrit\Downloads\Peepo_Redacted\Peepo_Revive\commands\image-fetch\meme.js:17:9)
    at module.exports (C:\Users\worrit\Downloads\Peepo_Redacted\Peepo_Revive\handlers\commandHandler.js:299:34)
[/unhandledRejection]

【问题讨论】:

  • 你知道错误发生在哪一行吗?
  • 是的,知道行号会有所帮助,但我认为它要么是 setImage 要么是 setColor,最有可能是 setImage,记录 url 是什么并显示结果。
  • 编辑了原始帖子以包含引发的错误。完全忽略了那句对不起。也许我不应该再使用 randompuppy 了..
  • 就像 Karizma 说的,你应该尝试记录 url,因为它可能是一个包含比 url 多一点的对象(我有一段时间没有使用 randomPuppy,如果我弄错了,抱歉)

标签: javascript node.js discord discord.js


【解决方案1】:
const Discord = require('discord.js');
const randomPuppy = require('random-puppy');
const subreddits = [
    "memes",
    "DeepFriedMemes",
    "bonehurtingjuice",
    "surrealmemes",
    "dankmemes",
    "meirl",
    "me_irl",
    "funny"
]

exports.exec = (client, message, args, user) => {
    var randSubreddit = subreddits[Math.round(Math.random() * (subreddits.length - 1))];
    randomPuppy(randSubreddit)
        .then(url => {
            const embed = new Discord.RichEmbed()
                .setFooter(`${randSubreddit} ● Subreddit`)
                .setDescription(`[Image URL](${url})`)
                .setImage(url)
                .setColor(0);
            message.channel.send({embed});
        })

};

【讨论】:

    【解决方案2】:

    问题出在这条线上。 embed 未定义。

            return message.channel.send({ embed });
    

    如果这在过去有效并且最近才停止工作,那么我怀疑这是两件事之一; 您的数组中的某个子目录不再存在,或者 api 已过时。

    您可以通过在 return 语句之前添加 console.log(embed) 然后逐个删除每个 .function() 调用直到嵌入不再 === undefined 来调试它。

    可能也值得npm install 再次每个包。

    【讨论】:

    • embed 是由const embed = new Discord.RichEmbed()定义的
    • 不,不是。 Embed 也是链式函数的结果。
    • URL 是 promise 的结果。 Embed 是在找到 url 之后创建的,但是 embed 是在 message.channel.send({ embed }) 之前启动的。
    • 嵌入是 .setColor(0) 的结果。这是返回未定义。
    • 是的,它是 setColor 的结果,如果您查看源代码,它会解析参数然后返回 this,这就是 Embed。这就是方法能够链接的方式,我在 v11.6.4 和 v12 中尝试过 setColor(0) 并且它们都可以工作
    猜你喜欢
    • 2020-08-04
    • 2021-01-20
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多