如何在discord bot上删除所有角色并添加一个角色,然后删除添加的角色并还原以前的角色

问题描述 投票:0回答:2

我有一段代码供不和谐的bot删除特定的命名角色,并在特定时间内添加一个名为“ muted”的角色。基本上,服务器只能具有3个角色,一个可以发出命令,一个具有正常权限的“正常”等级,然后是一个“静音”角色。我的代码专门删除了普通角色,并添加了静音角色,因此他们没有任何权限。

好吧,我将我的机器人添加到了具有3个以上角色的另一台服务器上,我决定给每个人正常的角色,同时也将其设置为静音角色。当我运行该命令时,它可以工作,但是由于人们还有其他角色,因此即使将静音角色放在首位,它也可以继续讲话。

我的问题是,有一些代码可以删除所有角色并添加静音角色。静音期结束后,静音角色将被删除,而其先前的角色将被恢复?

javascript discord discord.js roles
2个回答
0
投票

我不确定是否有更有效的方法来执行此操作,但是您可以尝试以下操作:

循环浏览所有角色,并将其保存到文件甚至数据库中,一旦时间用完,请删除静音的角色并遍历已保存角色的列表以将其重新添加。


0
投票

最简单的方法是从用户那里获取角色列表,清除他们的角色,然后申请Muted角色。然后,您想缓存他们以前的角色,或者甚至将数据存储在数据库中,以防机器程序掉线,这样,一旦重新启动,您就可以获取数据并继续进行操作。

这是我即时编写的一个简单示例。由于我的方法只是用于快速演示,因此您可能希望缓存角色与我做的缓存有所不同,我强烈建议将数据保存到数据库或什至是.json文件之类。

let cachedUserRoles = {};

function addMutedRole(guildId, userId, roleId) {
    //Get the guild the user is apart of
    let guild = client.guilds.get(guildId);
    //Specify the user from the guild
    let guildMember = guild.members.get(userId);

    //Cache the users existing roles so we can restore them later
    cachedUserRoles[userId] = guildMember.roles.cache
    //Remove all roles from user
    guildMember.roles.set([])
        //Add the muted role after all roles have been removed with an array of the single role ID
        .then(member => member.roles.add([roleId]))
        //Catch and report any errors that might happen
        .catch(console.error)
}

function restoreRoles(guildId, userId) {
    //Get the guild the user is apart of
    let guild = client.guilds.get(guildId);
    //Specify the user from the guild
    let guildMember = guild.members.get(userId);
    //Get and set the user's previouse roles from cachedUserRoles and error log if anything goes wrong
    guildMember.roles.set(cachedUserRoles[userId]).catch(console.error)
}
© www.soinside.com 2019 - 2024. All rights reserved.