You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js 解封命令报错:TypeError: message.author.hasPermission非函数

问题修复方案

核心错误原因

message.author是Discord.js中的User对象,该对象没有hasPermission方法——权限是用户在服务器内的身份属性,对应的是Member对象(即message.member),这就是你触发TypeError: message.author.hasPermission is not a function报错的根本原因。

其他逻辑错误&修复点

除核心报错外,代码还有几处逻辑颠倒的问题,一并修正:

  • 权限判断逻辑颠倒:原代码是用户有权限时返回错误,应改为用户无权限时提示
  • 参数检查逻辑颠倒:原代码是有参数时提示需提供ID,应改为未传参数时提示
  • 默认理由赋值颠倒:原代码是有理由时设为默认值,应改为无理由时用默认值
  • 机器人权限判断颠倒:原代码是机器人有权限时返回错误,应改为机器人无权限时提示

修复后的完整代码

if (message.content.startsWith('L!unban')) {
    // 检查用户是否有解封权限(使用message.member而非message.author)
    if (!message.member.hasPermission(["BAN_MEMBERS"])) {
        return message.channel.send("You do not have the required permissions to use the unban command.");
    }

    // 检查是否传入了用户ID
    if (!args[0]) {
        return message.channel.send("Provide me a valid USER ID.");
    }

    let bannedMember;
    try {
        bannedMember = await bot.users.cache.fetch(args[0]);
    } catch (e) {
        if (!bannedMember) {
            return message.channel.send("That's not a valid USER ID.");
        }
    }

    // 检查用户是否被封禁
    try {
        await message.guild.fetchBan(args[0]);
    } catch (e) {
        message.channel.send('This user is not banned.');
        return;
    }

    // 处理解封理由
    let reason = args.slice(1).join(" ");
    if (!reason) {
        reason = "No reason provided.";
    }

    // 检查机器人是否有解封权限
    if (!message.guild.me.hasPermission(["BAN_MEMBERS"])) {
        return message.channel.send("I am missing permissions to unban.");
    }

    message.delete();
    try {
        await message.guild.members.unban(bannedMember, { reason: reason });
        message.channel.send(`${bannedMember.tag} has been unbanned.`);
    } catch (e) {
        console.log(e.message);
    }
}

内容的提问来源于stack exchange,提问作者FBILOLIGIRL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:25:14