保存提到用户的角色

Posted

技术标签:

【中文标题】保存提到用户的角色【英文标题】: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));


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

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于保存提到用户的角色的主要内容,如果未能解决你的问题,请参考以下文章

当静音用户离开服务器时,静音角色保存到静音用户

Android根据保存在xampp中的用户角色定向到新页面

在Angular中->如何使用基于角色的访问权限检查用户是不是具有权限,并将角色保存在数据库中

如何在 Spring Boot 中使用 Thymeleaf 保存角色?

springboot11-security02FromDB 权限管理(用户信息和角色信息保存在数据库)

Django:在模型保存中获取当前用户