【问题标题】:Saving roles from mentioned user保存提到用户的角色
【发布时间】:2019-05-21 09:27:10
【问题描述】:

我正在尝试制作一个 tempmute 命令,我遵循了一个在线教程,该教程有效...但是我自己的服务器有多个角色的用户,即使他们收到“静音”角色,这些角色也允许他们交谈。

有没有办法保存提到的用户的所有角色,然后删除和添加这些角色?

我已经尝试过创建一个新的 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));

}

我希望机器人在超时后将角色带走、临时用户并归还角色。

【问题讨论】:

    标签: discord.js


    【解决方案1】:

    您的尝试是在正确的轨道上,但您错过了一个小细节。公会成员有一个您使用的方法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);
    

     

    附:由于您的 tomute 变量已经是用户,您需要更改代码以将角色从 let roleHistory = tomute.member.roles; 获取到 let roleHistory = tomute.roles;

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多