javascript Discord机器人无法正确识别头像扩展名

ujv3wf0j  于 2023-02-21  发布在  Java
关注(0)|答案(2)|浏览(131)

我做了一个脚本,当用户更新他们的个人资料,发送他们的新头像到一个基于图片扩展名的通道。当扩展名是.png时,它是工作的,但当它是.gif时,它在发送.png的同一个通道中发送它。我的代码如下:
我想写一个脚本,当你经常改变你的头像,你就可以进入运河,你的功能是什么?当你进入运河,你就可以进入运河。

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 avatarExtension = newAvatarURL.split('.').pop();
    const canalgif = client.channels.cache.get("1076541628405272667");
    const canalicon = client.channels.cache.get("1076541589062692874");
  
//-----------------------------// GIFS //-----------------------------// 
    if (avatarExtension === 'gif') {
      const embedgif = new Discord.EmbedBuilder()
        .setImage(newAvatarURL)
        .setColor('#360d60')
        .setTitle('Teste gif');
        canalgif.send({ embeds: [embedgif] });
    } else {
//-----------------------------// Icon //-----------------------------// 
const embedicon = new Discord.EmbedBuilder()
        .setImage(newAvatarURL)
        .setColor('#360d60')
        .setTitle('teste icon');
        canalicon.send({ embeds: [embedicon] });
    }
  });
avwztpqn

avwztpqn1#

你只需要删除oldAvatarURLnewAvatarURL变量的size参数。实际上,在你的代码中,一个gif将显示为gif?size=4096...

92dk7w1h

92dk7w1h2#

如果您使用.displayAvatarURL()size选项,返回的URL将在末尾附加一个查询字符串。这意味着虚拟形象不会以.gif.png.webp等结尾,而是以.webp?size=2048结尾。
您目前获取URL扩展名的方式将不起作用,因为您只需将其拆分为.并检查最后一部分。

// ⛔️ won't work
let url = `https://cdn.discordapp.com/avatars/827997777303699467/55b85c4fe590a54c53183990b030f128.webp?size=2048`
let extension = url.split('.').pop();

console.assert(extension === 'webp', `extension is not "webp", but "${extension}"`);

与其删除size选项,最后得到默认大小128px,不如更新获取扩展名的方式。首先,可以按已经尝试过的.进行拆分,然后再按?进行拆分:

// ✅ works as expected
let url1 = `https://cdn.discordapp.com/avatars/827997777303699467/55b85c4fe590a54c53183990b030f128.webp?size=2048`;
let url2 = `https://cdn.discordapp.com/avatars/827997777303699467/55b85c4fe590a54c53183990b030f128.png`;
let extension1 = url1.split('.').pop().split('?')[0];
let extension2 = url2.split('.').pop().split('?')[0];

console.log(extension1);
console.log(extension2);

因此,以下内容应按预期工作:

client.on('userUpdate', (oldUser, newUser) => {
  const options = { size: 2048, dynamic: true };
  const oldAvatarURL = oldUser.displayAvatarURL(options);
  const newAvatarURL = newUser.displayAvatarURL(options);

  if (oldAvatarURL === newAvatarURL) return;

  const avatarExtension = newAvatarURL.split('.').pop().split('?')[0];
  const embed = new Discord.EmbedBuilder()
    .setImage(newAvatarURL)
    .setColor('#360d60');

  if (avatarExtension === 'gif') {
    const canalGif = client.channels.cache.get('1076541628405272667');
    canalGif.send({ embeds: [embed.setTitle('Teste gif')] });
  } else {
    const canalIcon = client.channels.cache.get('1076541589062692874');
    canalIcon.send({ embeds: [embed.setTitle('Teste icon')] });
  }
});

相关问题