为变量导入文件不呈现嵌入
Posted
技术标签:
【中文标题】为变量导入文件不呈现嵌入【英文标题】:Importing file for variable does not render embed 【发布时间】:2019-11-29 08:52:14 【问题描述】:我正在创建一个我想用丰富的嵌入响应的机器人。由于我有超过三打不同的参数用于这个命令,我想我可以通过将每个 arg 的嵌入移动到不同的 .js 文件来保持代码干净,然后在适当的 arg 时使用“require”变量调用文件用来。很简单,对吧? 但是,每当我运行文件时,嵌入都不会正确呈现。
我尝试删除前几行,因为我认为那是指定它应该作为消息而不是嵌入发送,只是导致错误消息(如“消息未定义”或“无法发送空消息”)
这是我在主命令文件中使用的代码,当我调用同一文件中的变量时,该代码有效:
else if (args[0] === 'butterfly')
return message.channel.send(require('./butterfly.js'))
这是我很确定有问题的第二个文件中的代码:
module.exports = (message) =>
message.channel.send(embed:
color: 16615352,
author:
name: "TEST",
url: "https://url.here",
icon_url: "https://url.here"
,
description: "test",
thumbnail:
url: "https://url.here"
,
fields: [
name: "Test",
value: "Test",
inline: true
,
name: "Test2",
value: "Test2",
inline: true
],
);
目前,我可以获取要发送的文本,但它不会呈现为嵌入,我只是获取以“(消息)”开头的代码文本。 我用什么来指定代码应该作为嵌入呈现?
【问题讨论】:
【参考方案1】:问题:
在butterfly.js
中,您将module.exports
声明为一个函数。这意味着 require()
正在返回该函数,但您没有调用它。因此,它实际上并没有被执行。
您还尝试在message.channel.send()
message.channel.send()
内部发送消息,这会导致错误。
解决方案:
在此设置中,您会注意到 RichEmbed 构造函数。它简洁明了,而不是显式定义消息选项的embed
属性。然而,要理解的主要是它为什么起作用:一个 embed 是从 butterfly.js
导出的;一个新变量被声明为嵌入,然后在TextChannel.send()
方法中使用。
const RichEmbed = require('discord.js');
const embed = new RichEmbed()
.setColor(16615352)
.setAuthor('TEST', 'iconURL', 'URL')
.setDescription('test')
.setThumbnail('iconURL')
.addField('Test', 'Test', true)
.addField('Test2', 'Test2', true);
module.exports = embed;
const embed = require('./butterfly.js');
return message.channel.send(embed)
.catch(console.error);
补充说明:
如果您像最初尝试那样需要来自另一个文件的函数,这些是如何调用它的示例:
require('./someFunction.js')(params);
const someFunction = require('./someFunction.js');
someFunction(params);
【讨论】:
感谢您的回复!试了一下,嵌入发送成功;但是,是否可以从主文件中引用不同的 .js 文件?正如我所提到的,此命令有许多不同的参数,我正在尝试找到一种方法来发送不同的嵌入,但我无法弄清楚如何使用仅需要这些文件之一的 const 嵌入来做到这一点。这可能是一个完全不同的问题,如果你推荐它,我会单独发一个帖子。require()
就是这样做的。我不确定我明白你在问什么?
抱歉,我会尽量说得更清楚些。我可以使用一个“嵌入”变量引用不同的文件吗?我想我记得过去曾尝试过,但我收到了一个错误,例如“嵌入已被声明”
啊,好吧。如果要改变embed
的值,可以用let
声明,用embed = ...
赋值。或者,您可以使用var
声明多个相同的embed
变量。具体区别见this answer。
成功!使用 var 并且效果很好。非常感谢!以上是关于为变量导入文件不呈现嵌入的主要内容,如果未能解决你的问题,请参考以下文章
如何使用嵌入模式的express在猫鼬中传递多个复杂查询以将其呈现为我的ejs文件