Discord. js - проверка списка бота - PullRequest
0 голосов
/ 21 марта 2020

В настоящее время я разрабатываю бот-диск, использующий discord.js для личного пользования.

Вот небольшой контекст: на моем сервере мы организуем события с 30-40 участниками в голосовом канале (у всех из них есть роли, соответствующие событиям), и нам нужно проверить, кто отсутствует , Таким образом, в основном бот должен сравнить 2 списка, участников с ролью события, которые связаны по голосовому каналу, и еще один с теми, у кого есть роль, но не подключены по назначенному голосовому каналу.

Я сделал В некоторых исследованиях у меня есть основы того, как это должно работать (получение идентификатора голосового канала, где находится администратор, и получение роли от команды). Однако это сложнее, чем я думал, и мне нужна помощь.

Вот мой «код»:

client.on('message', message => {
    if(message.content == "check"){
        //role restriction
        if(!!message.member.roles.cache.has("admin")) return console.log("Fail from "+message.author.username);
        else{
            //retreiving the role from command
            var messageArray = message.content.split(" ");
            var command = messageArray[0];
            var args = messageArray.slice(1)
            //finding the correct channel with the gaved ID
            console.log(message.guild.channels.cache
                .find(VoiceChannel => VoiceChannel.id == 618882800950706189))


            //voice channel ID where admin is connected
            //console.log(message.member.voice.channelID);

        };
    };
});

Я буду признателен за каждую помощь, которую я получу:)

1 Ответ

0 голосов
/ 22 марта 2020

Есть несколько вещей, которые вы делаете неправильно: RoleManager, который вы получаете от .cache, возвращает Collection См. Здесь

Коллекция - это массив массивов. кортежей, которые выглядят как [key, value], ключом обычно является идентификатор (строка, которую вы использовали в качестве числа в своем примере кода), а значение представляет собой фактическое значение, в данном случае роль, из того, что, как я понимаю, у вас возникают проблемы получая связанных участников с ролью и участников, которые имеют роль, которые не связаны, я скорректировал ваш код, надеюсь, он даст вам общее представление

client.on("message", message => {
  // This prevents the bot from responding to bots
  if (message.autor.bot) {
    return;
  }

  // ES6 array destructuring + rest spread operator allows us to easily
  // get the first word from an array and keep the rest as an array
  const [command, ...args] = message.content.split(/ +/);

  if (command === "check") {
    // Check if the member has the admin role using Collection#some
    if (!message.member.roles.cache.some(r => r.name === "admin")) {
      return console.log(`Fail from ${message.author.username}`);
    }

    // Attempt to get the channel from the collection using the ID from user input
    // Note that this could be undefined!
    const voiceChannel = message.guild.channels.cache.get(args[0]);

    // Collection of members who have the event role
    const eventMembers = message.guild.members.cache.filter(m =>
      m.roles.cache.some(r => r.name === "event")
    );

    // Collection of members with the event role who are connected
    // Using Collection#filter and Collection#has
    const connectedMembers = eventMembers.members.filter(m =>
      voiceChannel.members.has(m.id)
    );

    // Collection of members with the event role but are not connected
    const disconnectedMembers = eventMembers.members.filter(
      m => !voiceChannel.members.has(m.id)
    );
  }
});
...