#javascript #discord.js #bots
Вопрос:
Я использую трекер приглашений из учебников WOK, и хотя код работает отлично, и я использую обработчик команд, у которого 0 проблем, по какой-то причине бот отвечает несколькими сообщениями вместо 1, как показано на этом изображении:
Вот код, который я использовал для команды invites:
const Discord = require("discord.js")
module.exports = {
commands: 'invites',
callback: (message) => {
const { guild } = message
guild.fetchInvites().then((invites) => {
const inviteCounter = {}
invites.forEach((invite) => {
const { uses, inviter } = invite
const { username, discriminator } = inviter
const name = `${username}#${discriminator}`
inviteCounter[name] = (inviteCounter[name] || 0) uses
})
let replyText = ''
const sortedInvites = Object.keys(inviteCounter).sort((a, b) => inviteCounter[b] - inviteCounter[a])
for (const invite of sortedInvites) {
const count = inviteCounter[invite]
replyText = `n${invite} has invited ${count} member(s)!`
const embed = new Discord.MessageEmbed()
embed.setTitle('Invites: ')
embed.setDescription(replyText)
message.reply(embed)
}
})
}
}
К вашему сведению, в прошлый раз, когда я опубликовал это, я забыл опубликовать код, так что да, это было глупо с моей стороны.
Ответ №1:
Это потому, что вы попали message.reply
в for...of
петлю.
for (const invite of sortedInvites) {
const count = inviteCounter[invite]
replyText = `n${invite} has invited ${count} member(s)!`
const embed = new Discord.MessageEmbed()
embed.setTitle('Invites: ')
embed.setDescription(replyText)
message.reply(embed) //here
}
Вероятно, вы хотели вывести его за пределы цикла, чтобы он отправлял результирующее встраивание после всех итераций.