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

Discord.js开发:如何获取消息发送者并校验其执行mute命令的权限

问题原因

你遇到的报错是因为Discord.js的Message对象本身不存在user和sender两个属性,读取这两个不存在属性的permission字段时就会抛出undefined读取错误,同时你提到的权限判断写法也确实存在问题。

修复后的完整代码

name: 'mute',
description: 'mutes someone',
execute(message,args) { 
  const target = message.mentions.members.first();
  const muteRole = message.guild.roles.cache.find(role => role.name === 'MUTED')
  // 先校验MUTED角色是否存在,避免后续赋值报错
  if (!muteRole) return message.channel.send("未找到MUTED角色,请先创建对应角色后再使用禁言命令")
  // 没有提到目标用户 或 发送者没有管理角色权限时直接返回提示
  if(!target || !message.member.permissions.has('MANAGE_ROLES') ) {
    return message.channel.send("你没有权限禁言该用户")
  }
  // 执行禁言逻辑
  target.roles.add(muteRole)
  message.channel.send("用户已被禁言")
}

核心修改说明

  • 移除了不存在的message.user、message.sender调用,替换为正确的message.member获取发送者在当前服务器的成员对象,只有GuildMember类型才包含服务器内权限属性
  • 将错误的单数permission改为正确的复数permissions属性
  • 新增MUTED角色存在性判断,避免找不到角色时后续操作抛出异常
  • 简化了冗余的二次权限判断逻辑,优化代码结构
  • 如果你使用的是Discord.js v14及以上版本,权限判断需要修改为!message.member.permissions.has(PermissionFlagsBits.ManageRoles),同时需要在文件头部导入PermissionFlagsBits枚举。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:06:10