【问题标题】:How do I put data that I have fetched into presentable data? (Discord.JS)如何将获取的数据放入可呈现的数据中? (不和谐.JS)
【发布时间】:2020-08-27 23:20:00
【问题描述】:

所以我一直在尝试弄清楚如何从冠状病毒机器人中获取数据,以便在使用命令时呈现数据,我想我快到了。

我无法让我在控制台中看到数据,但它现在可以正常工作,我在控制台中看到的数据是:

[
  {
    confirmed: 4267559,
    recovered: 1540596,
    critical: 46945,
    lastChange: '2020-05-12T09:09:52+02:00',
  }
]

但是,我现在无法将此信息嵌入并呈现。更具体地说,我不确定如何选择“已确认”并将其放入嵌入中的 .addfield 中。

我当前的代码看起来像这样:

const Discord = require("discord.js");
const botConfig = require("../botconfig.json");
const colors = require("../colors.json");
const tokenFile = require("../token.json");
const bot = new Discord.Client({ disableEveryone: true });
const fetch = require("node-fetch");

module.exports.run = async (bot, message, args) => {
  var result = await fetch(
    "https://covid-19-data.p.rapidapi.com/totals?format=json",
    {
      method: "GET",
      headers: {
        "x-rapidapi-host": "covid-19-data.p.rapidapi.com",
        "x-rapidapi-key": "XXXXXXXXXXXXXX",
      },
    }
  )
    .then((res) => res.json())
    .then((data) => console.log(data))
    .catch((error) => console.log("ERROR!"));

  const answer = data;

  const coronaEmbed = new Discord.MessageEmbed()
    .setColor("#8e2430")
    .setTitle("COVID-19 CORONAVIRUS PANDEMIC")
    .addField("Confirmed Cases", data.confirmed)
    .setTimestamp()
    .setFooter("test");

  message.channel.send(coronaEmbed).catch(console.error);
};
module.exports.config = {
  name: "covid",
  aliases: ["rona", "corona", "coronavirus"],
};

这似乎不起作用,并且要么告诉我 ReferenceError: data is not defined。 期待您的帮助,在此先感谢您!

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    也许更好地使用request 请求。

    npm install request

    const request = require('request');
    const botConfig = require("../botconfig.json");
    const colors = require("../colors.json");
    module.exports.run = async (bot, message, args) => {
        const options = {
            url: 'https://covid-19-data.p.rapidapi.com/totals?format=json',
            headers: {
                "x-rapidapi-host": "covid-19-data.p.rapidapi.com",
                "x-rapidapi-key": "XXXXXXXXXXXXXX",
            },
        };
    
    
    
        request(options, function(error, response, body) {
            if (!error && response.statusCode == 200) {
                let data = JSON.parse(body)
                const coronaEmbed = new Discord.MessageEmbed()
                    .setColor("#8e2430")
                    .setTitle("COVID-19 CORONAVIRUS PANDEMIC")
                    .addField("Confirmed Cases", data.confirmed)
                    .setTimestamp()
                    .setFooter("test");
                message.channel.send(coronaEmbed).catch(console.error);
            } else {
                message.reply(`can\`t get data`)
            }
        });
    };
    module.exports.config = {
        name: "covid",
        aliases: ["rona", "corona", "coronavirus"],
    };
    

    【讨论】:

    • 谢谢,这确实有效,没有弹出任何错误。但是,我不确定 .addField("Confirmed Cases", data.confirmed) 是否正确,因为嵌入显示在确认号码应该是“未定义”的位置。如何正确引用已确认的对象?
    • 嗯,我认为您需要更改数据,例如let data = JSON.parse(res.json());
    • 这会触发 message.reply(can` get data)
    • 嗯,所以res.json()已经返回了json数据。试试let data = res.json();console.log(data)
    • 控制台显示 Promise { } 并且嵌入显示为未定义。
    猜你喜欢
    • 2018-04-24
    • 2021-10-19
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多