检测成员是否具有角色



我正在构建一个Discord机器人,更具体地说,是一个rolecolor命令。我制作了这个命令的一个版本,它起了作用。唯一的问题是它的效率非常低,大约花了5分钟才做出反应。这是因为在执行任何操作之前,机器人必须检查很多"如果"语句和其他内容。这个文件有129K+行,我的整个编辑程序都滞后了。我现在有了一个新的计划,可能效率高得多:

机器人程序检查成员是否有任何以"开头的角色;SRC-";。SRC的意思是服务器角色的颜色,只是每个角色都有一个专门用于修饰的名称。我所有的颜色角色名称都以";SRC-名称";如果检测到任何,请删除它们。等待这个过程,然后添加新的颜色。我有205个颜色的角色。我可以做:

message.guild.members.cache
.get(user.id)
.roles.remove(roleone);
message.guild.members.cache
.get(user.id)
.roles.remove(roletwo);

这是有效的,但话说回来,效率很低。Discord在删除和添加角色方面并没有那么快。当我进行测试时,它没有给我任何错误。尽管如此,我还是觉得出了问题,因为我的角色没有改变。当我运行调试并再次检查时,角色终于更新了。更新之前只需要一段时间。我希望这个更有效率。以下是一些代码示例:

添加角色,删除角色后:

if (args[0] === "1") {
message.guild.members.cache
.get(user.id)
.roles.add(roleone);
message.channel.send(errmsg);
console.log(logmsg);
else if (args[0] === "2") //etc

所以我的问题是,有人知道如何检测成员是否有任何以name开头的角色,以便只能删除这些角色吗?

.remove()采用RoleResolvableRoleResolvables的Array或RoleResolvables的Collection。您可以过滤角色并在中传递它

const member = message.guild.members.resolve(user.id)
const roles = member.roles.cache.filter(r => r.name.startsWith(`SRC -`))
await member.roles.remove(roles) // remove all roles from the member that start with "SRC -"

最新更新