Discord Bot如何删除特定的用户角色

时间:2019-06-18 21:47:37

标签: javascript discord.js

我一直在尝试制作一个机器人,如果用户具有“角色1”,则他输入了“角色2”频道,该机器人应检查自己是否具有“角色1或角色3”中的任何一个,将其从用户中删除然后向用户添加“角色2”。

if (message == 'role 2') {

   var role = message.guild.roles.find("name", "2");


   if(message.member.roles.has('1'))
      {
      console.log('user has role 1');

      await(message.member.removeRole("1"));

      try{
        console.log('removed role 1');
      }catch(e){

      }

 }
   message.member.addRole(role);

 }

这是行不通的,它只是增加角色而没有删除。 这就是我在控制台中得到的:

  

DeprecationWarning:收集#查找:传递一个函数代替DeprecationWarning:收集#查找:传递一个函数代替

如何在添加新角色之前检查用户角色并删除它们。

编辑:此新代码var role = message.guild.roles.find(role => role.name === "2")已修复错误 仍然删除角色命令不起作用

2 个答案:

答案 0 :(得分:1)

我猜在message.guild.roles.find中,您必须传递像message.guild.roles.find(function)这样的函数;我也认为find被弃用了,这意味着已经过时了,取而代之的是更好的解决方案/功能。

答案 1 :(得分:0)

  • 似乎messageMessage对象。您应该比较其content属性,而不是对象本身。
  • 正如Saksham Saraswat所述,您应该将一个函数传递到Collection.find()中。不建议这样做。*
  • Map.has()按键搜索。 Collection使用Discord ID作为其密钥,即Snowflakes。代码中显示的ID不是ID,因此if语句的代码段不会执行。
  • 您编写await(...)的方式是执行一个函数。请参见await关键字上的文档here。请注意,它只能在async functions内部使用。
  • 您没有发现任何被拒绝的Promises。*

*这不会影响代码的当前结果。

实施这些解决方案...

if (message.content === 'role 2') {
  try {
    // message.member will be null for a DM, so check that the message is not a DM.
    if (!message.guild) return await message.channel.send('You must be in a guild.');

    // Find Role 2.
    const role2 = message.guild.roles.find(role => role.name === '2');
    if (!role2) return console.log('Role 2 missing.');

    // If the user has Role 1, remove it from them.
    const role1 = message.member.roles.find(role => role.name === '1');
    if (role1) await message.member.removeRole(role1);

    // Add Role 2 to the user.
    await message.member.addRole(role2);
  } catch(err) {
    // Log any errors.
    console.error(err);
  }
}