You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:05:14