Возникли проблемы с keyArray при обновлении до discord.js v13

#javascript #node.js #discord.js

Вопрос:

Я кодирую команду сброса рейтинга всех участников, используя djs v13. Я использовал тот же код, но с djs v12, и он работал правильно. Это мой код:

 function resetrankingall() {
        let allmembers = message.guild.members.cache.keyArray();
        for (let i = 0; i < allmembers.length; i  ) {
            let rankuser = message.guild.members.cache.get(allmembers[i]).user;
            const key = `${message.guild.id}-${rankuser.id}`;
            client.points.set(key, 1, `level`); //set level to 0
            client.points.set(key, 0, `points`); //set the points to 0
            client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing sure
            client.points.set(key, "", `oldmessage`); //set old message to 0
        }
        const embed = new Discord.MessageEmbed()
        .setColor(embedcolor)
        .setDescription(`Successfully resetted everyone`)
        message.reply({ embeds:  });
 

Но когда я обновляюсь до djs v13, появляется эта ошибка:

  let allmembers = message.guild.members.cache.keyArray()
                                                     ^
TypeError: message.guild.members.cache.keyArray is not a function

       
 

Я провел небольшое исследование документа djs и нашел это:

нажмите, чтобы увидеть изображение

Поэтому я попытался заменить keyArray() на keys (), и ошибка исчезла, но, к сожалению, команда тоже не сработала. Мой код после замены:

 function resetrankingall() {
        let allmembers = message.guild.members.cache.keys()
        for (let i = 0; i < allmembers.length; i  ) {
            let rankuser =  message.guild.members.cache.get(allmembers[i]).user;
            const key = `${message.guild.id}-${rankuser.id}`;
            client.points.set(key, 1, `level`); //set level to 0
            client.points.set(key, 0, `points`); //set the points to 0
            client.points.set(key, 4000, `neededpoints`) //set neededpoints to 0 for beeing sure
            client.points.set(key, "", `oldmessage`); //set old message to 0
        }
        const embed = new MessageEmbed()
            .setColor(embedcolor)
            .setDescription(`Successfully resetted everyone`)
        message.reply({ embeds:  });
 

Бот все еще отвечает вставкой, когда я запускаю команду, но она не работает (рейтинг everbody все еще не сброшен). Пожалуйста, помоги мне, тисм!

Комментарии:

1. Можете ли вы уточнить, какова ваша цель для внедрения и как выглядит текущий результат

Ответ №1:

Я решил эту проблему, заменив какую-то строку кода:

 async function resetrankingall() {
        const allGuildMembers = await message.guild.members.fetch();
        for (const guildMember of allGuildMembers.values()) {
            const key = `${message.guild.id}-${guildMember.user.id}`;
            client.points.set(key, 1, `level`); //set level to 0
            client.points.set(key, 0, `points`); //set the points to 0
            client.points.set(key, 4000, `neededpoints`) //set neededpoints to 0 for beeing sure
            client.points.set(key, "", `oldmessage`); //set old message to 0
        }
        const embed = new MessageEmbed()
            .setColor(embedcolor)
            .setDescription(`Successfully resetted everyone`)
        message.reply({ embeds:  });
 

Это работает так, как и ожидалось. Проблема может быть связана с различиями между диджеями v12 и v13. Спасибо всем, что прочитали мой вопрос.

Комментарии:

1. Если это решило вашу проблему, пожалуйста, отметьте это как подтвержденный ответ, чтобы люди знали, что вы устранили проблему

2. Там было написано, что я могу отметить это завтра