Discord.JS 能够添加角色但无法删除角色?

Posted

技术标签:

【中文标题】Discord.JS 能够添加角色但无法删除角色?【英文标题】:Discord.JS able to add role but unable to remove role? 【发布时间】:2020-01-04 03:47:44 【问题描述】:

我最近一直在思考这段代码最长的时间。我可以添加角色,但第二次尝试删除角色时没有错误,也没有实际删除角色。

我曾尝试在互联网上查找此问题,但每个问题要么不是相同的上下文,要么没有解决我的问题。我也尝试过完全复制我的添加角色命令,只需将“addRole”更改为“removeRole”,仍然无法正常工作。

// Unmute.js
/* ... */
exports.run = async(client,message,args) => 
  /* ... */
  let mutee = message.mentions.members.first() || message.guild.members.get(args[0])
  if (!mutee) return message.channel.send("You did not mention a user!")
  let reason = args.slice(1).join(" ")
  if (!reason) reason = "No reason."
  let muterole = message.guild.roles.find(r => r.property === "Muted")
  if (!muterole) 
    try 
      muterole = await message.guild.createRole(
        name: "Muted",
        color: "#514f48",
        permissions: []
      )
      message.guild.channels.forEach(async(channel, id) => 
        await channel.overwritePermissions(muterole, 
          SEND_MESSAGES: false,
          ADD_REACTIONS: false,
          SPEAK: false
        );
      )
     catch(e) 
      console.log(e.stack)
    
  
  /* ... */
  mutee.removeRole(muterole.id).then(() => 
    message.delete()
    /* ... */
  );

// Mute.js
/* ... */
exports.run = async(client,message,args) => 
  /* ... */
  let mutee = message.mentions.members.first() || message.guild.members.get(args[0])
  if (!mutee) return message.channel.send("You did not mention a user!")
  let reason = args.slice(1).join(" ")
  if (!reason) reason = "No reason."
  let muterole = message.guild.roles.find(r => r.property === "Muted")
  if (!muterole) 
    try 
      muterole = await message.guild.createRole(
        name: "Muted",
        color: "#514f48",
        permissions: []
      )
      message.guild.channels.forEach(async(channel, id) => 
        await channel.overwritePermissions(muterole, 
          SEND_MESSAGES: false,
          ADD_REACTIONS: false,
          SPEAK: false
        );
      )
     catch(e) 
      console.log(e.stack)
    
  
  /* ... */
  mutee.addRole(muterole.id).then(() => 
    message.delete()
    /* ... */
  );

(除非需要,否则所有不必要的部分都被剪掉了)

我在运行%mute [user] 时所期望的结果是使用户静音,它确实做到了。我对%unmute [user] 的期望结果当然是取消用户静音,它不会取消用户静音,而是继续执行“then”语句,该语句只有在成功取消用户静音时才会运行。没有打印错误或任何错误,所以我一点也不明白这个问题。

【问题讨论】:

【参考方案1】:
let muterole = message.guild.roles.find(r => r.property === "Muted")

property 不是 Role 的属性。因此,muterole 在每次命令执行时都未定义,从而导致创建另一个“静音”角色。然后使用这个新角色角色代替旧角色,让用户使用旧角色。

比较 Role.name 的预期行为。

let muteRole = message.guild.roles.find(r => r.name === "Muted")

【讨论】:

谢谢,我找这个很久了,一直就在我面前哈哈,

以上是关于Discord.JS 能够添加角色但无法删除角色?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Discord.js 检测到添加的特定角色时删除另一个角色

无法添加角色,Discord.js

discord.js - 机器人不会添加角色:TypeError:无法读取未定义的属性“添加”

Discord.js 使用 Express 添加角色 |无法读取未定义的属性“添加”

Discord.js - 删除所有包含角色的用户的命令

如何在 V13 中为 discord.js 上的成员分配角色?