保存提到用户的角色
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】:您的尝试是在正确的轨道上,但您错过了一个小细节。公会成员有一个您使用的方法addRole
和removeRole
。但是,这些方法用于添加/删除单个角色。
当您第一次使用let roleHistory = tomute.member.roles;
获取用户角色时,它会返回角色的Collection
。如果您随后尝试使用removeRole(roleHistory)
,它会尝试删除与整个集合相等的单个角色(显然不存在)。
要使其工作,您需要添加/删除整个集合的方法addRoles
和removeRoles
。所以你的代码是:
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;
【讨论】:
以上是关于保存提到用户的角色的主要内容,如果未能解决你的问题,请参考以下文章
在Angular中->如何使用基于角色的访问权限检查用户是不是具有权限,并将角色保存在数据库中
如何在 Spring Boot 中使用 Thymeleaf 保存角色?