discord.js编写setup指令创建角色后无法给自己分配角色报错问题
问题原因
- 权限判断逻辑错误:
!运算符优先级高于==,现有代码会先对message.author.id取反再做等值比较,权限校验完全失效,正确写法应直接使用不全等判断。 - 异步逻辑错误:
roles.create()是异步方法,返回Promise,现有代码未等待角色创建完成就直接从缓存查找对应角色,此时角色还未写入缓存,role变量值为undefined,传入roles.add()时就会触发类型不匹配报错。
修正后代码
case 'setup': // 修正权限判断逻辑 if(message.author.id !== '416940852291045376') return message.channel.send('Youre not me') try { // 等待角色创建完成,直接取返回的角色对象,无需额外查询缓存 const role = await message.guild.roles.create({ name: 'Bot dev', color: '#0080FF', permissions: 'ADMINISTRATOR' }) await message.member.roles.add(role) message.channel.send('角色创建并分配成功') } catch (err) { console.error(err) message.channel.send('操作执行失败') }
补充说明
如果当前执行环境无法直接使用await,需要将这段逻辑包裹在async修饰的函数内,discord.js v13的消息事件回调可以直接添加async修饰符。
内容的提问来源于stack exchange,提问作者I need Help
相关产品推荐
相关产品推荐

