编写Discord服务器全员踢出命令出现allMembers.kick is not a function错误如何解决
错误原因
message.guild.members返回的是GuildMemberManager类型的集合管理器对象,并非单个成员实例,只有单个GuildMember实例才具备kick()方法,直接对集合调用该方法自然会触发allMembers.kick is not a function的报错。
修复步骤
- 前置配置:前往Discord开发者平台的Bot管理页,开启Server Members Intent权限开关,同时给你的Bot在对应服务器分配
Kick Members管理权限,缺少权限会导致后续踢出操作失败。 - 代码逻辑调整:你需要先拉取所有服务器成员的列表,再遍历列表对每个成员单独执行踢出操作,同时建议跳过服务器所有者和Bot自身,避免操作中断。
修复后的参考代码如下(适配discord.js v13+版本):
client.on("messageCreate", async message => { // 过滤Bot自身发送的消息,避免死循环 if (message.author.bot) return; if (message.content.startsWith(prefix + "amstronglikeabullinapool")) { message.channel.send("ok i dont care"); // 校验操作者权限,可根据需求删除该判断 if (!message.member.permissions.has('KickMembers')) { return message.channel.send("你没有执行该命令的权限"); } try { // 拉取服务器所有成员列表 const allMembers = await message.guild.members.fetch(); // 遍历成员逐个执行踢出 for (const member of allMembers.values()) { // 跳过服务器所有者和Bot自身,避免操作中断 if (member.id === message.guild.ownerId || member.id === client.user.id) continue; // 执行踢出,catch捕获单个成员踢出失败的异常避免整体流程中断 await member.kick("批量踢出操作").catch(err => console.log(`踢出成员${member.user.tag}失败:`, err)); } message.channel.send("oki 操作完成"); } catch (err) { console.error("批量操作失败:", err); message.channel.send("操作执行失败,请检查Bot权限和意图配置"); } } })
- 注意:批量踢出成员属于违反Discord服务条款的滥用行为,仅可在个人所有的测试服务器内验证功能,违规使用会导致Bot账号甚至个人Discord账号被平台封禁。
内容的提问来源于stack exchange,提问作者TheCoolDev
相关产品推荐
相关产品推荐

