Как создать код, который удаляет роли людей случайным образом по позиции гильдии - PullRequest
0 голосов
/ 10 мая 2019

Я разрабатываю бота, в котором с заданным интервалом, как каждый час, бот выбирает случайного пользователя и удаляет из него роль, для этого он использует позиционирование на стороне. Проблема была в том, что я не смог найти функцию в Discord.JS, у которой было свойство для позиции члена гильдии на стороне.

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

      var thatguild = message.guild.id.find(`576463944298790929`);
      thatguild.fetchMembers();

    setInterval(function() {
      let sizes = thatguild[Math.floor(Math.random() * thatguild.members.size())];
      if(thatguild.member.id == `329023088517971969` || `538628353079508992`)
      return(thatguild.member.removeRole('576464298088333323'))
    }, 1000) 

Я ожидаю, что бот будет случайным образом выбирать пользователя по позиции и удалять роль из участника. Что я на самом деле получаю, так это код и никакой способ узнать, работает он или нет.

1 Ответ

0 голосов
/ 14 мая 2019

Объяснение:

Давайте рассмотрим, что нам нужно сделать, если мы хотим достичь того, чего вы хотите.

  1. Приобретите нужную гильдию.
    • Набор гильдий (GuildStore в главной), который обрабатывается клиентом, доступен с Client.guilds.
    • Чтобы найти значение по его ключу, используйте Map.get().
    • Чтобы найти значение по другому свойству или проверить выражение, используйте Collection.find().
    • Чтобы просто использовать гильдиюсообщение было отправлено в течение события message, используйте message.guild.
  2. Получите нужную роль.
    • Набор ролей в гильдии (GuildMemberRoleStore в главном), который обрабатывает клиент, доступен с Guild.roles.
    • См. Параметрыранее перечислены для получения значения из коллекции.
  3. Выберите случайный член.
    • Коллекция членов гильдии (GuildMemberStore в мастер) доступна с Guild.members.
    • Перед выбором участника, необходимо ограничить возможные варианты.тем, у кого есть роль, используйте Collection.filter().
    • . Чтобы выбрать случайное значение из коллекции, используйте Collection.random().
    .
  4. Удалить роль из участника.
    • Чтобы удалить роль из участника, используйте GuildMember.removeRole() (GuildMember.roles.remove() в master).
    • Если что-то идет не так, сделайтеобязательно перехватите возвращенное обещание с помощью оператора try...catch или catch().
  5. Установите интервал.
    • Чтобы установить интервал, используйте setInterval().
    • В случае, если что-то пойдет не так, присвойте его переменной, чтобы его можно было очистить позже.

Код:

function roleRoulette(guild, role) {
  const possible = guild.members.filter(m => m.roles.has(role.id));
  if (possible.size === 0) return clearInterval(interval);

  const member = possible.random();

  member.removeRole(role)
  // MASTER: member.roles.remove(role)
    .then(() => console.log(`Removed ${role.name} from ${member.tag}.`))
    .catch(err => {
      console.error(err);
      clearInterval(interval);
    });
}

const guild = client.guilds.get('576463944298790929');
if (!guild) return;

const role = guild.roles.get('576464298088333323');
if (!role) return;

const interval = setInterval(roleRoulette(), 60 * 1000, guild, role);

Discord.js Документы:

стабильный
мастер

...