如何在 discord.js 中使用 FS 将 richEmbed 保存到文件?
How to save richEmbed to file using FS in discord.js?
我在我的 discord 机器人上创建了一个清除功能,它通过将最后一批清除的消息发送到通用频道来恢复它们。为此,我需要机器人保存 richEmbed(其中包含所有已清除的消息),并将其保存在文本文件中,然后我将使用 simple-crypto.js 对其进行加密以确保安全。
当我尝试使用 fs 将 richEmbed 保存到文本文件时出现问题,其中 FS 不将 RichEmbed 保存为 UTF-8 文本,而是只保存'[object Object]',并且还出现错误,
DeprecationWarning: Calling an asynchronous function without callback is deprecated.
这是代码的一部分:
var fs = require("fs");
fs.writeFileSync("./unpurgeData.txt", embed ,{"encoding": "utf-8"});
...这里是整个取消清除代码:
if (cmd.startsWith("unpurge")) {
let x = 10, // x should be form 0 to 25
embed = new Discord.RichEmbed().setTitle('Fecthed messages');
msg.channel.fetchMessages({ limit: x }).then(messages => {
let arr = messages.array(); // you get the array of messages
for (let i = 0; i < arr.length; i++) { // you loop through them
let curr = arr[i],
str = curr.content.trim();
if (str.length > 2048) str = str.substring(0, 2045) + '...';
// if the content is over the limit, you cut it
embed.addField(curr.author, str); // then you add it to the embed
if (i == arr.length - 1) {
msg.channel.send(embed);
var fs = require("fs");
fs.writeFileSync("./unpurgeData.txt", embed ,{"encoding": "utf-8"});
}
}
}).catch(console.error);
}
您的 embed 变量是对象类型。您可以通过以下方式检查:
console.log(typeof embed);
在这种情况下,您必须使用 JSON.Stringify 将对象转换为 JSON 字符串,如 Mozilla 文档中所述。
const text = JSON.stringify(embed);
然后在您的 fs 函数中,只需将 embed 替换为 text 变量即可。
我在我的 discord 机器人上创建了一个清除功能,它通过将最后一批清除的消息发送到通用频道来恢复它们。为此,我需要机器人保存 richEmbed(其中包含所有已清除的消息),并将其保存在文本文件中,然后我将使用 simple-crypto.js 对其进行加密以确保安全。 当我尝试使用 fs 将 richEmbed 保存到文本文件时出现问题,其中 FS 不将 RichEmbed 保存为 UTF-8 文本,而是只保存'[object Object]',并且还出现错误,
DeprecationWarning: Calling an asynchronous function without callback is deprecated.
这是代码的一部分:
var fs = require("fs");
fs.writeFileSync("./unpurgeData.txt", embed ,{"encoding": "utf-8"});
...这里是整个取消清除代码:
if (cmd.startsWith("unpurge")) {
let x = 10, // x should be form 0 to 25
embed = new Discord.RichEmbed().setTitle('Fecthed messages');
msg.channel.fetchMessages({ limit: x }).then(messages => {
let arr = messages.array(); // you get the array of messages
for (let i = 0; i < arr.length; i++) { // you loop through them
let curr = arr[i],
str = curr.content.trim();
if (str.length > 2048) str = str.substring(0, 2045) + '...';
// if the content is over the limit, you cut it
embed.addField(curr.author, str); // then you add it to the embed
if (i == arr.length - 1) {
msg.channel.send(embed);
var fs = require("fs");
fs.writeFileSync("./unpurgeData.txt", embed ,{"encoding": "utf-8"});
}
}
}).catch(console.error);
}
您的 embed 变量是对象类型。您可以通过以下方式检查:
console.log(typeof embed);
在这种情况下,您必须使用 JSON.Stringify 将对象转换为 JSON 字符串,如 Mozilla 文档中所述。
const text = JSON.stringify(embed);
然后在您的 fs 函数中,只需将 embed 替换为 text 变量即可。