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

DiscordJS v14 封禁斜杠命令报错:Cannot read properties of null

DiscordJS v14 封禁斜杠命令 TypeError 排查与修复

问题根源

你遇到的 TypeError: Cannot read properties of null (reading 'username') 是因为使用了 interaction.options.getUser('target') 获取目标对象:

  • getUser() 返回的是全局Discord用户对象,如果目标用户不在当前服务器中(比如已退出服务器),该方法会返回 null。
  • 封禁操作仅对服务器内的成员有效,需要获取**服务器成员对象(GuildMember)**而非全局用户对象。

修复方案

1. 替换对象获取方式

将 getUser 改为 getMember,确保获取到服务器内的成员对象:

// 错误写法
const target = interaction.options.getUser('target');

// 正确写法
const target = interaction.options.getMember('target');

2. 调整用户名读取逻辑

GuildMember 对象的用户名存储在 user 属性下,或者使用 displayName 获取用户在服务器内的昵称(更友好):

// 使用用户名
`已封禁 ${target.user.username}`

// 使用服务器昵称
`已封禁 ${target.displayName}`

3. 补充实际封禁逻辑

原代码仅回复提示,未执行真正的封禁操作,需添加 ban 调用:

await target.ban({ reason });

修改后的完整代码

const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
const Logger = require('@utils/Logger');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('ban')
        .setDescription('选择一个成员并封禁他们。')
        .addUserOption(option =>
            option
                .setName('target')
                .setDescription('要封禁的成员')
                .setRequired(true))
        .addStringOption(option =>
            option
                .setName('reason')
                .setDescription('封禁原因'))
        .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers)
        .setDMPermission(false),

    async execute(interaction) {
        try {
            const target = interaction.options.getMember('target');
            const reason = interaction.options.getString('reason') ?? '未提供原因';

            // 执行封禁操作
            await target.ban({ reason });
            await interaction.reply(`已封禁 ${target.displayName},原因:${reason}`);
        } catch (error) {
            Logger.error(error);
            await interaction.reply({
                content: '执行命令时发生错误,请联系开发者处理。',
                ephemeral: true,
            });
        }
    },
};

额外检查项

  • 确保机器人账号在当前服务器拥有Ban Members权限,否则执行封禁会抛出权限错误。
  • 命令已正确注册到Discord服务器(可通过重新部署命令确认)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:04:57