Роли реакции Разлад JS

#javascript #discord #discord.js #chatbot

Вопрос:

Я пытаюсь закодировать роли реакции в своем боте, но у меня возникли проблемы с идентификаторами сообщений и идентификаторами реакции. Проблема, с которой я сталкиваюсь, заключается в том, что message.id когда я впервые публикую это сообщение, оно как-то отличается от reaction.message.id о том, когда кто-то реагирует на сообщение, даже если это точно такое же сообщение. Есть ли какая-либо причина, по которой идентификатор сообщения каким-то образом меняется с момента публикации сообщения на реакцию пользователей? Вот мой код.

 async function ReactionRoles(client){

    client.on("messageReactionAdd", async (reaction, user) => { 

        acceptablerankemojis = ["Radiant_Valorant", "Immortal_Valorant", "Diamond_Valorant", "Platinium_Valorant", "Gold_Valorant", "Silver_Valorant", "Bronze_Valorant", "Iron_Valorant"]

        if (reaction.message.partial){await reaction.message.fetch()};
        if (reaction.partial){await reaction.fetch()};
        if (user.bot == true) {return};
        if (!reaction.message.guild) {return};
        if (acceptablerankemojis.includes(reaction.emoji.name) == false){
                
            user.send(`**That is not a valid reaction, please only use the reactions listed.**`)
            reaction.remove().catch(error => {

                console.log("There was an error removing the reactions.")
            })
        }

        const getMessage = await reactionScheme.find({

        }, {
    
            name: 1,
            guildId: 1,
            channelId: 1,
            messageId: 1
        })

        getMessage.forEach(async element => {

            console.log("Arrived between")
            console.log(element.messageId)
            console.log(reaction.message.id)
            
            if (element.messageId == reaction.message.id){

                console.log("Arrived2")
                var name = element.name
                var guildId = element.guildId
                switch (name){

                    case "ValorantRanks":
                        switch(guildId){

                            case "814021508052942870":

                                console.log("Arrived 3")
                                const radiantrole = reaction.message.guild.roles.cache.find(role => role.name === "Radiant");
                                const immortalrole = reaction.message.guild.roles.cache.find(role => role.name === "Immortal");
                                const diamondrole = reaction.message.guild.roles.cache.find(role => role.name === "Diamond");
                                const platinumrole = reaction.message.guild.roles.cache.find(role => role.name === "Platinum");
                                const goldrole = reaction.message.guild.roles.cache.find(role => role.name === "Gold");
                                const silverrole = reaction.message.guild.roles.cache.find(role => role.name === "Silver");
                                const bronzerole = reaction.message.guild.roles.cache.find(role => role.name === "Bronze");
                                const ironrole = reaction.message.guild.roles.cache.find(role => role.name === "Iron");
    
                                switch(reaction.emoji.name){

                                    case "Radiant_Valorant":
                                    await reaction.message.guild.members.cache.get(user.id).roles.add(radiantrole)
                                    break
                                    case "Immortal_Valorant":
                                    await reaction.message.guild.members.cache.get(user.id).roles.add(immortalrole)
                                    break
                                    case "Diamond_Valorant":
                                    await reaction.message.guild.members.cache.get(user.id).roles.add(diamondrole)
                                    break
                                    case "Platinium_Valorant":
                                    await reaction.message.guild.members.cache.get(user.id).roles.add(platinumrole)
                                    break
                                    case "Gold_Valorant":
                                    await reaction.message.guild.members.cache.get(user.id).roles.add(goldrole)
                                    break
                                    case "Silver_Valorant":
                                    await reaction.message.guild.members.cache.get(user.id).roles.add(silverrole)
                                    break
                                    case "Bronze_Valorant":
                                    await reaction.message.guild.members.cache.get(user.id).roles.add(bronzerole)
                                    break
                                    case "Iron_Valorant":
                                    await reaction.message.guild.members.cache.get(user.id).roles.add(ironrole)
                                    break
                                }
                            break
                        }
                    break
                }
            }
        });
    })
} 
 

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

1. Что такое определение reactionScheme ?

2. reactionScheme-это схема из MongoDB, которую я использую для хранения идентификатора гильдии, идентификатора канала и идентификатора сообщения