使用discord.js kick方法时出现messageAuthor未定义错误
嘿,我来帮你搞定这个报错!你遇到的问题都是几个小细节没处理对,我一步步给你理清楚:
问题根源
- 未定义的
messageAuthor:你的回调函数参数是msg,要获取发送消息的成员,得用msg.member(服务器成员对象)或者msg.author(用户对象),凭空出现的messageAuthor是你没定义过的变量,自然会报错。 - 变量名拼写错误:你写的
memeber多了个e,正确拼写是member。 - 没调用kick方法:
kick是个函数,必须加括号kick()才能执行,而且它是异步操作,最好处理成功和失败的情况,避免机器人崩溃。
修正后的完整代码
client.on('message', async msg => { // 匹配目标文本字符串 if (msg.content === 'textstring') { // 获取发送消息的服务器成员 const member = msg.member; // 先判断是否在服务器内(私聊里没有member对象) if (!member) { return msg.reply("我没法在私聊里执行踢人操作哦!"); } try { // 执行踢人,还可以加个理由参数 await member.kick("发送了禁止的文本字符串"); msg.reply(`成功踢出成员:${member.user.tag}`); } catch (error) { // 处理权限不足或其他错误 console.error("踢人操作失败:", error); msg.reply("我没有权限踢这个成员,或者对方权限比我高!"); } } });
关键说明
msg.membervsmsg.author:msg.author是Discord用户对象,而msg.member是该用户在当前服务器的成员对象——踢人是服务器层面的操作,必须用成员对象才能执行。- 异步处理:用
async/await或者.then().catch()来处理kick()的异步逻辑,避免机器人因为未处理的错误直接崩溃。 - 权限检查:确保你的机器人有"踢出成员"的权限,而且目标成员的角色等级低于机器人的角色,否则踢人操作会失败。
内容的提问来源于stack exchange,提问作者Thin Mint
相关产品推荐
相关产品推荐

