DiscordJS Bot Réaction message

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour,

Je fais un BOT pour un serveur Discord et j’ai besoin de récupérer les réaction d’un message que le bot à écrit précédemment. Pour cela j’utilise un fichier texte dans lequel j’écris l’ID de mon message pour la sauvegarder quand le Bot s’arrête. Une fois le bot réactivé, je voudrais réutiliser cette ID pour trouver le message et récupérer la liste des utilisateurs qui ont réagit avec les deux première réactions. Or cela ne marche pas et je ne comprends pas comment il faut faire. Je vous mets le code en entier pour que vous saisissiez l’entièreté mais seule la commande "dr" est utilisé pour faire des test. Ce qui sera écrit dans "dr" sera ensuite copié dans la commande pr+ "début". Si vous avez besoins de plus de détails ou bien que vous avez le temps de m’aidez en vocal rejoignez moi ici https://discord.gg/PzXfKHU .

const Discord = require('discord.js')
const BOT = new Discord.Client()
var fs = require('fs')


BOT.login('VousCroyezQueJ'aiMisLeToken?')

BOT.on('ready', function(){
    pr = "§"
    var array = fs.readFileSync('DispoID.txt').toString().split("\n");
    for(i in array) {
        console.log(array[i]);
    }
    DispoID = array[1]
    return DispoID
    console.log(DispoID)
})

BOT.on('message', function(message){


    if (message.content === pr +'ping'){
        message.channel.send('Pong')
    }

    if (message.content === pr + "cloé"){
        message.channel.send("Wouf,Wouf! :dog:")
    }
    
    if (message.content.toLowerCase().startsWith("dr")){
        
        MessageDispo = message.channel.messages.fetch(DispoID.toString)
        .then(message => console.log(message.content))
    }

    if(message.member.permissions.has("ADMINISTRATOR") || message.member.roles.cache.some(role => role.name === 'Admin Temporaire')){

        if(message.content.toLowerCase().startsWith(pr + "dispo")){
            message.delete()
            args = message.content
            chn = args.substring(7)
            message.channel.send("@everyone Qui pense être disponible vendredi "+ chn + " ? \nRéaction possible a ce message :\n:white_check_mark: - Vous Pouvez\n:part_alternation_mark: - Vous n'êtes pas sur\n:negative_squared_cross_mark:- Vous ne pouvez pas\n\n(évitez de répondre plusieurs trucs pcq c'est pas hyper pratique m'voyez?)").then(sentMessage => {
                sentMessage.react("✅")
                sentMessage.react("〽️")
                sentMessage.react("❎")
            })
        }

        if(message.member.id === "706131839689162761"){
            if (message.content.startsWith("@everyone Qui pense être disponible vendredi")){
                var DispoID = message.id
                var logger = fs.createWriteStream('DispoID.txt', {
                })
                logger.write(DispoID)
                logger.end
                return DispoID
            }
        }


        if (message.channel.id === "705185425878417470"){
            if (message.content.toLowerCase(pr + "fin")){
                message.channel.send("@everyone Comment avez vous trouver la soirée? Notez la sur 10 !").then(sentMessage => {
                    sentMessage.react("1️⃣")
                    sentMessage.react("2️⃣")
                    sentMessage.react("3️⃣")
                    sentMessage.react("4️⃣")
                    sentMessage.react("5️⃣")
                    sentMessage.react("6️⃣")
                    sentMessage.react("7️⃣")
                    sentMessage.react("8️⃣")
                    sentMessage.react("9️⃣")
                    sentMessage.react("🔟")
                })

                let RoleListe = message.guild.roles.cache.find(r => r.name === "DJ")
                list = RoleListe.members
                list.forEach((member, key) => member.roles.remove('703311429155029162'))
                
                let RoleListe2 = message.guild.roles.cache.find(r => r.name === "Invités")
                list = RoleListe2.members
                list.forEach((member, key) => member.roles.remove('703349081577357333'))

                message.delete()
            }

            if(message.content.toLowerCase(pr + 'début')){
                ReactionListe = message.reactions.cache.get(DispoID)
                //Checkez les réaction du message
                //Donnez le rôle a toute ceux qui on répondu
                message.channel.send("@everyone La soirée vient de commencer, nous vous attendons :thumbsup: !")
                message.delete()
            }
        }

        if(message.channel.id === '703349219003727933'){
            if (message.content.toLowerCase().startsWith(pr + "dj")){
                const member = message.mentions.members.first()
                let RoleListe = message.guild.roles.cache.find(r => r.name === "DJ")
                member.roles.add(RoleListe)
                message.delete()
            }
        }

        if(message.content.toLowerCase().startsWith(pr + "setpréfix")){
            args = message.content
            chn = args.substring(8)
            if (chn.lenght > 1){
                message.channel.send("Préfix trop long")
            }
            if(chn.lenght === 1){
                pr = chn
            }
        }


    }

    if(message.author.id === '706131839689162761'){}
    

    if(message.content.toLowerCase() === "§préfix"){
        message.channel.send ("Préfixe actuel:" + pr)
    }

})


BOT.on("guildMemberAdd", function(member){
})

Bien sympathiquement

Édité par j.riebar

+0 -0

Or cela ne marche pas et je ne comprends pas comment il faut faire.

j.riebar

Un petit conseil pour quand tu demandes de l’aide : quand quelque chose ne fonctionne pas, explique ce qui bloque. Par exemple, un message d’erreur ou même ce qui a fonctionné si ça a été partiel ^^ .

J’utilise un fichier texte dans lequel j’écris l’ID de mon message pour la sauvegarder quand le Bot s’arrête. Une fois le bot réactivé, je voudrais réutiliser cette ID pour trouver le message et récupérer la liste des utilisateurs qui ont réagit avec les deux première réactions. Or cela ne marche pas et je ne comprends pas comment il faut faire.

j.riebar

Tu comptes ne sauvegarder qu’un message maximum ? Sinon, tu souhaites lire les résultats jusqu’à une date limite ou non ? Car avec le système de récupérer le message puis les réactions après coup, il y a le risque que le résultat soit modifié au fil du temps.


Je n’ai lu le code qu’en diagonal. Je m’y attarderai plus quand je comprendrai exactement ce qui est voulu ;) .

