#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. Там было написано, что я могу отметить это завтра