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

discord.js开发pokeinfo命令时无法正确显示对应宝可梦缩略图

故障原因
  • 宝可梦官方站点配置了反盗链规则,Discord拉取嵌入缩略图时的请求来源不在官方站点的允许范围内,请求会被直接拦截,因此图片无法在嵌入内渲染,仅支持手动点击链接跳转访问。
  • 你手动拼接的链接本身也不符合官方站点的资源路径规则:官方图鉴页面的图片资源并不直接存放在/us/pokedex/路径下,仅拼接文件名无法拿到真实的图片直链。
解决方案

方案一:本地托管资源(稳定性最高)

  • 将所有宝可梦对应图片存放到项目本地的静态资源目录,发送消息时将图片作为附件随嵌入一同上传,直接引用附件内的图片,完全规避外部站点反盗链限制。
  • 具体代码修改如下:
// 顶部引入路径处理模块
const path = require('path');
const { Message, Client, MessageEmbed, MessageAttachment } = require("discord.js");
const {Ecolor} = require("../../embeds.js")
pokemon = require('../../db/pokemon.js')

module.exports = {
    name: "pokeinfo",
    description: "Shares Information about specified Pokemon of the game",
    run: async (client, message, args) => {
      // 替换原有参数解析逻辑,避免多余字符影响匹配
      let pkmn = args.join(' ').toLowerCase()

      for(var i=0;i<pokemon.length;i++){
        if(pkmn == pokemon[i]._engName.toLowerCase()){
          // 读取本地对应宝可梦图片创建附件
          const imgPath = path.resolve(__dirname, `../../pokemon-img/${pokemon[i]._pho}`);
          const pkmnAttach = new MessageAttachment(imgPath, 'current-pkmn.png');
          
         let Embed = new MessageEmbed()
          .setColor(`${Ecolor.pink}`)
          .setTitle(`Details about ${pokemon[i]._engName} :`)
          .setDescription(`Dex number - ${pokemon[i]._nb}`)
          .setThumbnail('attachment://current-pkmn.png') // 引用上传的附件图片
          .addFields(
            {name: 'Rarity:', value:`${pokemon[i]._rare}`, inline: true },
            {name: 'Evolution Chart:', value:`${pokemon[i]._evo}`, inline: true },
            {name: 'Location:', value:`${pokemon[i]._loc}`, inline: false },
            {name: 'Ev Yield:', value:`${pokemon[i]._ev}`, inline: true },
            {name: 'Ability:', value:`${pokemon[i]._ability}`, inline: true },
            
            {name: '__Base Stats__:', value:
`
**HP** : ${pokemon[i]._baseStats._hp}
**Atk** : ${pokemon[i]._baseStats._atk}
**Def** : ${pokemon[i]._baseStats._def}
**S. Atk** : ${pokemon[i]._baseStats._sAtk}
**S. Def** : ${pokemon[i]._baseStats._sDef}
**Speed** : ${pokemon[i]._baseStats._spd}
**Total** : ${pokemon[i]._baseStats._total}
**Growth Rate** : ${pokemon[i]._gr}
**Type** : ${pokemon[i]._ty}

`, inline: false },
            
    );
        // 发送时同时传入嵌入和附件
        message.channel.send({ embeds: [Embed], files: [pkmnAttach] });
        // 匹配到结果后跳出循环,减少不必要的遍历
        break;
                }
            }
    },
};

注意:使用本方案需要提前将所有宝可梦图片按_pho字段对应的文件名,存放到你项目中存放宝可梦图片的目录,注意修正代码里的图片目录路径和你实际存放路径一致。另外你提供的宝可梦样例数据中,_ty:"Grass/Poison"行末尾缺少逗号,直接运行会触发语法错误,记得补上。

方案二:使用公开无反盗链限制的宝可梦静态资源

  • 选择开放热链权限、无反盗链限制的宝可梦静态资源库,将数据中_pho字段的值替换为对应图片的直链地址(即直接访问链接可以返回图片内容、不是网页的地址),调用时直接传入直链即可正常加载。
  • 该方案不需要本地存储图片,但稳定性依赖第三方资源的可用性。

内容的提问来源于stack exchange,提问作者Corey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:21:35