TypeError: message.author is not a function报错及ban命令权限校验求助
问题原因及修复方案
1. 报错核心原因
message.author是Discord.js中的User类型对象,不是可调用的函数,不需要加括号()调用,直接取值即可- 权限校验需要使用服务器内的成员对象
message.member,而非全局用户对象message.author:message.author仅存储用户全局通用信息,没有服务器内的角色、权限数据,无法调用hasPermission方法
2. 正确逻辑实现
将const mod的赋值改为message.member即可完成权限校验,同时修正其他逻辑错误如下:
修正说明:
- 修正
mod的取值来源- 删除错误的
!条件写法,统一走无权限分支提示- 补充未指定封禁目标的提示逻辑
module.exports = { name: 'ban', description: "该命令用于封禁指定成员", execute(message, args) { const target = message.mentions.users.first(); // 正确获取当前消息发送者在本服务器的成员对象,用于权限校验 const mod = message.member; // 先校验权限 if (mod.hasPermission('BAN_MEMBERS')) { // 有封禁权限的情况 if (target) { const memberTarget = message.guild.members.cache.get(target.id); memberTarget.ban(); message.channel.send("用户已被封禁"); } else { // 未@指定要封禁的用户 message.channel.send("请@指定需要封禁的用户"); } } else { // 无封禁权限的情况 message.channel.send(`你无法执行封禁操作,你没有BAN_MEMBERS权限`); } } }
注意:如果你使用的是Discord.js v13及以上版本,权限校验方法需要改为mod.permissions.has('BAN_MEMBERS')
内容的提问来源于stack exchange,提问作者A5TR0N0MICZ
相关产品推荐
相关产品推荐

