Всякий раз, когда я реагирую на встраивание, он отправляет двойные сообщения. [DiscordAPIError: неизвестное сообщение]

#javascript #discord.js

#javascript #discord.js

Вопрос:

У меня есть команда waifu, где она получает изображение и имя и помещает его во встраивание, а затем реагирует с помощью 💖 emoji. Я хотел сделать так, чтобы первый человек, который нажмет на эмодзи, получал waifu.

 const { Client, MessageEmbed, ReactionCollector} = require('discord.js');
const {
    prefix
} = require('../../config');
const superagent = require('superagent');
const {
    urlencoded
} = require('body-parser');


module.exports = {
    name: 'waifu',
    category: 'waifu',
    description: 'Random Waifu',
    usage: `${prefix}waifu`,
    perms: 'Send Messages',
    cooldown: 5,
    run: async (bot, message, args) => {

        const rating1 = 10
        const rating2 = Math.floor(Math.random() * rating1)
        var rating = rating2

        const decimals1 = 100
        const decimals2 = Math.floor(Math.random() * decimals1)
        var decimals = decimals2

        const compatibility1 = 100
        const compatibility2 = Math.floor(Math.random() * compatibility1)
        var compatibility = compatibility2

        const {
            waifuID
        } = require("../../Database/WaifuNameDB.json")

        let randW = Math.floor(Math.random() * Object.keys(waifuID).length)
        let randomWaifu = waifuID[randW]

        let embed2 = new MessageEmbed()
            .setTitle(`🎀${randomWaifu.names}🎀`)
            .addField("Claims:", `${randomWaifu.claims}`)
            .addField("Rating:", `${rating}.${decimals}/10 ⭐`)
            .setImage(`${randomWaifu.img_url}`, innerHeight = '500', innerWidth = '500')
            .setColor('#f095d1')
            .setFooter(`| Powered by: @Twintails🎀 API `, `https://64.media.tumblr.com/1a1c3bcc08b5a048b90139a56fe7f415/tumblr_o9ku1rVS8z1vnqjx7o2_250.png`)

        var mg = await message.channel.send(embed2);
        
        mg.react('💖')

        message.delete()

        bot.on('messageReactionAdd', async (reaction, user) => {
            if (reaction.mg) await reaction.mg.fetch();
            if (reaction) await reaction.fetch()
            if (user.bot) return;
            if (reaction.emoji.name == "💖") {

                message.channel.send(`${randomWaifu.names} was claimed!`)

                mg.delete()
            if(user = message.author) return;

            }
        })
        
    }   
}
  

Это работает, но если, например, я делаю /waifu, он отправляет встраивание и говорит, что было заявлено (waifuname), но всякий раз, когда я снова делаю / waifu, все то же самое, но когда я нажимаю кнопку react, он говорит, что были заявлены предыдущий и текущий waifu.
https://aws1.discourse-cdn.com/business6/uploads/glitch/original/2X/9/98363d9496747899fe23698cb0f98846b1e7136c.jpeg

(Умару Дома был предыдущим вайфу, который я запустил)

Это также выдает ошибку: (node:9964) UnhandledPromiseRejectionWarning: DiscordAPIError: Unknown Message

Пожалуйста, помогите, если можете!

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

1. можете ли вы объяснить /waifu подробнее? Я не понимаю, что вы имеете в виду, это та же строка внутри оператора require, которая захватывает json?

2. Я не думаю, что что-то не так с командой json или / waifu вообще, это только часть утверждения, которая испорчена.

3. Рассматриваемый код — это функция messageReactionAdd . (Это то, что я думаю)

4. Все, что я хочу, чтобы это делало, это тот, кто первым нажимает 💖, получает waifu, а в чате написано: HK married <имя waifu>

5. о /waifu — это команда, которую вы вводите в чате discord, на которую реагирует ваш бот

Ответ №1:

Я нашел способ исправить это для всех!

 bot.on('messageReactionAdd', (messageReaction, user) => {
            
            if(user.bot) return;
            const {
                message,
                emoji
            } = messageReaction;

            if (emoji.name === "💖") {
                if (!message.id === mg.id) return;
                if (message.id === mg.id) {

                    mg.delete()
                    message.channel.send(`${randomWaifu.names} was claimed!`)
                }
            }
        });