代码无法编辑现有角色的权限

时间:2018-12-26 09:11:53

标签: discord.js

我正在尝试编写一个机器人,该机器人可以编辑角色“ LFT”的许可权,并在提及该角色时做出其可提及的许可权false。但是,该代码不执行任何操作。我刚得到一个DeprecationWarning

如果有人可以帮助我,那将真的很棒。

let lftrole = message.guild.roles.find("name", "LFT");
if (message.content.includes('@LFT')) {

  lftrole.edit({
    mentionable: false
  });
  console.log(`Role mentionable: False`);

  .then(
    setTimeout(() => {
      let lftrole = message.guild.roles.find("name", "LFT");

      lftrole.edit({
        mentionable: true
      });
      console.log(`Role mentionable: True`);
    }, 30000)
  );
}

1 个答案:

答案 0 :(得分:1)

您的代码不起作用,因为您正在检查message.content是否包含'@LFT':提及的内容呈现为@RoleName,但对于漫游器来说,它们看起来像<@&RoleID>
您可以尝试解析该模式,但是使用Message.mentions会更容易。我会这样:

let lftrole = message.guild.roles.find("name", "LFT");

function changeRole(value = true) {
  lftrole.edit({
    mentionable: value
  });
  console.log(`LFT role mentionable: ${value}`);
}

if (message.mentions.roles.has(lftrole.id)) {
  changeRole(false);
  setTimeout(changeRole, 30000);
}

注意:您获得的DeprecationWarning来自使用Collection.find()查找角色的时间。不建议使用的方法使您可以使用返回一个元素是否可以接受的函数:这​​样,您可以组合更多条件。方法如下:

// Instead of using:
let role = guild.roles.find("name", "myRole");

// You can use:
let role = guild.roles.find(r => r.name == "myRole");
// This is useful when you want to check for multiple things, 
// or if you want to use other variables from your code
let role = guild.roles.find(r => {
  if (otherVariable) return r.name == "myRole";
  else return r.name == "myRole" && r.mentionable;
});