UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send an empty message
UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send an empty message
我在从抓取中向 Discord 频道发送消息时遇到问题。
我正在从 REST API 中获取时间序列数据。然后,如果 Discord 用户键入命令,我想发送此数据。
代码:
require("dotenv").config();
const fetch = require("node-fetch");
const { Client } = require("discord.js");
const PREFIX = "!";
const getPrice = async (ticker) => {
let result = "test";
const request = await fetch(
`https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=${ticker}&interval=5min&apikey=${process.env.API_KEY}`
);
const response = await request.json();
const data = await response;
const obj = await data["Time Series (5min)"];
result = obj[Object.keys(obj)[0]];
return result;
};
client.on("message", (message) => {
if (message.author.bot) return;
if (message.content.startsWith(PREFIX)) {
const [command, ...args] = message.content
.trim()
.substring(PREFIX.length)
.split(/\s+/);
const result = getPrice(`${command.toUpperCase()}`);
message.channel.send(result);
}
});
我收到以下错误:
UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send an empty message
如果您查看以下代码并将其替换为 console.log
- 它可以工作。例如
原创
message.channel.send(result);
替换为
console.log(result)
然后就可以了:
{
'1. open': '119.0200',
'2. high': '119.0200',
'3. low': '119.0200',
'4. close': '119.0200',
'5. volume': '302'
}
我怀疑和Promises有关,可能是我的理解不够到位,但是我看了一遍又一遍的文档,还是看不懂。
我认为 result
为空的原因是因为在堆栈中调用该方法时,提取还没有返回数据,它试图发送空数据。
如何确保 message.channel.send
在被调用之前等待我的提取完成?
getPrice
是一个异步函数,returns 是一个承诺。您需要等待结果才能发送:
client.on("message", async (message) => {
if (message.author.bot) return;
if (message.content.startsWith(PREFIX)) {
const [command, ...args] = message.content
.trim()
.substring(PREFIX.length)
.split(/\s+/);
const result = await getPrice(`${command.toUpperCase()}`);
message.channel.send(result);
}
});
我在从抓取中向 Discord 频道发送消息时遇到问题。
我正在从 REST API 中获取时间序列数据。然后,如果 Discord 用户键入命令,我想发送此数据。
代码:
require("dotenv").config();
const fetch = require("node-fetch");
const { Client } = require("discord.js");
const PREFIX = "!";
const getPrice = async (ticker) => {
let result = "test";
const request = await fetch(
`https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=${ticker}&interval=5min&apikey=${process.env.API_KEY}`
);
const response = await request.json();
const data = await response;
const obj = await data["Time Series (5min)"];
result = obj[Object.keys(obj)[0]];
return result;
};
client.on("message", (message) => {
if (message.author.bot) return;
if (message.content.startsWith(PREFIX)) {
const [command, ...args] = message.content
.trim()
.substring(PREFIX.length)
.split(/\s+/);
const result = getPrice(`${command.toUpperCase()}`);
message.channel.send(result);
}
});
我收到以下错误:
UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send an empty message
如果您查看以下代码并将其替换为 console.log
- 它可以工作。例如
原创
message.channel.send(result);
替换为
console.log(result)
然后就可以了:
{
'1. open': '119.0200',
'2. high': '119.0200',
'3. low': '119.0200',
'4. close': '119.0200',
'5. volume': '302'
}
我怀疑和Promises有关,可能是我的理解不够到位,但是我看了一遍又一遍的文档,还是看不懂。
我认为 result
为空的原因是因为在堆栈中调用该方法时,提取还没有返回数据,它试图发送空数据。
如何确保 message.channel.send
在被调用之前等待我的提取完成?
getPrice
是一个异步函数,returns 是一个承诺。您需要等待结果才能发送:
client.on("message", async (message) => {
if (message.author.bot) return;
if (message.content.startsWith(PREFIX)) {
const [command, ...args] = message.content
.trim()
.substring(PREFIX.length)
.split(/\s+/);
const result = await getPrice(`${command.toUpperCase()}`);
message.channel.send(result);
}
});