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

Discord.js头像斜杠命令触发TypeError: Cannot read property 'users' of undefined

问题原因

你触发报错的核心原因是目标用户不在client.users.cache的缓存列表中,导致client.users.cache.find(user => user.id === avatarUser.id)返回undefined,后续调用undefined.tag就会抛出属性读取错误。

同时你的代码存在冗余操作:interaction.options.getUser('user')返回的本身就是完整的Discord User对象,根本不需要额外去缓存中二次查询匹配。

修复方案

直接删除多余的缓存查询代码,直接使用你已经拿到的avatarUser对象即可,interaction.options.getUser是同步方法不需要加await,修复后代码如下:

const Discord = require('discord.js')

module.exports = {
    name: 'avatar',
    execute: async (interaction, client) => {
        // 直接获取目标用户,不需要后续二次查缓存
        const avatarUser = interaction.options.getUser('user') || interaction.user

        const name = avatarUser.tag
        const avatar = avatarUser.displayAvatarURL({ dynamic: true })
        const png = avatarUser.displayAvatarURL({ format: 'png' })
        const jpg = avatarUser.displayAvatarURL({ format: 'jpg' })
        const gif = avatarUser.displayAvatarURL({ format: 'gif' })

        // 如果你使用的是discord.js v14及以上版本,需要把MessageEmbed替换为EmbedBuilder
        const embed = new Discord.MessageEmbed()
            .setTitle(`${name}'s Avatar`)
            .addFields(
                {
                    name: 'Type',
                    value: `[PNG](${png}) [JPG](${jpg}) [GIF](${gif})`
                }
            )
            .setImage(avatar)
            .setColor('BLUE')

        interaction.reply({ embeds: [embed] })
    }
}

可选兜底方案

如果有特殊场景必须从客户端缓存取用户,可以加fetch兜底逻辑,避免缓存不存在的问题,同时缓存查询可以用性能更高的get方法替代find遍历:

// 缓存查找失败时主动拉取用户信息
const user = client.users.cache.get(avatarUser.id) || await client.users.fetch(avatarUser.id)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:51:01