Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2009
    Messages : 45
    Points : 37
    Points
    37
    Par défaut Ajouter et supprimer des éléments dans un fichier JSON
    Bonjour,

    Pour les besoins d'un bot Discord, je cherche à ajouter/retirer des éléments dans un fichier JSON dont voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    [
    	{
    		"message": "641322395944091648",
    		"channel": "434659393548845058",
    		"reactions": [
    			{
    				"emoji": "🎮",
    				"role": "641293549501022234"				]
    			},
    			{
    				"emoji": "🎧",
    				"role": "641392846951153689"
    			}
    		]
    	},
    	{
    		"message": "641322395941234567",
    		"channel": "434659393548841234",
    		"reactions": [
    			{
    				"emoji": "🎲",
    				"role": "641293549501029876"				]
    			},
    			{
    				"emoji": "🎨",
    				"role": "641392846951155432"
    			}
    		]
    	}
    ]
    Voici ce que j'ai fait jusque maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    const roles = require("../data/roles.json");
    const fs = require("fs");
     
    exports.run = async (bot, message, args) => {
    	function checkReactions(e) {
    		for (var { channel, message: message_id, reactions } of roles) {
    			for (var {emoji} of reactions) {
    				emoji = bot.cleanEmojiDiscriminator(e);
    				if (emoji === e) return true;
    			}
    		}
    		return false;
    	}
     
    	function checkMessages(id) {
    		for (var { channel, message: message_id, reactions } of roles) {
    			if (message_id.toString() === id.toString()) return true;
    		}
    		return false;
    	}
    	/* USAGE :
    	!rolereaction add <channel_id> <message_id> <emoji_id> <role id>
    	!rolereaction remove <channel_id> <message_id> <emoji_id> <role id>
    	*/
    	if (!args[0]) {
    		return message.reply(", tu dois préciser une commande.");
    	}
    	var cmd = args[0];
    	if (cmd === "add") { // adds a new rolereaction or a new emoji/role for the specified message in the specified channel
    		if (args[1] && args[2] && args[3] && args[4]) {
    			var channel = await bot.channels.get(args[1].toString()).catch (error => {
    				console.error(error);
    				return message.reply(", l'id du salon n'est pas un ID valide.");
    			});
    			var msg = await channel.fetchMessage(args[2].toString()).catch (error => {
    				console.error(error);
    				return message.reply(", l'id du message n'est pas un ID valide.");
    			});
    			var emoji = bot.cleanEmojiDiscriminator(args[3]); // This returns emoji without starting and ending :
    			var role = await member.guild.roles.find(r => r.id === args[1].toString()).catch (error => {
    				console.error(error);
    				return message.reply(", l'id du rôle n'est pas un ID valide.");
    			});
    			// checks if we already have this message in roles
    			if (checkMessages(args[2]) {
    				// The message was found, checking reactions
    				if (!checkReactions(emoji)) {
    					// This emoji doesn't exist in roles for this message, adding it
    					// TODO
    				} else {
    					// This emoji already exists
    					return message.reply(", cet emoji est déjà utilisé pour ce message.");
    				}
    			}
    			else {
    				// This message doesn't exist. We must create and add the message
    				// TODO
    			}
    		} else return message.reply(", tu dois préciser <id du salon> <id du message> <emoji> <id du rôle>.");
    	}
    	else if (cmd === "remove") {
    		// TODO
    	}
    	else return message.reply(", tu dois utiliser la commande add ou remove.");
    }
     
    exports.help = {
    	name: "rolereaction"
    }
    J'ai placé des // TODO aux endroits où je bloque. Est-ce que quelqu'un pourrait m'expliquer comment faire pour ajouter/retirer les informations au bon endroit afin de pouvoir, ensuite, utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fs.writeFile("./data/roles.json", JSON.stringify(roles), (err) => {
    	if (err) console.error(err);
    });
    Merci d'avance.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    octobre 2011
    Messages
    1 361
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 361
    Points : 2 401
    Points
    2 401
    Par défaut
    Je ne sais pas ce que c'est bot, message, args et tout ça, évidemment. Je peux faire pourtant une illustration exécutable tout seule et écrite un peu ressemblant les idées du module montré que vous pouvez y re-adapter (en élaborant comme nécessaire) plus facilement.
    Code nodejs : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    const roles = require("../data/roles.json");
     
    var cmd, arg, entity, channel;
    arg='434659393548845058';
    entity='&#127910';
    channel=roles.filter((x)=>x.channel==arg);    //retourner un array
     
    cmd='remove';
    if (Object.keys(channel).length!=0) {
        if (Object.keys(channel[0].reactions).length>=2) {
            if (cmd==='remove') {
                delete channel[0].reactions[0].emoji;
                delete channel[0].reactions[1].emoji;
            }
        }
    }
    console.log(JSON.stringify(roles, null, "\t"));
     
    //différente écriture juste pour illustrer qu'on peut écrire différemment pour trouver les clés
    cmd='add';
    if (Object.keys(channel).length!=0) {
        if (Object.keys(channel[0].reactions).length>=2) {
            if (cmd==='add') {
                channel[0]["reactions"][1]["emoji"]=entity;	//ajouter un emoji à l'indice 1 de reactions
            }
        }
    }
    console.log(JSON.stringify(roles, null, "\t"));
    Voilà !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mai 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2009
    Messages : 45
    Points : 37
    Points
    37
    Par défaut
    Merci, c'est tout à fait ce qu'il fallait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JDOM] Ajouter des éléments dans un fichier XML
    Par pitchu dans le forum XML
    Réponses: 14
    Dernier message: 25/12/2015, 11h06
  2. Supprimer des éléments dans la feuille de propriétés
    Par Deciprog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/03/2008, 22h34
  3. [CSV] Ajouter et supprimer des ligne dans un fichier CSV
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 18h00
  4. Remplacer / Supprimer des données dans un fichier txt
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 14h33
  5. Supprimer des éléments dans une TreeView ?
    Par souch dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/09/2005, 13h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo