Partage
  • Partager sur Facebook
  • Partager sur Twitter

ENOENT: no such file or directory, open '...'

    1 avril 2020 à 12:17:55

    Bonsoir tout le monde, 

    Voila j'essaye de coder un bot discord depuis une semaine, tout marchait bien et la je voulais lui ajouter une commande 'warn' qui quand on la tape avec lepseudo de la personne et la raison sa écrit dans un fichier 'warn.json' le pseudo la date et la raison du warn le problème c'est que ce code je le met sur ma raspberry pi et quand je l'excute avec la commande nodejs index.js le bot marche mais quand je l'éxcute avec un service ça ne marche plus. De plus quand je le lance tout simplement avec mon ordinateur sous windows j'ai le meme problème, le bot veut pas se lancer et j'avoue que je comprends pas pourquoi , d'après le mseeage d'erreur on dirait que ça vient de la ligne de commande 8, mais je sais pas quoi faire.  J'espère que vous pourrez m'aider ^^

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    const Discord = require('discord.js');
    const bot = new Discord.Client();
    const config = require('./config.json');
    const fs = require('fs');
    var prefix = '!';
    const warns = JSON.parse(fs.readFileSync('./warns.json'))
    bot.login(config.token);
    bot.on('ready'function(){
    console.log(bot.user.username + ' est connecté !');
    bot.user.setActivity('une classe virtuelle', {type: "WATCHING"});
    })
    bot.on("message"function (message) {
    if (!message.guild) return
    let args = message.content.trim().split(/ +/g)
    if (args[0].toLowerCase() === prefix + "warn") {
    if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send("Vous n'avez pas la permission d'utiliser cette commande")
    let member = message.mentions.members.first()
    if (!member) return message.channel.send("Veuillez mentionner un membre")
    if (member.highestRole >= message.member.highestRole && message.author.id !== message.guild.ownerID) return message.channel.send("Vous ne pouvez pas warn ce membre")
    let reason = args.slice(2).join(' ')
    if (!reason) return message.channel.send("Veuillez indiquer une raison")
    if (!warns[member.id]) {
    warns[member.id] = []
    }
    warns[member.id].unshift({
    reason: reason,
    date: Date.now(),
    mod: message.author.id
    })
    fs.writeFileSync('./warns.json', JSON.stringify(warns))
    message.channel.send(member + " a été warn pour " + reason + " :white_check_mark:")
    }
    if (args[0].toLowerCase() === prefix + "infractions") {
    if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send("Vous n'avez pas la permission d'utiliser cette commande")
    let member = message.mentions.members.first()
    if (!member) return message.channel.send("Veuillez mentionner un membre")
    let embed = new Discord.MessageEmbed()
    .setAuthor(member.user.username, member.user.displayAvatarURL)
    .addField('10 derniers warns', ((warns[member.id] && warns[member.id].length) ? warns[member.id].slice(0, 10).map(e => e.reason) : "Ce membre n'a aucun warns"))
    .setTimestamp()
    message.channel.send(embed)
    }
    })

    Et voici le message d'erreur :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Waiting for the debugger to disError: ENOENT: no such file or directory, open './warns.json'
    at Object.openSync (fs.js:457:3)
    at Object.readFileSync (fs.js:359:35)
    at Object.<anonymous> (c:\Users\Ugo\Bot-Discord\Amae\index.js:8:29)
    at Module._compile (internal/modules/cjs/loader.js:1155:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47
    • Partager sur Facebook
    • Partager sur Twitter
      1 avril 2020 à 21:55:26

      bonjout le fichier 'warns.json' , qui et lu ligne 9 via fs.readFileSync


      n'existe pas où n'est pas trouvé .

      Es tu sûr qu'il se situe bien dans le même dossier que le fichier qui essaie de le lire ?

      La ligne 6 fait un require d'un fichier JSON qui n'a pas l'air de posé problème pourquoi utilisé fs pour lire warns.json est-ce qu'un:

      require('./warns.json') , pourrait suffir à importé le fichier ?

      Si le fichier et bien présent au bon endroit et que le problème persiste tu peut essayé de donné un chemin absolut plutôt qu'un chemin relative:

      const pathResolver = require('path') ;
      
      const warns = JSON.parse(
          fs.readFileSync( pathResolver.join( __dirname , './warns.json'  ) , 'utf-8' )
      ) ;

      si tu ne passe pas d'encodage à readFileSync il te renverra un Object Buffer et pas une String que JSON.parse auras du mal à parser...

      où un équivalent avec require l'idée étant la même:

      const pathResolver = require('path');
      
      const warns = require( pathResolver.join( __dirname , './warns.json'  ) ) ;




      • Partager sur Facebook
      • Partager sur Twitter

      suggestion de présentation.

        4 avril 2020 à 19:02:18

        Désolé de la réponse tardive, entre temps je suis passer sous Linux ^^ . Je viens d'essayer ce que tu m'as envoyé et effectivement sa fonctionne. Merci beaucoup de l'aide :D

        En revanche une dernière chose me pose problème et n'as plus trop rapport avec le JS mais plutôt avec raspberry. En fait j'ai corriger mon programme, quand je le lance avec ' node index.js ' il fonctionne, le fichier warns et bien lu, et il est édité à chaque fois que la commande warn est utilisé. Le seul problème c'est que je passe par un service pour host mon bot. Et quand je le lance avec le service, le fichier warn n'est pas édité et je ne comprends pas pourquoi.

        Tu pourrais m'aider s'il te plaît ?

        • Partager sur Facebook
        • Partager sur Twitter
          5 avril 2020 à 0:30:49

          Il n'est pas édité ?

          Est ce que tu as un log où / et une exception levé ?

          Est ce que ton service as les droit de lecture et écriture sur ton fichier warn.json ?

          Maintenant que tu est passé sur Linux tu peut utilisé CHMOD pour la gestion des droits sur tes fichiers .

          • Partager sur Facebook
          • Partager sur Twitter

          suggestion de présentation.

            8 avril 2020 à 18:00:38

            Non je n’ai aucune log, la commande est bien exécuté, quand je l’exécute je vois dans les logs que tout à fonctionner, mais pourtant le fichier n’est pas édité.

            Le service a bien les droits je t’envoie une capture d’écran 

            PS: Amae est le nom de mon bot :D

            -
            Edité par Swynn 8 avril 2020 à 18:10:27

            • Partager sur Facebook
            • Partager sur Twitter
              10 avril 2020 à 21:46:54

              re bonjour je n'arrive pas vraiment à déterminé d'où vient ce comportement tu peut peut-être tenté de passé un mode plus permissif sur l'écriture de ton fichier au moment ou tu écrit dedans:

              fs.writeFileSync(
              	'./warns.json',
                  JSON.stringify(warns) ,
                  {
                  	mode: 0o777 // mode le plus permisif , valeur par défaut: 0o666
                  }
              ) ;

              mais je suis pas persuadé que ça fonctionne , fs.fileWriteSync Nodejs tu peut check l'écriture sur fichier peut être tu trouveras...

              • Partager sur Facebook
              • Partager sur Twitter

              suggestion de présentation.

                10 avril 2020 à 22:01:39

                Je vais essayer, moi non plus, je pensais que ça venait plutôt du fichier service, car quand j'exécute mon programme en l'état il fonctionne comme il faut. Merci du conseil je  vais me renseigner et je vais essayer ce que tu viens de me suggérer.

                Btw dernière chose je sais j'en demande beaucoup sûrement trop x) mais voilà j'ai aussi un autre problème. Toujours sur le même sujet. J'ai créer une commande ( !infractions ) je sais le nom est claqué mais j'avais pas d'inspiration xD

                Et quand je fais la commande ça m'affiche ça :

                Du coup je suis aller réglé le problème, je suis aller dans le fichier MessageEmbed.js et j'ai supprimer la ligne .flat(2)

                Et maintenant sa m'affiche ça :

                Sauf que c'est censé afficher au moins 5 warns différent parce que je me suis warn 5 fois x')
                Et la ça les affiches pas et je comprends paaaaas :/

                -
                Edité par Swynn 10 avril 2020 à 22:20:41

                • Partager sur Facebook
                • Partager sur Twitter
                  15 avril 2020 à 7:21:57

                  re bonjour je suis pas certains que c'était une bonne idée d'allé modifié les sources de la librairie directement dans le /node_modules/

                  déjà parce que à n'importe quelle mise à jour ( quand tu re feras un npm install ) tu perderas tous ce que tu as modifié ( écrasé par le upgrade ) ,

                  est c'est moyen comme solution au long terme de supprimé la ligne fourni qui plante mdr xD .

                  Ici il y à la feuille de doc d'utilisation de l'object MessageEmbed de discord.js je te conseillerais plûtot d'essayé de trouvé ton erreur en lisant l'utilisation de l'object et de la résoudre sans modifié directement la librairie depuis le dossier node_modules en tous cas.

                  Bonne continuation.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  suggestion de présentation.

                    18 avril 2020 à 23:11:37

                    Ça marche merci beaucoup, et oui je sais que c’est moyen mais je voulais tester pour voir ce que sa faisais x)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    ENOENT: no such file or directory, open '...'

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown