discord. js - удалить указанную c роль у всех участников - PullRequest
4 голосов
/ 14 июля 2020

Я пытаюсь лишить многих людей роли в моей гильдии. Тем не менее, не все в гильдии имеют эту роль, и их количество большое .

message.guild.members.cache.forEach(member => {
  member.roles.remove("12345678901234");
});

Этот код работает, но неэффективен. Приведенный выше код очень медленный. У вас есть лучший код? Спасибо!

Ответы [ 2 ]

4 голосов
/ 14 июля 2020

Я бы удалил роль, а затем создал бы ее снова.

const role = message.guild.roles.cache.get("RoleID");
message.guild.roles.create({
data: {
name: role.name,
color: role.color,
hoist: role.hoist,
position: role.position,
permissions: role.permissions,
mentionable: role.mentionable
}
})
role.delete('I had to.')

Это работает очень быстро, намного быстрее, чем захват каждого члена вручную и удаление роли, особенно на большом сервере.

2 голосов
/ 14 июля 2020
const Role = message.guild.roles.cache.get("RoleID");
Role.members.forEach((member, i) => { // Looping through the members of Role.
    setTimeout(() => {
        member.roles.remove(Role); // Removing the Role.
    }, i * 1000);
});

Я предполагаю, что ваш код работает медленно из-за ограничений API Discord. У вас нет задержек в вашем коде, что означает, что ваш код будет выполнен немедленно.

Код, который я предоставил, будет удалять роль из члена каждые 1 секунду.

Если вы хотите удалить роль сразу, ее нужно удалить. Он будет удален у всех.

...