Discord机器人频道删除时踢人失败:TypeError问题求助
问题:Discord审核机器人无法踢除删除频道的用户
我给自己的Discord服务器开发自定义审核机器人,已经实现频道删除检测功能,但执行踢除操作时失败,控制台抛出TypeError: member.kick is not a function错误。打印操作人对象时,返回的是User类型数据,而非GuildMember类型。
报错信息
node:events:495 throw er; // Unhandled 'error' event ^ TypeError: member.kick is not a function at Client.<anonymous> (C:\Users\Nathan\Documents\Real-Anti-Raid-Bot\src\index.js:167:16) Emitted 'error' event on Client instance at: at emitUnhandledRejectionOrErr (node:events:398:10) at process.processTicksAndRejections (node:internal/process/task_queues:84:21) Node.js v18.20.3 [nodemon] app crashed - waiting for file changes before starting...
原代码
client.on('channelDelete', async (channel) => { // Get the channel ID const channelDeleteId = channel.id; // Fetch all channel deletions from the audit log const auditLogs = await channel.guild.fetchAuditLogs({ type: 12 }); // Find the log entry for this specific channelrs const channelDeleteEntry = auditLogs.entries.find((entry) => entry.target.id === channelDeleteId); if (channelDeleteEntry) { const deleter = channelDeleteEntry.executor; const member = deleter member.kick(); console.log(`User ${deleter.username} deleted channel ${channel.name} at time ${channelDeleteEntry.createdAt}`); } });
问题原因
channelDeleteEntry.executor返回的是User全局用户对象,而Discord.js中只有GuildMember服务器成员对象才拥有kick()方法。User对象仅包含用户的全局信息,不具备服务器内的权限操作能力。
解决方案
从目标服务器中获取对应用户的GuildMember实例,再执行踢人操作。同时添加异常处理,避免因权限不足等情况导致机器人崩溃。
修改后的代码
client.on('channelDelete', async (channel) => { const channelDeleteId = channel.id; const auditLogs = await channel.guild.fetchAuditLogs({ type: 12 }); const channelDeleteEntry = auditLogs.entries.find(entry => entry.target.id === channelDeleteId); if (channelDeleteEntry) { const deleter = channelDeleteEntry.executor; try { // 获取服务器内的成员实例 const member = await channel.guild.members.fetch(deleter.id); // 执行踢人操作,可自定义理由 await member.kick('删除服务器频道'); console.log(`已踢除用户 ${deleter.username},原因:删除频道 ${channel.name}`); } catch (err) { console.error('踢人操作失败:', err); } } });
注意事项
- 确保机器人拥有踢除成员的服务器权限
- 机器人的角色位置必须高于被踢用户的角色层级,否则无法执行操作
- 用
try/catch包裹踢人逻辑,处理权限不足、目标用户是服务器所有者等异常情况
内容的提问来源于stack exchange,提问作者Nathan Liwang
相关产品推荐
相关产品推荐

