Discord Bot 异步函数中的 Giphy API
Giphy API in Discord Bot async function
我开始编写一个Discord-Bot,目前他没有那么多功能。所以目前我正在处理命令“!gif”,所以我用一个词键入该命令(这里是 "spider"),作为响应,我得到一个带有 Spider-Tag 的 gif。
这是我的 Discord 代码:
if(command == "gif"){
message.channel.send(modSearchGif.searchForGif("spider"));
}
modSearchGif 是一个在此 .js 脚本中实现的模块。
模块如下所示:
var GphApiClient = require('giphy-js-sdk-core')
const client = GphApiClient(process.env.GIPHYTOKEN)
const searchForGif = (gifName) => {
client.search('gifs', {"q": gifName, "limit": 1})
.then((response) => {
var gif = response.data[0].url;
return gif;
})
.catch((err) => {
return err;
})
}
module.exports.searchForGif = searchForGif;
所以它真的很简单,如果在 Discord-Channel 中写入命令 "gif",Bot 正在调用模块并给它参数 "spider"。
然后客户端在giphy数据库中搜索这个参数,returns一个json脚本。这是一个 Promise,如果 Promise 完成,gif 将返回到 mainscript 并将发送到 Discord-Channel。
这就是问题所在,Promise 调用是异步的,因此 Discord 命令 "message.channel.send" 在 promise 完成之前执行,因此消息未定义,我得到一个错误 "Cannot send empty message"。
我希望 message.channel.send 在返回 gif 时执行,而不是更早。
我真的不知道这个。
你们有什么想法吗?
提前致谢!
我会尝试这样的事情,因为 then/catch
也是 returns 一个 Promise
if(command == "gif"){
var searchPromise = modSearchGif.searchForGif("spider");
searchPromise.then((gif) => {
message.channel.send(gif);
})
}
要实现这一点,searchForGif
应该 return
Promise,即
const searchForGif = (gifName) => {
return client.search('gifs', {"q": gifName, "limit": 1})
.then((response) => {
var gif = response.data[0].url;
return gif;
})
.catch((err) => {
return err;
})
}
我开始编写一个Discord-Bot,目前他没有那么多功能。所以目前我正在处理命令“!gif”,所以我用一个词键入该命令(这里是 "spider"),作为响应,我得到一个带有 Spider-Tag 的 gif。
这是我的 Discord 代码:
if(command == "gif"){
message.channel.send(modSearchGif.searchForGif("spider"));
}
modSearchGif 是一个在此 .js 脚本中实现的模块。
模块如下所示:
var GphApiClient = require('giphy-js-sdk-core')
const client = GphApiClient(process.env.GIPHYTOKEN)
const searchForGif = (gifName) => {
client.search('gifs', {"q": gifName, "limit": 1})
.then((response) => {
var gif = response.data[0].url;
return gif;
})
.catch((err) => {
return err;
})
}
module.exports.searchForGif = searchForGif;
所以它真的很简单,如果在 Discord-Channel 中写入命令 "gif",Bot 正在调用模块并给它参数 "spider"。 然后客户端在giphy数据库中搜索这个参数,returns一个json脚本。这是一个 Promise,如果 Promise 完成,gif 将返回到 mainscript 并将发送到 Discord-Channel。
这就是问题所在,Promise 调用是异步的,因此 Discord 命令 "message.channel.send" 在 promise 完成之前执行,因此消息未定义,我得到一个错误 "Cannot send empty message"。
我希望 message.channel.send 在返回 gif 时执行,而不是更早。
我真的不知道这个。 你们有什么想法吗?
提前致谢!
我会尝试这样的事情,因为 then/catch
也是 returns 一个 Promise
if(command == "gif"){
var searchPromise = modSearchGif.searchForGif("spider");
searchPromise.then((gif) => {
message.channel.send(gif);
})
}
要实现这一点,searchForGif
应该 return
Promise,即
const searchForGif = (gifName) => {
return client.search('gifs', {"q": gifName, "limit": 1})
.then((response) => {
var gif = response.data[0].url;
return gif;
})
.catch((err) => {
return err;
})
}