Tenor短链接无法在Discord.js嵌入中加载,不知如何转为GIF链接
Discord机器人GIF命令加载缓慢问题排查与解决
问题描述
开发Discord机器人的JavaScript GIF命令时遇到问题:命令发送的嵌入消息中GIF加载速度极慢,但直接点击链接能正常打开页面。相关代码如下:
const { EmbedBuilder, MessageType } = require("discord.js"); const Tenor = require("tenorjs").client({ Key: process.env.TENORAPI, Filter: "off", Locale: "en_US", }); require("dotenv/config"); exports.run = async (client, message, prefix) => { const args = message.content.slice(prefix.length + 3).trim(); const person = message.author; Tenor.Search.Random(args, "1") .then((Results) => { Results.forEach((Post) => { const embed = new EmbedBuilder() .setAuthor({ name: `here is your ${args} gif, ${person.username} ;)`, iconURL: person.displayAvatarURL(), url: Post.url, }) .setImage(Post.url); message.reply({ embeds: [embed] }); }); }) .catch(console.error); console.log(args); }; exports.name = "gif";
问题原因
当前代码中使用的Post.url是Tenor的网页链接,并非GIF资源的直接文件地址。Discord加载嵌入中的图片时,需要先解析这个网页、提取GIF资源,这个额外步骤导致加载速度变慢。
修复方案
改用Tenor返回结果里的GIF直链地址,比如Post.media[0].gif.url,这是GIF文件的直接访问链接,Discord可以直接加载,无需额外解析,速度会大幅提升。
修改后的完整代码:
const { EmbedBuilder } = require("discord.js"); const Tenor = require("tenorjs").client({ Key: process.env.TENORAPI, Filter: "off", Locale: "en_US", }); require("dotenv/config"); exports.run = async (client, message, prefix) => { const args = message.content.slice(prefix.length + 3).trim(); const person = message.author; // 空关键词判断 if (!args) { return message.reply("请输入要搜索的GIF关键词!"); } try { // 改用async/await简化代码 const Results = await Tenor.Search.Random(args, "1"); const Post = Results[0]; const embed = new EmbedBuilder() .setAuthor({ name: `这是你的${args}动图,${person.username} ;)`, iconURL: person.displayAvatarURL(), url: Post.url, }) .setImage(Post.media[0].gif.url); // 使用GIF直链 message.reply({ embeds: [embed] }); } catch (error) { console.error(error); message.reply("搜索GIF时出错了,请稍后再试!"); } console.log(args); }; exports.name = "gif";
额外优化说明
- 替换
.then()为async/await,代码结构更清晰,错误处理更便捷 - 添加空关键词校验,避免无效搜索请求
- 直接获取结果数组的第一个元素,无需使用
forEach(因为请求数量为1)
内容的提问来源于stack exchange,提问作者Yoru
相关产品推荐
相关产品推荐

