gpt4 book ai didi

javascript - Discord Bot 异步函数中的 Giphy API

转载 作者:行者123 更新时间:2023-12-03 02:36:06 25 4
gpt4 key购买 nike

我开始编写一个 Discord-Bot,他目前还没有那么多功能。所以目前我正在处理命令“!gif”,所以我用一个单词(这里是“spider”)输入该命令,作为响应,我得到了一个带有蜘蛛标签的 gif。

这是我的不和谐代码:

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”,机器人就会调用该模块并为其提供参数“spider”。然后客户端在giphy数据库中搜索这个参数并返回一个json脚本。这是一个 promise ,如果 promise 被履行,gif 将返回到主脚本并将发送到 Discord channel 。

问题是,Promise 调用是异步的,因此 Discord 命令“message.channel.send”在 Promise 完成之前执行,因此消息未定义,并且我收到错误“无法发送空消息”。

我希望在返回 gif 时执行 message.channel.send,而不是更早执行。

我对此真的一无所知。你们有什么想法吗?

提前谢谢您!

最佳答案

我会尝试这样的事情,因为 then/catch 也会返回一个 Promise

if(command == "gif"){
var searchPromise = modSearchGif.searchForGif("spider");

searchPromise.then((gif) => {
message.channel.send(gif);
})
}

要使其工作,searchForGif 应该返回 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;
})
}

关于javascript - Discord Bot 异步函数中的 Giphy API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com