Boucle while pour bot discord
Résolu
David987
Messages postés
145
Statut
Membre
-
David987 Messages postés 145 Statut Membre -
David987 Messages postés 145 Statut Membre -
Bonjour,
J'aimerais effectuer une boucle sur une requête afin que mon bot sur discord me liste toutes les entrées d'une seul table sur 1 seul champ.
Je m'éxplique, j'ai une table avec 3 champs (id, sigle, description), j'aimerais que mon bot me liste tous les sigles seulement.
Voici le code que j'ai actuellement qui me permet mais je ne vois pas comment faire pour ajouter la boucle :
Actuellement, si je tape la commande +allsigle, il me donne le premier sigle de ma table, comment l'adapter pour obtenir toutes les entrées ?
Merci pour votre réponse.
J'aimerais effectuer une boucle sur une requête afin que mon bot sur discord me liste toutes les entrées d'une seul table sur 1 seul champ.
Je m'éxplique, j'ai une table avec 3 champs (id, sigle, description), j'aimerais que mon bot me liste tous les sigles seulement.
Voici le code que j'ai actuellement qui me permet mais je ne vois pas comment faire pour ajouter la boucle :
//listage des sigle déjà enregistré
else if (message.content.startsWith(prefix + "allsigle")){
message.delete();
pool.query(`SELECT * FROM abreviation`, function (err, results) {
if ( results[0] ) {
pool.query(`SELECT * FROM abreviation`, function(err) {
if ( err ) throw err;
})
let embed = {
color: 0x000000,
title: '__**Liste complète des abréviations connues du bot actuellement: **__',
description: '**' + (`${results[0].sigle}`) + '**' + '\n',
timestamp: new Date(),
};
message.channel.send({ embed: embed });
console.log(`${message.author.username} a consulté la liste des sigles`)
}
else {
message.channel.send(`${message.author}` + 'Sigle inconnu actuellement !');
console.log(`${message.author.username} a tenté de regarder un sigle inexistant.`)
}
})
return;
}
Actuellement, si je tape la commande +allsigle, il me donne le premier sigle de ma table, comment l'adapter pour obtenir toutes les entrées ?
Merci pour votre réponse.
3 réponses
-
Bonjour,
Je viens montrer un test qui ne fait pas planter le bot mais qui ne m'affiche pas toutes les entrées de ma table :
//listage des sigle déjà enregistré else if (message.content.startsWith(prefix + "allsigle")){ message.delete(); var suffix = message.content.split(" ").slice(1).join(" "); pool.query(`SELECT * FROM abreviation`, function (err, results) { if ( results[0] ) { pool.query(`SELECT * FROM abreviation`, function(err) { if ( err ) throw err; }) while (`${results[0].sigle}` > 0) { let embed = { color: 0x000000, title: '__**Liste complète des abréviations connues du bot actuellement: **__', description: '**' + (`${results[0].sigle}`) + '**' + '\n', timestamp: new Date(), }; message.channel.send({ embed: embed }); console.log(`${message.author.username} a consulté la liste des abréviations`) } } else { message.channel.send(`${message.author}` + 'Je ne connais pas encore toutes les abréviations de coc, mon encyclopédie s\'enrichit de jours en jours grâce à toi !'); console.log(`${message.author.username} a tenté de regarder la liste des abréviations.`) } }) return; }
Help me please.-
J'ai essayé ça aussi :
//listage des sigle déjà enregistré else if (message.content.startsWith(prefix + "allsigle")){ message.delete(); var suffix = message.content.split(" ").slice(1).join(" "); pool.query(`SELECT * FROM abreviation`, function (err, results) { if ( results[0] ) { pool.query(`SELECT * FROM abreviation`, function(err) { if ( err ) throw err; }) var nbr_entree = 0; while (`${nbr_entree}` < `${results[0].sigle}` ) { nbr_entree++; let embed = { color: 0x000000, title: '__**Liste complète des abréviations connues du bot actuellement: **__', description: '**' + (`${results[0].sigle}`) + '**' + '\n', timestamp: new Date(), }; message.channel.send({ embed: embed }); } console.log(`${message.author.username} a consulté la liste des abréviations`) } else { message.channel.send(`${message.author}` + 'Je ne connais pas encore toutes les abréviations de coc, mon encyclopédie s\'enrichit de jours en jours grâce à toi !'); console.log(`${message.author.username} a tenté de regarder la liste des abréviations.`) } }) return; }
Et ça fonctionne pas, la boucle ne m'affiche pas la liste de ma table, par contre ma console m'affiche bien le message que je veux qu'elle m'affiche.
-
-
Salut,
pourquoi ne pas faire cela directement au niveau de la base de donnée, lors de la requête SQL?
Cela semble plus logique et éviterait d'avoir à faire des contorsions en PHP et est assez simple à écrire:
SELECT nomduchamp FROM nomdelatable;
https://sql.sh/cours/select-
bonjour,
Merci pour ton aide, alors j'ai fais comme tu m'as dis :
else if (message.content.startsWith(prefix + "allsigle")){ message.delete(); var suffix = message.content.split(" ").slice(1).join(" "); pool.query(`SELECT sigle FROM abreviation`, function (err, results) { if ( results[0] ) { pool.query(`SELECT sigle FROM abreviation`, function(err) { if ( err ) throw err; }) var nbr_entree = 0; let embed = { color: 0x000000, title: '__**Liste complète des abréviations connues du bot actuellement: **__', description: '**' + (`${results}[0].sigle`) + '**' + '\n', timestamp: new Date(), }; message.channel.send({ embed: embed }); console.log(`${message.author.username} a consulté la liste des abréviations`) } else { message.channel.send(`${message.author}` + 'Utilise la commande +commandes pour obtenir ce que je peux faire !'); console.log(`${message.author.username} a tenté de regarder la liste des abréviations.`) } }) return; }
Sauf que le problème c'est qu'il ne met pas les champs de la tables mais une liste de [object Object],[object Object],
une idée ? -
-
-
Bonsoir et merci pour ta réponse,
Justement c'est ça le problème, c'est que je ne sais pas comment la faire la boucle avec node js.
Voici mon code :
//listage des sigle déjà enregistré else if (message.content.startsWith(prefix + "allsigle")){ message.delete(); var suffix = message.content.split(" ").slice(1).join(" "); pool.query(`SELECT sigle FROM abreviation`, function (err, results) { if ( results[0] ) { pool.query(`SELECT sigle FROM abreviation`, function(err) { if ( err ) throw err; }) var nbr_entree = 0; let embed = { color: 0x000000, title: '__**Liste complète des abréviations connues du bot actuellement: **__', description: '**' + results + '**' + '\n', timestamp: new Date(), }; message.channel.send({ embed: embed }); console.log(`${message.author.username} a consulté la liste des abréviations`) console.log(results) } else { message.channel.send(`${message.author}` + 'Utilise la commande +commandes pour obtenir ce que je peux faire !'); console.log(`${message.author.username} a tenté de regarder la liste des abréviations.`) } }) return; }
j'ai bien tous les bons résultats dans ma console, ça me met ça :
RowDataPacket < sigle: 'nom' >, (91 fois puisqu'il y à 91 lignes dans ma table)
Si tu peux m'aider pour faire cette boucle, je suis preneur. -
-
-
Je précise que lorsque je met
console.log(results), j'ai bien tous ce que je veux mais je n'arrive pas à ce le bot me l'affiche aussi sur le salon ou je fais ma commande.
je comprend plus rien.