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
    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
    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
    Merci, c'est tout à fait ce qu'il fallait