You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让Discord头像命令支持用户ID和标签(当前仅支持提及)

扩展Discord头像命令以支持用户ID和标签调用

没问题,我帮你调整代码来实现支持用户ID和标签的功能!目前你的代码只处理了提及用户和默认自身的情况,要扩展的话,我们需要做这几个关键修改:


核心思路

我们需要先提取用户输入的命令参数,然后依次尝试通过「提及用户」「用户ID/标签」来查找目标用户,如果都找不到再 fallback 到发送命令的用户自己。另外注意,通过ID或标签查找用户是异步操作,所以要把命令处理函数改成async

修改后的完整代码

// 注意要把命令处理函数标记为async
async function runAvatarCommand(message) {
  // 提取命令参数(去掉前缀+avatar后的内容)
  const targetInput = message.content.split(' ').slice(1).join(' ');
  let user;

  // 优先处理@提及的用户
  if (message.mentions.users.size > 0) {
    user = message.mentions.users.first();
  } 
  // 处理用户输入了ID或User#1234格式标签的情况
  else if (targetInput) {
    try {
      // 用client.users.fetch查找用户,同时支持ID和标签格式
      user = await message.client.users.fetch(targetInput);
    } catch (error) {
      // 查找失败时给出友好提示,避免程序崩溃
      return message.channel.send(`找不到ID或标签为 \`${targetInput}\` 的用户哦!`);
    }
  } 
  // 没有输入目标时,默认用发送命令的用户自己
  else {
    user = message.member.user;
  }

  // 生成并发送头像Embed
  const embed = new message.client.MessageEmbed()
    .setFooter(
      'Avatar Command', message.author.displayAvatarURL({ format: 'png', dynamic: true })
    )
    .setTimestamp()
    .setTitle(`${user.username}'s Avatar`)
    .setImage(user.displayAvatarURL({ format: 'png', dynamic: true, size: 1024 })) // 新增size参数获取高清头像
    .setColor('RANDOM');
  
  message.channel.send(embed);
}

关键修改点说明

  • 异步处理users.fetch()是异步方法,所以必须把命令函数标记为async,并用await等待查找结果返回。
  • 参数提取:通过split(' ').slice(1).join(' ')精准拿到用户输入的目标ID/标签,避免命令前缀干扰匹配。
  • 错误捕获:用try/catch包裹查找操作,当用户输入无效ID/标签时,会返回友好提示而不是直接报错。
  • 体验优化:在displayAvatarURL里添加size: 1024,可以获取分辨率更高的头像,提升视觉体验。

修改完成后,你的命令就支持三种调用方式了:

  • +avatar @用户名(原有的提及方式)
  • +avatar 656432172722290688(用户ID)
  • +avatar User#1234(用户标签)

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

火山引擎 最新活动