我正在尝试发出一条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));
}
我希望机器人在超时后取消角色,使用户保持温柔并把角色还给我。
答案 0 :(得分:0)
您的尝试是在正确的轨道上,但是您错过了一个小细节。公会成员拥有您使用的方法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);
P.s。由于您的tomute
变量已经是用户,因此您需要更改代码以将角色从let roleHistory = tomute.member.roles;
更改为let roleHistory = tomute.roles;