Discord.js创建静音角色命令执行报错:ReferenceError: guild未定义
错误原因
- 核心报错是
guild变量未定义,你没有从消息上下文获取当前服务器实例,discord.js 中需要通过message.guild拿到当前消息所属的服务器对象 - 你给静音角色配置的权限逻辑错误,
SEND_MESSAGES是允许发送消息,和静音角色的需求完全相反 roles.create是异步接口,你没有等待执行完成就调用role变量,会触发第二个未定义报错- 配置项里的
discription是拼写错误,正确写法是description
修复后代码
const Discord = require("discord.js") module.exports = { name: 'muterolecreate', usage: '%muterolecreate', description: "创建静音角色", // 函数加async标记支持异步等待 async execute(client, message, args) { // 定义guild变量,从消息对象取当前服务器 const guild = message.guild; // 等待角色创建完成后拿到返回的role对象 const role = await guild.roles.create({ data: { name: 'muted', color: 'RED', // 仅保留查看频道权限,移除发送消息权限 permissions: ["VIEW_CHANNELS"] }, }) message.channel.send(`${role} 已创建完成`) } }
后续适配说明
- 以上代码适用于discord.js v13及更低版本,如果使用v14及以上版本,需要将权限字符串替换为
PermissionFlagsBits.ViewChannel枚举值 - 角色创建完成后还需要遍历服务器所有文本/语音频道,给muted角色设置权限覆写,禁止发送消息、连麦、发反应等操作,否则静音角色不会生效
- 机器人账号和执行命令的用户都需要持有
管理角色权限,否则会触发权限不足报错
内容的提问来源于stack exchange,提问作者cb12438
相关产品推荐
相关产品推荐

