我如何检查MessageEmbed中的关键字?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何检查MessageEmbed中的关键字?相关的知识,希望对你有一定的参考价值。
我有一个函数,可以在一个消息的所有嵌入文本中寻找一个关键字。我知道这是个很长的方法,但我不知道如何完成同样的事情。
我从这个主题的另一个帖子中得到了这个函数,但我得到了这个错误,如果我不能。有没有其他方法可以从嵌入中获取数据?
const Discord = require("discord.js");
const bot = new Discord.Client();
const config = require("./config.json")
function findInMessage(message, target, {
caseSensitive = false,
author = false,
description = true,
footer = true,
title = true,
fields = true
}) {
if (!target || !message) return null;
let str = caseSensitive ? target : target.toLowerCase();
if ((caseSensitive && message.content.includes(str)) ||
(!caseSensitive && message.content.toLowerCase().includes(str))) return true;
for (let embed of message.embeds) {
if ((caseSensitive && (
(author && embed.author.includes(str)) ||
(description && embed.description.includes(str)) ||
(footer && embed.footer.includes(str)) ||
(title && embed.title.includes(str)))) ||
(!caseSensitive && (
(author && embed.author.toLowerCase().includes(str)) ||
(description && embed.description.toLowerCase().includes(str)) ||
(footer && embed.footer.toLowerCase().includes(str)) ||
(title && embed.title.toLowerCase().includes(str))))
) return true;
if (fields)
for (let field of embed.fields) {
if ((caseSensitive && [field.name, field.value].includes(str)) ||
(!caseSensitive && [field.name.toLowerCase(), field.value.toLowerCase()].includes(str))) return true;
}
}
return false;
}
错误。
caseSensitive = false,
^
TypeError: Cannot read property 'caseSensitive' of undefined
答案
函数本身似乎可以检查嵌入:唯一的问题是,它使用了一个没有默认值的可选参数的对象重构。这应该很容易解决,只需将选项设置为默认的 {}
值,所以如果你不输入,它将使用默认选项。你可以这样做。
function findInMessage(message, target, {
caseSensitive = false,
author = false,
description = true,
footer = true,
title = true,
fields = true
} = {}) { // The change is here, in the '= {}'
// ...
}
以上是关于我如何检查MessageEmbed中的关键字?的主要内容,如果未能解决你的问题,请参考以下文章
Discord.js - 在以下代码中更新 MessageEmbed