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

Discord机器人无法正确识别头像文件扩展名问题

问题原因

你判断头像格式的逻辑存在漏洞:Discord返回的头像URL会附带查询参数(比如?size=2048),用split('.').pop()拿到的内容是gif?size=2048,而非单纯的gif,导致avatarExtension === 'gif'的条件永远不成立,GIF头像因此被误分到PNG对应的频道。

修复方案

改用正则表达式提取URL中的文件扩展名,自动忽略查询参数的干扰,同时兼容大小写差异。

修正后的代码

client.on('userUpdate', (oldUser, newUser) => {
    const oldAvatarURL = oldUser.displayAvatarURL({ size: 2048, dynamic: true });
    const newAvatarURL = newUser.displayAvatarURL({ size: 2048, dynamic: true });
  
    if (oldAvatarURL === newAvatarURL) return;
  
    // 用正则提取扩展名(自动忽略查询参数)
    const extensionMatch = newAvatarURL.match(/\.([a-z0-9]+)(?:\?|$)/i);
    const avatarExtension = extensionMatch ? extensionMatch[1] : '';
    
    const canalgif = client.channels.cache.get("1076541628405272667");
    const canalicon = client.channels.cache.get("1076541589062692874");
  
    if (avatarExtension.toLowerCase() === 'gif') {
      const embedgif = new Discord.EmbedBuilder()
        .setImage(newAvatarURL)
        .setColor('#360d60')
        .setTitle('Teste gif');
      canalgif.send({ embeds: [embedgif] });
    } else {
      const embedicon = new Discord.EmbedBuilder()
        .setImage(newAvatarURL)
        .setColor('#360d60')
        .setTitle('teste icon');
      canalicon.send({ embeds: [embedicon] });
    }
});

关键修改说明

  1. 正则/\.([a-z0-9]+)(?:\?|$)/i负责精准匹配扩展名:
    • 捕获.之后、?或URL结尾之前的字母/数字序列
    • 忽略大小写,避免因扩展名大写(如GIF)导致的匹配失败
  2. 增加toLowerCase()统一转换为小写,进一步消除大小写差异带来的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:20:28