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

Discord JavaScript bot 通过用户ID踢人返回用户未找到错误

问题原因排查与修复方案

1. 核心逻辑错误

你代码中的成员存在性判断完全不符合预期:
message.guild.members.cache.get() 方法的返回值只有两种可能:匹配到成员时返回 GuildMember对象,未匹配到时返回 undefined,二者都不可能和布尔值true严格相等。因此if (member === true)判断永远不通过,直接执行else分支返回「That member was not found」。

2. 缓存未命中问题

Discord.js 只会将近期触发过服务器事件的成员信息存储在本地缓存中,若目标用户长时间未在服务器活跃,就算输入的ID完全正确,cache.get()也会返回undefined。

3. 潜在权限遗漏问题

你仅校验了命令使用者的踢人权限,未校验机器人自身的权限:机器人需要拥有KICK_MEMBERS权限,且自身角色层级高于被踢用户的角色层级,才能完成踢人操作。


修正后代码示例
if(CMD_NAME === 'kick') {
  // 校验命令使用者权限
  if (!message.member.hasPermission('KICK_MEMBERS'))
    return message.reply('You do not have permissions to use that command');
  if (args.length === 0)
    return message.reply('Please provide an ID');

  // 校验机器人自身权限
  if (!message.guild.me.hasPermission('KICK_MEMBERS'))
    return message.reply('I do not have permission to kick members');
  
  try {
    // 优先读缓存,缓存未命中时主动拉取成员信息
    const member = message.guild.members.cache.get(args[0]) || await message.guild.members.fetch(args[0]);
    member.kick()
      .then((kickedMember) => message.channel.send(`${kickedMember} was kicked.`))
      .catch((err) => message.channel.send('I cannot kick that user :('));
  } catch (e) {
    // 拉取失败说明ID对应的成员不在本服务器
    message.channel.send('That member was not found');
  }
}

注意:如果你的代码外层不是异步函数,需要给触发命令的事件回调函数加上async关键字,否则await会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:27:00