+0 -0
Auteur du sujet

Chaque semaine, il y a un nouveau message que j’envoie et qui remplace dans le fichier texte l’ID du message précédent par l’ID du nouveau message. Ensuite durant la semaine, les utilisateurs ajoutent des réactions. Ensuite à l’instant T ou je rentre la commande (ici pr + "Début"), le bot check les réaction qui sont présente sous le message et me renvoie la liste des utilisateurs ayant répondu avec un certains emoji. Pour l’instant, il n’arrive même à récupérer le contenu du message. J’ai fait le test de récupérer le contenu avec la vraie ID (directement écrite) puis avec la variable contenant l’ID enregistré dans le fichier texte mais cela ne fonctionne que si je mets directement l’ID (sans passer par la variable). Lorsque je tentais de lire le contenu du message avec l’ID présent dans la variable, la console me revoyait "Undifined" .Donc je pense que c’est la variable DispoID qui pose problème mais j’ai pompé (en changeant a ma sauce sur ce que je comprenais) la partie de code qui écrit dans un fichier texte sur internet donc je ne comprends pas complètement ce que j’ai fait. J’espère que ca répond a ta question et si tu as besoin de contact vocal le discord est toujours présent ^^

+0 -0

Tu récupères bien l’ID au démarrage du bot ?

BOT.on('ready', function(){
    pr = "§"
    var array = fs.readFileSync('DispoID.txt').toString().split("\n");
    for(i in array) {
        console.log(array[i]);
    }
    DispoID = array[1]
    return DispoID
    console.log(DispoID)
})

As-tu essayé d’initialiser la variable en dehors de ce bloc ? On dirait que le problème vient du fait qu’il s’agisse d’une variable locale.

PS : la ligne return DispoID ne sert à rien car elle n’exécute rien et que BOT.on() ne stock rien.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte