保存提到的用户的角色

时间:2018-12-20 20:44:06

标签: discord.js

我正在尝试发出一条tempmute命令,我遵循了一个在线教程,该教程可以正常工作...但是我自己的服务器上的用户具有多个角色,并且即使他们收到“静音”角色,这些角色也可以使他们交谈。 / p>

有什么方法可以保存提到的用户的所有角色,然后删除并添加这些角色?

我已经尝试创建一个新的let变量

let roleHistory = tomute.member.roles;

,然后使用以下方法添加和删除它们:

await(tomute.removerole(roleHistory));

tomute.addRole(roleHistory);

但这没用

module.exports.run = async (bot, message, args) => {

  let tomute = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));

  if(!tomute) return message.reply("Couldn't find user.");
  if(tomute.hasPermission("MANAGE_MESSAGES")) return message.reply("Can't mute them!");
  let muterole = message.guild.roles.find(`name`, "muted");

  if(!muterole){
    try{
      muterole = await message.guild.createRole({
        name: "muted",
        color: "#000000",
        permissions:[]
      })
      message.guild.channels.forEach(async (channel, id) => {
        await channel.overwritePermissions(muterole, {
          SEND_MESSAGES: false,
          ADD_REACTIONS: false
        });
      });
    }catch(e){
      console.log(e.stack);
    }
  }

  let mutetime = args[1];
  if(!mutetime) return message.reply("You didn't specify a time!");

  await(tomute.addRole(muterole.id));

  message.reply(`<@${tomute.id}> has been muted for ${ms(ms(mutetime))}`);

  setTimeout(function(){
    tomute.removeRole(muterole.id);

    message.channel.send(`<@${tomute.id}> has been unmuted!`);
  }, ms(mutetime));

}

我希望机器人在超时后取消角色,使用户保持温柔并把角色还给我。

1 个答案:

答案 0 :(得分:0)

您的尝试是在正确的轨道上,但是您错过了一个小细节。公会成员拥有您使用的方法addRoleremoveRole。但是,这些方法仅用于添加/删除单个角色。

首次使用let roleHistory = tomute.member.roles;获取用户角色时,它将返回Collection个角色。如果随后尝试使用removeRole(roleHistory),它将尝试删除一个等于完整集合(显然不存在)的单个角色。

要使其正常工作,您需要使用addRolesremoveRoles方法来添加/删除整个集合。因此您的代码将是:

let roleHistory = tomute.roles;

// Removing all the roles
await(tomute.removeRoles(roleHistory));

// Adding all the roles
tomute.addRoles(roleHistory);

P.s。由于您的tomute变量已经是用户,因此您需要更改代码以将角色从let roleHistory = tomute.member.roles;更改为let roleHistory = tomute.roles;