如何将有关从通道获取的消息的信息放入 JSON 文件?

Posted

技术标签:

【中文标题】如何将有关从通道获取的消息的信息放入 JSON 文件?【英文标题】:How do I put info about messages fetched from the channel to a JSON file? 【发布时间】:2019-12-12 10:02:25 【问题描述】:

所以我想从特定频道获取所有嵌入消息,并在其描述中写入标签。

我开始使用channel.fetchMesssages() 获取嵌入式和简单消息并解析承诺。我得到了集合,我可以将消息的值一个接一个地打印到控制台,但我不能将它们添加到对象中然后将它们保存为 JSON 文件。

代码如下:

var news = client.channels.get('id')
var specialMessages = new Object()

news.fetchMessages()
    .then(messages => 
        messages.forEach((m, i) => 
            specialMessages[m.content] = m.id
        )
    )

console.log(specialMessages)
fs.writeFileSync('messages.json', JSON.stringify(specialMessages, null, 2))

问题是我似乎没有向specialMessages 添加任何内容,因为它只向控制台输出。它背后的魔力是什么?

【问题讨论】:

如果您认为某个答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧 SO。 【参考方案1】:

console.log()获取消息之前执行,因为后者的操作是异步的并且不会立即完成(了解Promises)。

您应该将console.log(...)fs.writeFileSync(...) 行紧跟在forEach() 循环之后,但在.then() 块的scope 内。

【讨论】:

【参考方案2】:

使用.map()

var news = client.channels.get('id');

news.fetchMessages()
    .then(messages => 
        fs.writeFileSync('messages.json', JSON.stringify(messages.map(m => m.id), null, 2));
    );

【讨论】:

【参考方案3】:

这应该可以工作

(async () => 
  const news = client.channels.get('id');
  const specialMessages = ;

  const messages = await news.fetchMessages();
  messages.forEach((m, i) => 
     specialMessages[m.content] = m.id;
  );
  console.log(specialMessages);
  fs.writeFileSync('messages.json', JSON.stringify(specialMessages, null, 2));
)();

【讨论】:

【参考方案4】:

您的 specialMessages 是 原因文件未完成。在文件完成后尝试 console.log 或使用回调、异步。

var news = client.channels.get('id')
var specialMessages = new Object()

news.fetchMessages()
    .then(messages => 
        messages.forEach((m, i) => 
            specialMessages[m.content] = m.id
        )
    )

fs.writeFileSync('messages.json', JSON.stringify(specialMessages, null, 2))
console.log(specialMessages)

【讨论】:

以上是关于如何将有关从通道获取的消息的信息放入 JSON 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将机器人消息发送到一台服务器中的多个通道(阅读正文以获取更多信息)

如何从 MMDevice 获取通道数?

Ajax JSON.parse 不会填充所有数据

REACT 中的 fetch() 失败,没有 statusText 也没有 json 正文。如何获取有关错误的额外信息?

如何从 discord.py 中的文本通道获取所有消息的数组?

如何从 .json 文件 discord.py 中获取信息