Discord.js 带Embed与按钮的踢人命令运行报member.kick不是函数错误
错误原因
client.users.fetch()返回的是Discord全局的User对象,该对象仅包含用户的通用公开信息,不具备服务器成员相关的操作方法。kick()是GuildMember对象的专属方法,只有从当前服务器实例中拉取的成员对象才会携带这个方法。
修复方案
你需要从当前交互对应的服务器实例拉取成员对象,而非从全局用户池拉取,修改后的代码如下:
- 先提取目标用户ID:
const targetUserId = interaction.message.embeds[0].fields[0].value.replace(/[\\<>@#&!]/g,"");
- 替换拉取成员的方法:
// 从当前服务器拉取成员 interaction.guild.members.fetch(targetUserId) .then(member => member.kick()) .catch(err => { console.error("踢人操作失败:", err) // 根据实际场景添加用户提示,比如交互回复 interaction.reply({ content: "踢人失败,请确认目标用户仍在服务器内、且机器人拥有踢人权限", ephemeral: true }) })
额外注意事项
- 必须确保机器人拥有服务器的
Kick Members权限,且机器人的角色等级高于被踢用户的角色等级 - 如果交互已经提前做过延迟回复,需将
interaction.reply替换为interaction.followUp或interaction.editReply避免报错
内容的提问来源于stack exchange,提问作者Gumernus
相关产品推荐
相关产品推荐

