#javascript-typescript
1 messages · Page 56 of 1
« L’erreur évent » c’est un try catch quoi
Oui
c’est pas dinguo
Bah moi, mes bots, c'est l'optimisation en V11 et après, je le passe en v12 ...
En gros y'a les erreurs, les event
Bah moi, mes bots, c'est l'optimisation en V11 et après, je le passe en v12 ...
@odd ether Aïe bonne chance
Le ready
Je peux test ton bot?
Pas encore
Ah bah non du coup 😂
Et je prie pour que il marche dès qu'il est Online
Bah oui, même sur un dédier x)
😂
90 GB de RAM seulement pour lui x)
En plus on l'a gratos 
Yep
#mrcdavid
#j'avoue
Les modos, il taff aussi mdr
J'avoue
Mais là on se les touche un peu quand même
Y'a plus personne qui fait de conneries 😂
On devrait parler dans #general plutôt
( Déso le staff)
Quand il m'a dit "tout va être entièrement gratuit à vie", dans ma tête, c'était ça :

Ouaip

800 alors
euxx mdrr nan serieux cb ?
@cyan iron tu as tjrs ton soucis pour le lineNumber ?
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Error/fileName
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Error/lineNumber
descend un petit peu, et regarde la compatibilité serveur, nodejs => non
@cyan iron tu as tjrs ton soucis pour le lineNumber ?
@slim anvil Oui
Ah merci
J'ai pas pu tester encore
Je travaille là
Bah ça sert à rien de tester du coup
Marqué sur la doc, pas compatible avec nodejs
Après tu peux essayer autrement du coup, mais tu auras pas accès a la clé fileName ni lineNumber
Oui je viens de voir
Comment je peux faire 
Je vais être obligé d'afficher toute l'erreur je crois 😭
log ton err.stack
Oui justement c'est ce que j'ai fait
Mais c'est trop le bordel
Je voudrais avoir un truc propre ma8s apparement 😩
En fait je veux juste que ça m'envoie les détails en MP
Sauf que là avec le truc dégueulasse de discord
Le but en fait c'est de Flood le moins possible la console
Yes bah là comme ça tu vas galerer pour pas grand chose je pense, sinon tu cut au pire des cas, généralement l'erreur va etre au début
Oui
prend que le premier "at"
No, quand je dis "at" c'est que il commence par ça, mais si c'estpas le cas tu seras bloqué
Pas trop d'idée de la meilleur façon de faire, moi je laisserai tout et au pire je cuterai a x nbres de caractères
Ouais pas bête
Mais ça peut causer des problèmes
Je verrais tout à l'heure
Quand je serais devant mon PC
ah ouais mais cut chaud, si l’erreur est beaucoup plus longue qu’un simple is not defined
Oui
Enfin non
Elle peut pas être plus longue
Ça met juste la ligne et le fichier en plus quoi
non mais plus longue en terme de caractères
ui
on fait juste err.stzck et on enleve err au début
Ça laisse que à partir du premier at
ui aussi
tu peux split ta string au "at" et tu prends le premier élément
en partant du principe que ça retourne tjrs at
oui c'est ce que je viens de dire
tu split au at ca te return un tableau tu affiches l'index 0
à voir si ca fonctionne good tu nous diras
Yep 🙂
Déjà j'ai opti le reste
Je me suis rendu compte qu'il y avait pas tout le temps un path et un code 😂
Donc ça faisait crash
Là ça test si y'a un path ça le met sinon ça le met pas
yes ça dépend + du type de l'erreur
si tu manges une 403 tu auras pas de code ou quoi c'est juste forbidden
généralement ca va + etre du 500 internal server error
:/ du coup c'etait foireux
Oui
J'ai fait erreurs d'api
Et erreur de code direct avec un try catch dans chaque fichier
Et là normalement mon bot crash plus jamais
normalement 
@slim anvil J'ai un petit problème j'arrive pas à trouver la longueur de err :/
let only_at = err.stack.slice(err.parse().length)
J'ai tenté ça
Même sans le parse
TypeError: err.parse is not a function
.parse c'est pour du json
non tu dois JSON.parse(err) par exemple
j'ai réussi au final
J'ai fait avec toString
par contre j'arrive pas à isoler le premier at
Regarde si un élément dans ta string se répète, et tu split a cas, comme ça ça va te créer un tableau de « sommaire »
Ou tu peux cut à chaque nouvelle ligne aussi
Yes
ah non
x)
je comprends pas comment je pourrais faire avec splice
ah je sais
J'ai réussi 
let only_at = err.stack.slice(err.toString().length)
let only_at_arr = only_at.split(" ")
let first_at = only_at_arr.indexOf('at')
let second_at = only_at_arr.indexOf('at', (first_at + 1))
only_at = only_at_arr.slice(first_at, second_at).join(" ").trim()
console.log("Only at stack : " + only_at)
J'ai fait comme ceci x)
J'ai fait mieux
J'ai carrément isolé les parenthèses
let only_at = err.stack.slice(err.toString().length)
let only_at_arr = only_at.split(" ")
let first_at = only_at_arr.indexOf('at')
let second_at = only_at_arr.indexOf('at', (first_at + 1))
only_at = only_at_arr.slice(first_at, second_at).join("").trim()
only_at_arr = only_at.split("")
let s_first_at = only_at_arr.indexOf('(') + 1
let s_second_at = only_at_arr.indexOf(')')
only_at = only_at_arr.slice(s_first_at, s_second_at).join("").trim()
( Si y'a moyen d'opti mieux que ça je veux bien x) )
comment ça
aaah oui pas con
let only_at = err.stack.slice(err.toString().length)
let only_at_arr = only_at.split("at")[1].split("")
let s_first_at = only_at_arr.indexOf('(') + 1
let s_second_at = only_at_arr.indexOf(')')
only_at = only_at_arr.slice(s_first_at, s_second_at).join("").trim()
👌
@slim anvil I did it !
Merci pour ton aide :)
Quelqu'un a déjà use gamedig ?
@sand shore l'a utilisé il me semble @oak turret
Okay, car euh pour gmod ça me semble kc, il me prends pas mon port ni mon host xd
Sorry je suis sur le tel donc je t’aide comme je peux wailrone
Tu peux encore réduire d’ailleurs mais c’est déjà bien comme ça
Oui je pense
Je vais réfléchir à comment réduire
Mdr je crois que j'ai réussi à le réduire à une seule ligne 😂
PTDR OUI
let only_at = err.stack.slice(err.toString().length).split("at")[1].split("(")[1].split(")")[0].trim()
@oak turret pour ma part ça marche nickel
Essaye sur un autre serveur genre un serveur connu pour voir si ça viens pas de ton serveur
Compliqué de lire sur tel mais @cyan iron y a pas mal de truc je pense que c’est pas utile, t’as beau le faire en 1 ligne tu appelles bcp de truc quand même
oui mais franchement c'est opti
Enfin
je pense
En fait je veux vraiment récupérer que le lien c'est mieux :)
Après si tu sais comment faire mieux je suis prenneur ( à mon avis tu vas trouver 😂 )
Je peux check demain matin si tu veux pas d’ordi ce soir juste du chill 😴
ok :)
ok
oui att
Salut à tous,
Aujourd'hui je vais vous apprendre à gérer vos erreurs et empêcher à coups sûr les crash !
Erreurs de code
Tout d'abord, votre bot doit être en handler. Sinon passez à la deuxième partie du tutoriel : Erreur d'API
Je vous conseille de créer un dossier "utils" ...
J'ai modifié
tu as copié collé bêtement
pas le but du truc :/
je teste juste 🙂
tu as copié collé bêtement
pas le but du truc :/
après j'ai envie de dire, t'expliques pas grand chose dans ton tuto, c à la limite plus un gist github qu'autre chose 🤔
@sand shore tu peux montrer ton query stp
et je test sur les serveurs sur top serveurs
pas mon serveur ahah
Attends mais @idle ice (désolé du ping), comment t'as intégré ta boucle pour show les noms des joueurs dans ton embed ?
non mais players = state.players.length ? genre tu check si il est "valide" fin ?
players = state.players
Juste j'le fais passer dans une fonction pour que ce soit plus simple
Salut, j'utilise ceci pour détecter les erreurs d'API :
process.on('unhandledRejection', error => {
console.error('✅ Erreur d\'API détéctée : ' + error.stack);
let precisions = "``\nNom : " + error.name + "\nMessage : " + error.message
if (error.path) precisions = precisions + "\nPath : " + error.path
if (error.code) precisions = precisions + "\nCode d'erreur : " + error.code
if (error.method) precisions = precisions + "\nMéthode : " + error.method
const api_error_embed = new Discord.MessageEmbed()
.setColor("#2f3136")
.setDescription(":small_red_triangle: **Il y a eu une erreur d'API sur le bot :**\n``js\n" + error + "``")
.addField(":small_red_triangle: Précisions :", precisions + "``")
client.users.cache.get("393378313663676427").send(api_error_embed)
});
Seul problème, j'aimerais récupérer le message d'origine qui a causé l'erreur ou alors le channel depuis lequel l'erreur a été causée
savez vous comment faire ?
Ps: quand il y a 2 `` il y en a en réalité 3 c'est juste pour éviter de faire bug
Quand tu dis erreur d’api tu parles de celle de discord ? Pas que mais aussi sûrement ?
mais si du coup tu as une erreur car leur api est down ou autre ce qui arrive parfois
Comment t’envoie l’embed

😂
Non mais je parle des erreurs qui viennent de mon code
Par exemple cannot send O this user
Ou autre
Ahhh bah du coup c’est pas des erreurs d’API 🤔
Bah ça s'appelle comme ça
¯\_(ツ)_/¯
Oui c'est bizarre mais c'est le nom
Ou ça par exemple
Oui la première c’est une erreur API de discord
Par contre le genre d’erreur que tu as après c’est genre .avatarURL c’est juste que tu vérifies jamais tes variables etc
C’est pas censé arriver ce genre d’erreur
oui pas faux
Là c'était volontaire pour faire un exemple
Mais je prévois toujours le " au cas ou "
Bon je pars sur ça alors x)
Bonjour j'aimerais utiliser fs pour ecrire des données dans un fichier json mais je n'arrive pas a faire que ca écrive quelqu'un pourrait m'expliquer comment fonctionne fs ?
Ezt ce que tu write a la fin?
Yo les petits gens, quelqu'un saurait-il m'aider sur les Collectors de Discord, car j'coince pas mal la dessus
const filter = m => ((m.author.id === message.author.id) && m.startsWith("<#") && m.endsWith(">"))
collector = message.channel.createMessageCollector(filter, {time: 15000})
collector.on("collect", m => {
console.log(m)
})
collector.on("end", collected => {
console.log(collected)
})
Mon erreur: m.startsWith is not a function
Comment puis-je vérifier dans mon collecteur que je récupère bien un canal
Si ce n'est via ça
m.startsWith ne fonctionne pas parce que l'objet Message ne possède pas de fonction startsWith
Si tu voulais vérifier que le contenu commence par un certain texte, tu peux utiliser m.content.startsWith(). Une méthode plus simple pour faire ce que tu recherche serait cependant de vérifier les mentions du Message : https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=mentions
L'objet MessageMentions contient les mentions réalisées par le message, ce qui inclus non seulement les membres, mais les rôles et channels. Ainsi, pour réaliser ce que tu recherche (à savoir vérifier que le message mentionne un channel), tu devrais faire m.mentions.channels.size > 0.
Super merci Taink! 😄
Salut à tous 👋 ,
J'ai un système de mute qui fonctionne avec les timestamp, seul problème c'est pas optimisé car le bot actualisé les mutés à chaque message et toute les minutes un message est envoyé dans un channel
Voici le code
db.query(`SELECT * FROM mutes_list`, (err, muterows) => {
if (!muterows) return
if (muterows.length < 1) return
for (let pas = 0; pas < muterows.length; pas++) {
let get_stamp = muterows[pas].time_stamp
let mute_time = muterows[pas].ms
let restant = message.createdTimestamp - get_stamp
if (restant >= mute_time) {
let muted_guild = client.guilds.cache.get(muterows[pas].guild_id)
let role_mute = "730422624827605033"
let get_role = muted_guild.roles.cache.get(role_mute)
if (!get_role) return
db.query(`DELETE FROM mutes_list WHERE user_id = '${muterows[pas].user_id}' AND guild_id = '${muterows[pas].guild_id}'`)
let to_unmute = muted_guild.members.cache.get(muterows[pas].user_id)
if (to_unmute) to_unmute.roles.remove(role_mute)
}
}
})
db.query(`SELECT * FROM bans_list`, (err, muterows) => {
if (!muterows) return
if (muterows.length < 1) return
for (let pas = 0; pas < muterows.length; pas++) {
let get_stamp = muterows[pas].time_stamp
let mute_time = muterows[pas].ms
let restant = message.createdTimestamp - get_stamp
if (restant >= mute_time) {
let muted_guild = client.guilds.cache.get(muterows[pas].guild_id)
db.query(`DELETE FROM bans_list WHERE user_id = '${muterows[pas].user_id}' AND guild_id = '${muterows[pas].guild_id}'`)
muted_guild.members.unban(muterows[pas].user_id)
}
}
})
Dans mon message.js
setInterval(function(){ client.channels.cache.get("735226147217997844").send("**:oui: Les mutes ont été rechargés !**"); }, 60000);
dans mon Index.js
Du coup j'ai pas précisé ça me paraissait logique 🤣
Mais comment je peux améliorer ça du coup
J'ai pas tout à fait compris le principe du système... J'ai pas vraiment lu le code mais tu peux expliquer le principe de fonctionnement ?
Je... devine que c'est un système qui empêche les gens de parler jusqu'à un certain timestamp ?
Je ne comprends pas ce que toi tu as fait cependant...
En gros,
1️⃣ Au moment du mute, j'envoie une ligne dans la base de données qui contient les informations du mute : guild id, user id, timestamp et temps de mute en ms.
2️⃣ Ensuite, je vérifie avec le code si dessus à chaque message envoyé si la différence entre le timestamp du message est supérieure ou inférieure à celui inscrit dans la base de données. ( Ce qui veut dire si la personne est encore mute ou non )
3️⃣ Dans ce code, je supprime le rôle mute.
⚠️ Le problème : Ca spam dans un channel " Mute rechargés " pour pouvoir répéter l'action dans message.js car il me faut un timestamp obligatoirement
Le système est foireux, j'ai simplement besoin d'avoir votre avis sur comment l'améliorer / faire mieux :)
Mais pourquoi tu spam un message embed ?
Tu vérifies a chaque message envoyé ? ou à chaque msg envoyé d'une personne mute ?
car ça change tout déjà
Quand tu mutes quelqu'un tu lui ajoutes un rôle ?
tu devrais lors d'un mute ajouté le rote "muted" ou meme un role invisible et a chaque envoie de message, déjà tu vérifies si le mec est muted juste via son role
ca va grandement réduire le nombre de requête
Quand tu mutes quelqu'un tu lui ajoutes un rôle ?
Oui
tu devrais lors d'un mute ajouté le rote "muted" ou meme un role invisible et a chaque envoie de message, déjà tu vérifies si le mec est muted juste via son role
C'est justement ce que ça fait
Ensuite aucune utilité d'envoyé un msg "Les mutes ont été rechardés" tu vas juste spam un truc pas utile
Mais j'envoie un message toutes les minutes avec mon bot pour que les mutes soit rechargés
a la limite juste envoyé 'Vient de se faire mute" "A été démute"
Oui mais si personne n'écrit pendant 3 ans
AH
Tu peux sinon lui laisser la possibilité d'écrire, et si il doit etre encore mute tu delete son message, si c'est ok tu removes le role
non mais en fait c'est pour un bot multifonction du coup ça va être le bordel
JE vais tout refaire
Ou alors tu run un script toutes les heures qui va vérifier tout les champs de ta base et unemute ceux qui doivent l'être
ou toutes les 10 minutes au pire
Mais pas une bonne idée de tout de faire parler ton bot pour vérifier
Ou alors tu run un script toutes les heures qui va vérifier tout les champs de ta base et unemute ceux qui doivent l'être
C'est ce que je voudrais farie justement mais y'a moyen de faire un timestamp ?
Du genre toutes les 5 min par exemple ça check tout
Mais il me faut un timestamp de l'instant présent pour faire ça
Pas bête je check merci
Tu as des modules npm pour faire un systeme de cron en gros
new Date sinon
🤔
@slim anvil
J'ai fait ça voici le code :
let time = new Date().getTime()
console.log(time + " | " + message.createdTimestamp)
Je voulais juste savoir, si je met un date.getime ça va fonctionner non
1700 ms de plus
Pour faire quoi
Evitez le spam de msgs :)
Pour un système de mute le truc classique c'est de rajouter un rôle qui empêche de parler et de vérif toutes les x intervalles que le timestamp est dépassé pour lui enlever (alternativement tu peux utiliser des CronJobs).
Pour la vérification typiquement tu vas avoir une backup en base de données mais tu enregistre les infos que tu veux dans une Collection par exemple ; une Collection qui associe par exemple à un id d'utilisateur un timestamp. Au démarrage du bot tu recharges cette collection via des requêtes db et dès qu'il y a un nouveau mute tu le rajoute à la fois dans la db et dans la collection. Quand le mute arrive à son terme tu enlève de la collection le mute, ainsi que dans la db, et tu réalise l'action "un-mute", qui consiste à enlever le rôle à l'utilisateur.
Je sais pas si c'est clair mais c'est le système le plus logique qui me vient en tête @cyan iron, autrement ça paraît peu opti
Pour un système de mute le truc classique c'est de rajouter un rôle qui empêche de parler et de vérif toutes les x intervalles que le timestamp est dépassé pour lui enlever (alternativement tu peux utiliser des CronJobs).
C'est ce que ça fait
Pour la vérification typiquement tu vas avoir une backup en base de données mais tu enregistre les infos que tu veux dans une Collection par exemple ; une Collection qui associe par exemple à un id d'utilisateur un timestamp. Au démarrage du bot tu recharges cette collection via des requêtes db et dès qu'il y a un nouveau mute tu le rajoute à la fois dans la db et dans la collection. Quand le mute arrive à son terme tu enlève de la collection le mute, ainsi que dans la db, et tu réalise l'action "un-mute", qui consiste à enlever le rôle à l'utilisateur.
Okkk pour éviter de faire 50k requêtes SQL
Merci je vais faire ça ^^
okep, glhf
^^
Dites moi, comment je peux détecter si un user dis un mot ou une phrases ?
Genre j'ai fais ça :
const phrases = ["ok", "test"];
if ( message.content.includes[phrases] ) {
console.log("fonctionne");
}
Je vois pas comment faire d'autres
y a Array.prototype.includes pour ça
Ouais ça j'ai vu
ça donne phrases.includes( message.content )
hm show your code
const phrases = ["ok", "test"];
if ( phrases.includes( message.content ) ) {
console.log("fonctionne");
}
et tu rentres bien les mots complets, genre ok pour tester?
oui justement je mets que ça
perso ça fonctionne
yes
je vais refaire un bot tout neuf pour voir mais c'est bizarre
ah mais attend, en plus le includes ne détecte que si le content = un des index mon array
like this that's work
const word = "ouvre quand"
if ( message.content.includes(word) ) {
message.reply("avant 2021");
}
thx ^^
yep
@timid loom Salut ! Du coup pour les collections, je n'ai pas trouvé de doc dessus, je voudrais savoir comment ça fonctionne pls :)
Si ça te déranges pas
Je ne connais ni l'un ni l'autre
¯_(ツ)_/¯
Et j'ai pas trouvé sur la DOC
Peut être que je ne sais pas chercher
Hmm si tu regarde par exemple le cache d'un Manager tu devrais trouver que c'est une collection
Je vais te chercher un lien
ooooh merci
Hey ! j'ai un petit souci avec mon code j'ai un await qui ne fait pas son boulot, en gros la ligne var data = await get_userdata(params) est censé me retourner un objet avec les infos de l'utilisateur à l'interieur sauf que là la valeur de data est systematiquement undefined alors que le await est censé retourner qqch (il ne peut pas me renvoyer un undefined)
Du coup ma question est : y'a t-il un probleme avec mon await ? est-ce que je l'utilise mal ?
async function loterie_opti(message, args) {
var memberid = message.member.id;
var time = Date.now();
var data = await get_userdata(memberid); // c'est ce await qui pose probleme
console.log(`[DEBUG loterie] : data`);
console.log(data); // affiche undefined
if (!data)
return create_userstamp(memberid);
if (time - data.timestamp < 12 * 60 * 60 * 1000) {
console.log(`[DEBUG loterie] : pas assez de tps`);
return message.reply("Vous avez déjà participer il y a moins de 12h !");
}
data = await update_userstamp(memberid);
return 0;
}
Au passage get_userdata ressemble à ça
async function get_userdata(userid) {
var sql = "SELECT * FROM donadab WHERE userid = ?";
var params = [userid];
var db_res = null;
db.get(sql, params, (err, row) => {
if (err) {
console.error(err.message);
return 84;
}
if (row) {
console.log(`[DEBUG loterie] :`);
console.log(row); //afiche la bonne valeure
db_res = row;
return db_res; // du coup retourne la bonne chose
}
});
}
je precise que le console.log à l'interieur lui m'affiche bien ce que je veux
Il faut que ta fonction retourne un promise pour que le code attend la reponse
Regarde sur la doc comment ça fonctionne
Bonjour,
Je viens vers vous après plusieurs heures de recherche non-concluante.
Je rencontre un problème avec une commande !banlist. Je ne sais absolument pas pourquoi celle-ci ne fonctionne pas. Tout se passe bien elle renvoie le nombre d'utilisateurs banni, mais impossible d'avoir le nom des utilisateurs.
Si vous pouvez m'aider, ce serais sympa 🙂
message.guild.fetchBans()
.then(banned => {
let list = banned.map(user => user.tag).join('\n');
if (list.length >= 1950) list = `${list.slice(0, 1948)}...`;
message.channel.send(`**${banned.size} utilisateur(s) banni:**\n${list}`);
})
ça vient de ta fonction map
laisse moi chercher un peu dans la doc 🤔
donc
banned c une collection d’instances de BanInfo 🤔
et un BanInfo contient les propriétés user et reason
donc ton map devrait peut-être être :
banned.map( ban => ban.user.tag )
Merci beaucoup, je vais essayer ça de suite :p
(ça marche parfaitement merci beaucoup)
pourquoi quand vous testez vous mettez juste pas un console.log
si tu avais console.log(user) tu aurais vu que dedans il y avait user et reason
Je n'y ai pas pensé 🤔
quelqu'un a déja testé les fichiers de Invite Manager sur GiftHub en open source ?
||( pas pour skid mais pour le fun )||
Pourquoi la question ?
Pourquoi cette question ?
Qui ferait ça pour le Fun ??
Et surtout pourquoi préciser que c'est pour le fun, c'est encore plus louche
Salut, je veux bien avoir comment on change de couleur dans le message embed
quand je fais dans .setcolor(0xff0000) ça me donne le couleur rouge
Parce que le code Hex est certainement rouge
.setColor(edeb58) tu auras du jaune ^^
@flint eagle
tape couleurs html sur google
t’auras les codes couleurs
prends le hex
commence par #
Color hex is a easy to use tool to get the color codes information including color models (RGB,HSL,HSV and CMYK), css and html color codes.
Salut j'ai besoin de vous encore :)
J'ai fait ceci mais j'ai un petit problème, on me ressort que results is not iterable :
for (const data of results) {
inscriptions_embed.addField(`🗃️ Inscrit : ${data.user_name}`,`**Pseudo :** ${data.minecraft_name}\n**ID unique :** ${data.id}`);
}
log ton results ?
du coup ceci explique cela
normalement c'est censé prendre les 5 premiers résultats
db.query(`SELECT * FROM hdv ORDER BY id ASC LIMIT 5 OFFSET ${page_request}`, (err, results) => {
const inscriptions_embed = new Discord.MessageEmbed()
.setTitle(`📙 Voici la page ${page} des inscriptions !`)
.setColor("#2f3136")
.setFooter(`Page ${page}/${max_pages} des inscriptions.`)
console.log(results)
for (const data of results) {
inscriptions_embed.addField(`🗃️ Inscrit : ${data.user_name}`,`**Pseudo :** ${data.minecraft_name}\n**ID unique :** ${data.id}`);
}
return message.channel.send(inscriptions_embed);
})
Ca vient de la requete
faut tjrs vérifier qu'un object/ tableau existe
et toi qui fais de la "gestion d'erreur"
x)
avant de taper dessus
Oui elle te renvoie rien, ça se trouve tu as 0 results ?
quoi que tu aurais un tableau vide au pire
att tu vas comprendre
db.query(`SELECT * FROM whevent`, (err, allresults) => {
let row_lenght = allresults.length
let max_pages = Math.ceil(row_lenght / 5)
if (max_pages === 0) return message.channel.send(":nope: **Il n'y a encore personne d'inscrit à l'event**")
let page = 1
if (args[0]) {
page = parseInt(args[0])
if (isNaN(page)) return message.channel.send(":nope: **Saisi un numéro de page valide !**")
if (page <= 0) return message.channel.send(":nope: **Saisi un numéro de page valide !**")
}
if (page > max_pages) return message.channel.send(":nope: **Cette page est introuvable, la dernière page est la page " + max_pages + " !**")
let page_request = (page - 1 ) * 5
db.query(`SELECT * FROM hdv ORDER BY id ASC LIMIT 5 OFFSET ${page_request}`, (err, results) => {
const inscriptions_embed = new Discord.MessageEmbed()
.setTitle(`📙 Voici la page ${page} des inscriptions !`)
.setColor("#2f3136")
.setFooter(`Page ${page}/${max_pages} des inscriptions.`)
console.log(results)
for (const data of results) {
inscriptions_embed.addField(`🗃️ Inscrit : ${data.user_name}`,`**Pseudo :** ${data.minecraft_name}\n**ID unique :** ${data.id}`);
}
return message.channel.send(inscriptions_embed);
})
});
Voilà
En gros je regarde d'abord si c'est vide justement
et ça me dit personne n'est inscrit
Sauf que là je suis inscrit dans la bdd justement
Le truc que je trouve bizarre c'est que j'utilisais exactement le même système pour un HDV et ça marchais nickel :(
je gère pas trop les requetes SQL
mais si ton page_request = 0
ça plante pas ?
ou si il est négatif ?
let page_request = (page - 1 ) * 5
car si page = 0 de base tu l'as met à -1
page = 1 de base
donc elle sera a 0, ca fonctionnera quand meme ?
mais peut être que t'as raison si ça vaut 0
oui voilà
je tente
aaaaaah mais non
vu que offset c'est pour démarrer à
donc ça démarre à 0
Enzo
Tu vas rire
si je rigole pas on fait quoi 
quelqu’un saurait comment changer le nom et la photo d’un bot uniquement avec le token svp
@keen narwhal
https://discord.js.org/#/docs/main/stable/class/ClientUser?scrollTo=setAvatar
https://discord.js.org/#/docs/main/stable/class/ClientUser?scrollTo=setUsername
thks
@idle ice Yop, dis moi pour ton query t'as fais comment sur ton bot de status ? je capte pas pourquoi il me fail mon query, "error udp", thx ^^
Je te met le code bouge pas
const game = require("gamedig")
const moment = require("moment")
const {MessageEmbed} = require("discord.js")
let serverIP = "144.76.220.146"
let serverPort = "27015"
async function status(bot, name, players) {
let status = require("../../data/status.json")
const server = bot.guilds.cache.get("718598017795751937")
const channel = bot.channels.cache.get(status.status_channel)
const message = await server.channels.cache.get(status.status_channel).messages.fetch(status.status_message)
if(channel) {
if(message) {
const embed = new MessageEmbed()
.setColor("#0099ff")
.setTitle(name)
.setTimestamp()
let plys = ""
if(players) {
players.forEach(ply => {
if(!ply.name) return
let time = moment().startOf("day").seconds(ply.time).format("HH:mm:ss")
plys = plys + `\n- ${ply.name} (${time})`
})
embed.addField("Joueurs en ligne", plys)
}
message.edit(embed)
}
}
}
module.exports = (bot) => {
/* Server Status */
setInterval(() => {
try {
game.query({
type: "garrysmod",
host: serverIP,
port: serverPort
}).then((state) => {
status(bot, `__Clone Wars__\n🔰 Joueurs en ligne: ${state.players.length}/${state.maxplayers}\n💥 ${serverIP}:${serverPort} (${state.ping}ms)`, state.players)
}).catch(() => {
status(bot, `__Clone Wars__\n❌ Serveur hors-ligne ❌`)
})
} catch (error) {
console.error(error)
}
}, 30 * 1000); // Ms
}
Bonsoir, je suis débutant dans le développement bot. J'ai une petite question, comment puis-je faire pour que mon bot reste en route h24 ?
Bonjour, il faut l'heberger chez un hebergeur
Sa reste le meme principe il faut l'heberger quoi
faut t-il savoir encore savoir use nodejs pour l’heberger
sur le raspberry
si il est débutant c’est pas la peine
Le console.log marche ?
euh j’ai pas fais comme ça pour créer un channel
C’est une logs de création de channel @oak turret
Oui y’a pas d’erreur dans le terminal @magic orbit
ah donc quand un user créer un channel c’est censé le log
j’vais look si y a un event pour ça
event channelCreate
J'imagine que c'est appelé dans une boucle de chargement d'évènements, tu peux montrer cet élément là également ?
C’est le seul code qu’il y’a dans mon fichier
Ah
Bah voilà le problème
Il faut que ce soit appelé dans un event "channelCreate" en l'occurrence
client.on("channelCreate", (channel) => {
console.log(`${channel.name} a été crée.`);
});
Bah en soit son code peut fonctionner malgré qu il soit le seul présent dans le fichier, si la fonction est appelé d un autre fichier lors de l évent c est sensé fonctionner
Yes justement je veux voir ce bout de code là
Je ne l'ai aps je vais test je le met au dessus des lignes écrite ?
https://prnt.sc/tqjqn9 j'ai cette erreur
Salut j'aimerais savoir comment je pourrais mettre un méssage d'erreur quand une personne fait ![un mot] pour lui dire que la commande est introuvable ou invalide ?
mh
un array avec toutes tes commandes
tu vérif si message.content !== de ton array
si oui l'erreur, sinon return true ( il m'semble )
exemple en js vanilla, msg = message.content
const msg = "!help";
const commandes = ['!help', "!ban", "!kick"];
if ( commandes.includes(msg) ) {
console.log('Commandes utilisée ' + msg);
}
else {
console.log('Invalide');
}
Salut ! Je souhaiterais optimisé au maximum mon bot donc :
Avoir un minimum de variables / d'assignations. Seul problème :
https://img.wailronefirelion.fr/Tl48rkI.png
En fait, il cherche d'abord à trouver la mention
Mais si celle-ci n'est pas présente il prend quand même l'ID
Donc ce qui emmène à l'erreur logique : https://img.wailronefirelion.fr/71eQ5tL.png
Est-ce que quelqu'un saurait comment je pourrais régler ce petit problème ?
Le problème aussi c'est que si je met args[0] ou message.author en premier ils existerons forcément donc la mention ne sera jamais testée :(
https://img.wailronefirelion.fr/4MspVLg.png
Sinon je peux faire ça, mais si il y a mieux je prends ^^
tu peux sinon faire des ternaires
client?.users?.cache?.get(....
Alors plus trop sûr que ce genre de chaining soit encore appelle ternaire mais c’est le même opérateur alors je pense que oui mais t’as saisi l’idée
aaah je ne savais pas
Donc si j'ai bien compris
let target = client.users.cache.get(message.mentions.members.first()?.id || args[0] || message.author.id)
Je dois faire ça ?
bah non du coup regarde mon message
🤔
Il faut que je le mette sur le get
Mais ça va faire quoi exactement je comprends pas
tu sais ce que c’est qu’une ternaire ?
Non
Regarde déjà ça, et pardon mon exemple du coup c’est dû optional chaining
Regarde un peu sur Google tu vas voir c’est pas compliqué
Ok merci ^^
ça te permet en gros de tester à chaque fois si la clé existe
Aaaaah !
Mais c'est génial
y'a le point quand même
Il veut pas quand je met le point 🤔
Check ta version de node ou autre, je crois que ça s’utilise avec Babel aussi, mais si tu as pas tout ça d’installer laisse tombé je pensais que si my bad
fais juste ça avec une ternaire basique alors ce sera ok la
besoin de rien
Je regarderais ça demain je dois partir mais merci beaucoup ;)
Normalement c'est utilisable
Bonjour, depuis la mise à jour de l'api je n'arrive plus à get les émojis voici le code que j'utilise
J'ai aussi essayer avec seulement l'id mais toujours pareil
Essaie peut-être client.emojis.resolve( "id" )
y a eu une maj quand?
y a eu une maj quand?
@oak turret https://discordjs.guide/additional-info/changes-in-v12.html
ah la v12 mdr ok c'pas nouveau
Ouai mais voilà
😂
ouai dcp client.emojis.get à été changer
@humble storm
avec client.emojis resolve
tu veux afficher un emoji ?
oui
const emoji = message.guild.emojis.cache.find(emoji => emoji.name === 'nomdelemoji');
ou .get('id');
yep
l'émoji est sur ton serveur ?
oui
alors fait
:nomdelemoji:
.:nomdelemoji:
oh
\:emoji_name:
dans ton serveur
et envoie moi l'id
739107138366079097
dans le .get('id') mets l'id dans id
.setTitle(message.guild.emojis.cache.get('739107138366079097'));
déjà fait
et undefined ?
oui
et ça :
client.emojis.cache.get('739107138366079097');
t'avais pas mis le bon id dans ton premier screen
mais ça marchera pas sur tout les serveur ça ducoup
bah c'pareil avec l'id
oh bah wtf

essaye de test dans un message normal
pareil
Pourquoi quand je fais ceci:
module.exports.run = async (bot, message, args, bdd) => {
const member = message.mentions.members.first() || message.guild.members.get(args[0])
bdd.query(`SELECT * FROM level WHERE discord_id = '${message.author.id}'`, (err, rows) => {
let data = rows[0];
const canvas = createCanvas(1000, 333);
const ctx = canvas.getContext("2d");
const background = await loadImage("./justiceleague.jpg");
ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
ça me met cet erreur ?
bdd.query(`SELECT * FROM level WHERE discord_id = '${message.author.id}'`, async (err, rows) => {
Merci 🙂
Es-ce que c'est possible de vocal ? @slim anvil J'ai quelques choses à te demander et je ne sais pas si tu vas comprendre à l'écris 🙂
explique moi a l'écrit déjà sinon on ira en vocal 😉
Sa aurait plus simple en vocal mdr
En gros, sur mon système de rank
Pour que la "barre de progression" avance
Faut que je fasse xp - xpmax
Mais quand je fais ceci
Ma barre va de droite à gauche
Et moi je voudrai l'inverse
Pire explication ever
Ok merci 🙂
Ok, donc @dire latch ton xpmax correspond à quoi ? au % de progression maximum a afficher sur la barre ? donc par exemple 100% ?
Re
Oui, c'est ça
Si tu veux venir vocal, tu peux, sa seras mieux avec les images et les explications 🙂
ok tu me laisses 10 min ?
Oui tkt, va si 🙂
Omg Enzo qui voc

Ptdrr
J'ai une autre petite question 🙂 @slim anvil
Tu sais comment faire pour indiquer son rank ?
Comment ça
Par exemple
Si toi et moi
On as de l'xp/level
Tu es genre lvl 2, et moi lvl 1
Si je fais !rank
ça me dis que je suis 2ème
Et ainsi de suite
Ah tu peux get toute ta table, et tu fais un sort et tu récupères le premier
Ok, je ne sais pas faire ça mdrrr
Bah déjà commences par récupérer toutes tes datas dans un format Array, quand tu as ça tu me dis
no ping

et il te parlait d'un array mais dans ton code à mon avis
😦
bah je sais pas trop si tu veux tous les afficher ou non, mais dans tout les cas il te faut un tableau dans ton code ou tu reçois tout tes users avec l’xp et ensuite tu fais un .sort dessus pour le trier du plus grand au plus petit
et si ensuite tu veux sa position, tu fais un .findIndex
Et tu auras sa position
Je voudrais que le top 10
Bah tu le sélect tous, tu sort et tu .slice(0, 10)
Je vais m’absenter là je sors le chien je serai dispo après si tu veux
Mais ça te donnerai ça:
array. sort((a, b) => { return b.xp - a.xp })
et ensuite dessus tu slice(0, 10)
Dac
Euh on va dire ça 😂
t'en es ou là actuellement
Mais ton array tu le reçois déjà de base lors que tu SELECT toute ta table
J'arrive dans 5min
Merci 🙂
// CERCLE POUR IMAGE DE PROFIL
ctx.arc(170, 160, 120, 0, Math.PI * 2);
ctx.lineWidth = 6;
ctx.strokeStyle = "#ffffff";
ctx.stroke();
ctx.closePath();
ctx.clip();
const avatar = await loadImage(message.author.displayAvatarURL);
ctx.drawImage(avatar, 40, 40, 250, 250);
// CERCLE POUR LE ROND ROUGE
ctx.arc(240, 248, 35, 0, Math.PI * 2, true);
ctx.strokeStyle = "#ffffff";
ctx.stroke();
ctx.closePath();
ctx.clip();
const presence = statut;
ctx.drawImage(presence, 200, 208, 80, 80);
Comment enlever le deuxième cercle sur mon image de profil :(
https://media.discordapp.net/attachments/738491420314173450/739560739890790500/rank.jpg
J'y connais rien mais c'est pas le ctx.drawImage(presence, 200, 208, 80, 80); qui fait ça ?
Jsp
Si tu le retire ça fait quoi ?
Ya tjr les deux cercles
Beh je vois aps alors, j'y connais rien en bot je laisse les autre t'aider
Oui, ya Enzo qui vas m'aider après 🙂
là c'est du canvas héhé on check après yes quand j'ai finis de play
sauf si quelqu'un se sent de check avant 😛
Enfête, j'ai sois, le cercle rouge sans contour, et un grand cercle
Sois j'ai le cercle autour du cercle rouge mais j'ai 2 grands cercle
je sais pas avec quel lib tu fais ça mais ce ne serait pas ctx.arc(240, 248, 35, 0, Math.PI * 2, true) qui dessine tes cercles ? car tu en as une au début et une plus tard 🤔
Oui normal
J'en ai une pour faire le contour de ma pp
Et l'autre pour le rond rouge
Mais quand je fais ça
J'ai deux cercles sur ma pp
Et non 1
ahhh oui j'avais pas vu le rond rouge
le true à la fin il represente quoi ?
c'est quoi la lib que tu utilises ? ce sera plus simple ^^
C’est la librairie Canvas 😊
Enzo l'as dis plus haut
tu veux faire quoi j’ai pas suivi
Tu voudrais enlever le fond blanc du cercle rouge, c’est bien ça ?
Quel fond blanc ? 🤔
Tu veux enlever quoi en gros
c’est le fillstyle
non mais mdr
Oui mais ça ne m’éclaire pas
quel deuxième cercle
C’est quoi le deuxième cercle pour toi?
c’pas précis
Mais faut savoir lire -__-
non mais mdr
Ok super, je laisse les autre t’aider vu que je sais pas lire
"Comment enlever le deuxième cercle sur mon image de profil"
mais mec
Je ne peux pas être plus claire que ça 🤷♀️
quel deuxième cercle
C’est quoi le deuxième cercle pour toi?
celui du status ou de la pdp
il parle de la pdp
"Comment enlever le deuxième cercle sur mon image de profil"
Sois vous êtes aveugle, sois vous cherchez pour un rien
C’est quoi le deuxième cercle pour toi sur ta pdp ?
strokestyle
Donc à un moment donner, stop
c’est toi qui a fait le code?
pas besoin d'être aussi agressif par contre ^^ surtt quand tu parles à des gens qui cherchent à t'aider
Bon avant de copier coller du code sans comprendre go l’apprendre plutôt
ouais mdr
Parce que demander de l’aide en ayant copié colle sans comprendre c’est facile
car là tu vois que c’est une couleur
Si tu veux partir de ce principe
@hazy mirage Ok

@dire latch bon, je me suis calmé.
On va repartir sur de bonnes bases si tu le souhaites :)
Alors pour nous ce n’est pas évident de comprendre ce que tu entends par le deuxième cercle... serait-ce possible de l’entourer en rouge sur une capture d’écran ?
Pilot, c'est le strokestyle
vu que c'est define dans le cercle de la pdp
y a que ça
test ça
Je vais attendre Enzo
Comme tu le souhaites :€
Car quand je marque quelques choses, et ya que toi qui ne comprends pas
il parle du cercle qui entoure la pdp si tu zoom un peu tu vois bien les deux cercles mais il se voit quasiment pas comme ça
@oak turret ah il parlait du contour de la pdp
Quand c'est écris blanc sur noir, c'est un peu du foutage de gueule
Ou noir sur blanc
Quand c'est écris blanc sur noir, c'est un peu du foutage de gueule
@dire latch Bon allez debrouille toi ❤️ (il voyait juste pas le cercle sur la pdp)
@fleet socket Ba m'aide pas 🤷♀️
@dire latch Par contre une chose, tu demandes de l'aide, tu restes poli, patient, et courtois.
On veut juste aider, et tu réponds comme si on était des chiens, c'est stop, sinon tu vas dans #rules et tu lis, c'est écris noir sur blanc comme tu dis si bien.
Mdr
@dire latch je sais pas si t’a vu:
Met ton ctx.lineWidth à 0
C'est écris et on se fout de moi, donc je ne pense pas que c'est moi le soucis
on se fout de toi ? t'as de l'audace mon garçon
et c'est le lineWidth yes
(Celui la au cas où tu ne le vois pas malgré qu’il soit écrit blanc sur noir)
@oak turret Totalement, quand j'écris le problème et on me demande ce que c'est, sa s'appelle du foutage de gueule
le prochain c'est un warn
On revient au sujet principal qui est le probleme de canvas
merci
on peut pas jouer en paix 
on lui a dit de mettre le lineWidth à 0, plusieurs fois sinon
T'as essayé @dire latch ??
Ah mais enlève
de ctx.arc a ctx.clip()
Normalement c’était juste pour le cercle blanc ça je crois
Oui, mais j'ai plus le cercle blanc sur mon rond rouge après
fais un screen stp
De ?
Ah c’est étonnant
ton rendu
En enlevant ce que tu m'as dis ?
non, actuel
Pareil qu'aux dessus, sauf j'ai un cercle avec une autre couleur
Tu n’as enlevé que cela ?

Le cercle jaune il sort d’où
C'est totalement ça que je veux mdr
Wait
Faut lire un petit peu ...
"Comment enlever le deuxième cercle sur mon image de profil"
donc tu veux enlever le cercle jaune ou blanc ?
si tu veux enlever le blanc, tu enlèves le strokestyle
Je vais test
#ffffff = blanc
et donc là tu veux enlever le blanc ?
Je voudrais enlever un cercle oui
oui alors le plus petit des deux je le vois pas enft
ctx.arc(170, 160, 120, 0, Math.PI * 2, true);
ctx.lineWidth = 6;
ctx.stroke();
ctx.closePath();
ctx.clip();
const avatar = await loadImage(message.author.displayAvatarURL);
ctx.drawImage(avatar, 40, 40, 250, 250);
// ctx.arc(240, 248, 35, 0, Math.PI * 2, true);
// ctx.fillStyle = "#ffffff";
//ctx.stroke();
//ctx.closePath();
//ctx.clip();
ctx.arc(240, 248, 35, 0, Math.PI * 2, true);
//ctx.strokeStyle = "#ff9e00";
ctx.stroke();
ctx.closePath();
ctx.clip();
const presence = statut;
ctx.drawImage(presence, 200, 208, 80, 80);```
Clic sur l'image et zoom 🙂
Tu vois mieux les deux
le linewidth à 0, et pourquoi tu mets un .stroke() ?
si c''est pas le linewidth test avec une autre image de pp
Ce n'est pas ça
Même avec une autre pp
J'ai pas de contour blanc non plus sur ma pp
Et si j'enlève le .stroke(), j'ai plus le rond blanc qui s'affiche
À mon avis c'est un artefact dû à la compression, perso je le vois pas vraiment donc je me trompe sans doute
Non, dutout
Après c'est vrai qu'autour du cercle rouge ça fait moins large du coup
C'est difficile à voir sur tel je t'avoue
Avec le code actuel
ça donne sa
ctx.arc(170, 160, 120, 0, Math.PI * 2, true);
ctx.lineWidth = 0;
ctx.stroke();
ctx.closePath();
ctx.clip();
const avatar = await loadImage(message.author.displayAvatarURL);
ctx.drawImage(avatar, 40, 40, 250, 250);
// ctx.arc(240, 248, 35, 0, Math.PI * 2, true);
// ctx.fillStyle = "#ffffff";
//ctx.stroke();
//ctx.closePath();
//ctx.clip();
ctx.arc(240, 248, 35, 0, Math.PI * 2, true);
//ctx.strokeStyle = "#ff9e00";
//ctx.stroke();
ctx.closePath();
ctx.clip();
const presence = statut;
ctx.drawImage(presence, 200, 208, 80, 80);
Mais ducoups, j'ai plus le cercle sur le rond rouge
Je t'aiderais bien mais pour le coup les canvas en étant sur tel j'ai du mal du coup je laisse aux autres
Pas de soucis tkt
Mais Enzo a le bon résultat nan ?
Oui
Bah ouais c'est ça je comprend pas mais j'ai pris son code
T'as rien changé toi ? Super bizarre
oui envoie moi tout ton canvas pour voir
Ouais c'pour ça que je dis que c'est à cause de la compression
Je t'envois ça en mp
c'est sûrement ça Taink
Mais ce qui m'étonne c'est que la compression en général ça fait pas ça quoi
juste pour voir
ouaip
Glhf à tous hein du coup
c'est donc ton image
Et je règle ça comment ducoups ?
const avatar = await loadImage(message.author.displayAvatarURL);
ctx.drawImage(avatar, 40, 40, 250, 250);
// ctx.arc(240, 248, 35, 0, Math.PI * 2, true);
// ctx.fillStyle = "#ffffff";
//ctx.stroke();
//ctx.closePath();
//ctx.clip();
ctx.arc(240, 248, 35, 0, Math.PI * 2, true);
//ctx.strokeStyle = "#ff9e00";
//ctx.stroke();
ctx.closePath();
ctx.clip();
const presence = statut;
ctx.drawImage(presence, 200, 208, 80, 80);
j'ai 0 probleme avec ton code 🤔
après je test en web mais ca revient au meme je pense
Test avec mon code que je t'ai mis en MP si tu veux 🙂 Enzo
yes ce que j'ai fais tkt
j'ai test aussi, c'est fonctionnel
Franchement là no sé 🤔
l'image de l'avatar y a que ça
Merde je viens de couper l'editeur en ligne
Pg tkt
Je sais pas si c'est l'image ou non, c'est peut etre du a un .clip() ou autre, la je sèche
Sans le .clip(), ma pp dépasse du cercle
humm j'ai peut-être une idée
pas mon truc favoris le canvas 
const avatar = await loadImage(message.author.displayAvatarURL({format: 'jpg'}));
test avec les formats
jpg, png
je sais pas si svg ça marchera
TypeError: message.author.displayAvatarURL is not a function
const avatar = await Canvas.loadImage(message.author.displayAvatarURL({ format: 'jpg' }));
je l'ai pris comme ça
Canvas n'est pas définis
Et si je met canvas comme j'ai mis plus haut,
J'ai le même erreur que aux dessus
mets juste loadImage
wtf
ouais bah je sais po
Vous me conseillez quoi pour débuter mon apprentissage sur le JS ?
perso j'ai appris le js sur openclassroom
Salut quelqun pourrait m'expliquer comment faire un embed pour mon bot discord en js ? car j'ai éssayer ce code
client.on('embed', message => {
.setTitle("This is your title, it can hold 256 characters")
.setAuthor("Author Name", "https://i.imgur.com/lm8s41J.png")
/*
* Alternatively, use "#00AE86", [0, 174, 134] or an integer number.
*/
.setColor(0x00AE86)
.setDescription("This is the main body of text, it can hold 2048 characters.")
.setFooter("This is the footer text, it can hold 2048 characters", "http://i.imgur.com/w1vhFSR.png")
.setImage("http://i.imgur.com/yVpymuV.png")
.setThumbnail("http://i.imgur.com/p2qNFag.png")
/*
* Takes a Date object, defaults to current date.
*/
.setTimestamp()
.setURL("https://discord.js.org/#/docs/main/indev/class/RichEmbed")
.addField("This is a field title, it can hold 256 characters",
"This is a field value, it can hold 1024 characters.")
/*
* Inline fields may not display as inline if the thumbnail and/or image is too big.
*/
.addField("Inline Field", "They can also be inline.", true)
/*
* Blank field, useful to create some space.
*/
.addBlankField(true)
.addField("Inline Field 3", "You can have a maximum of 25 fields.", true);
message.channel.send({embed});
})
Mais il m'affiche une errreur donc si quelqun pourrait m'envoyer un code embed sans erreur ou m'aider a comprendre comment en faire un ce serait sympa merci 🙂
T’as l’impression d’avoir déclarer embed quelque part ?
Tu .setTitle sur rien
Regarde sur discordJs embed
c'est
const embed = new Discord.MessageEmbed()
.setColor()
.setTitle()
message.channel.send(embed)
etc
Et je pense pas qu'il y ai un event embed sur le client 🤔
Bonjour, comment je peux faire une fonction dans ma commande clear pour récupérer tout les message et les mettre dans un fichier et après les renvoyer dans un channel que j'ai prédéfini ?
Tu get les x derniers messages du channel où tu clear, écris leur représentation dans une string, t'envoie ça en attachment dans un message et voilà
Oki merci
Hey 🙂
J'ai une petite question, pour faire une annonce quand quelqu'un live, il faut utiliser quel module ? Ou autre ?
Pour twitch tu peux directement utiliser leur API
Car j'avais trouver un bout de code et des trucs à gauche et à droite mais je comprends pas tout tout encore 🙂
J'avais ceci:
const Discord = require('discord.js');
const snekfetch = require('snekfetch');
const client = new Discord.Client()
const streamer = 'Dragounnet56';
const api = `https://api.twitch.tv/helix/streams?user_login=${streamer}`
let bottwitch = client.channels.find(r => r.id === "738811585992065114")
client.on('ready', function () {
console.log(`Bot has started, with ${client.users.size} users, in ${client.channels.size} channels of ${client.guilds.size} guilds.`);
client.user.setGame(`on ${client.guilds.size} servers`);
});
snekfetch.get(api).set('Client-ID', "iddemonappli").then(r => {
if (r.body.stream === null) {
setInterval(() => {
snekfetch.get(api).then(console.log(r.body))
}, 10);
} else {
console.log(r.body);
const embed = new Discord.RichEmbed()
.setAuthor(`${r.body.stream.channel.display_name} is live on Twitch`,`${r.body.stream.channel.logo}`,`${r.body.stream.channel.url}`)
.setThumbnail(`http://static-cdn.jtvnw.net/ttv-boxart/${encodeURI(r.body.stream.channel.game)}-500x500.jpg`)
.addField('Stream Title', `${r.body.stream.channel.status}`, true)
.addField('Playing', `${r.body.stream.channel.game}`, true)
.addField('Followers', `${r.body.stream.channel.followers}`, true)
.addField('Views', `${r.body.stream.channel.views}`, true)
.setImage(r.body.stream.preview.large)
return bottwitch.send(embed);
}
});
Mais je ne sais pas si je suis dans la bonne direction 🤷♀️
Tu peux pas le faire avec des webhooks directos ?
Non, je voudrai sans justement 🙂
https://id.twitch.tv/oauth2/token?client_id=${authHelix.clientID}&client_secret=${authHelix.clientSecret}&grant_type=client_credentials
ca te permet de récupérer un token
Et ensuite tu pourras faire une requete sur https://api.twitch.tv/helix/streams?user_login=${streamer} avec comme header :
'Client-ID': this.authHelix.clientID,
'Authorization': `Bearer ${accessToken}`,
Ok mais ducoups, j'ai comment mon client_secret ?
(jvais etre sur la route donc je serais plus dispo pour répondre le temps que je rentre)
Hey, c'est quoi le nom de évènement pour récupérer la personne qui a boost le discord ?
Ça existe pas cet event
Tu dois listen les changements de rôles et vérifier que ça correspond au rôle de nitro boost
Le nom de l'évent c'est genre guildMemberEdit ou quelque chose comme ça
C'est sur la doc pour le coup
Ah d'accord mais du coup si il boost 2 fois le 2 eme ne sera pas afficher si il a deja le role ?
Malheureusement non
Tu peux sans doute bidouiller mais c'est à toi de regarder comment et ça ne sera sans doute pas aussi constant que les autres events
D'accord je vais check merci
guildMemberUpdate pour l'event aussi 🙂
Yes c'est ce que j'ai envoyé plus haut
Ta marquer edit 🙂
j’ai vu comme quoi on pouvait héberger un bot avec ceci https://aws.amazon.com/free/
je voulais savoir si cetait vraiment possible je n’ai vu personne le faire ^^
Idk
Oui, par contre fait attention, pour avoir un serveur faut mettre une cb et tu fait une fausse manip (genre t'active un truc payant sans savoir) il te facture sans prévenir
Et un bon prix
ok cimer et ça oklm
je fais une CB prepaid
genre une nouvelle CB avec seulement 5€ dessus par exemple
Ouais, je sais pas si il accepte ce genre de carte
ça dépend des banques
Après si tu fzit bien attention t'as pas de soucis normalement
prends heroku mdr
plus simple
sinon n'importe quel vps fera l'affaire
tu lance un tâche node avec ton bot et ça tourne h24
enft jvais lancer un bot giveway et je prévois environ 100 servs même pas mais jpense ça va pas tenir si ?
je sais pas du tout quoi prendre x(
ça tiendra je pense
azy cim
question conne : si j’héberge sur plusieurs truc en même temps genre Heroku, Glitch ,j’aurais une plus grosse puissance ou juste toute mes commandes en 2 fois et tout x)
aws c'est super mais pas forcément pour héberger des bots. La force de aws c'est le serverless donc tout le contraire de ce dont tu as besoin
ah
ducoup c’est mieux quoi : /
dans ces VPS gratuit
Pour les bots heroku c'est très bien et facile à prendre en main
yes jvais faire ça j’ai juste peur que ça tienne pas D:/
Le pb avec heroku c'est que ton bot sera pas allumer h24
Perso j'héberge mon bot sur raspberry 🤔
@fleet socket pourquoi pas h24 et c’est gratuit RasBerry ?
@dire latch un gratuit ? 😎
Heroku ca reste h24
Rien n'est gratuit 🙂
enfin je sais po j'use plus trop, mais prend toi un petit vps
ca fera large l'affaire
Yep
ouil le budget
Tu peux avoir un vps à 1€/mois 🤷♀️
Jt'envois le lien en mp pour éviter la pub
azy
vous connaissez des hébergeurs avec des mois d’essais ?
Moi j'avais entendu que Heroku récupérais les tokens, après, je ne sais pas si c'est vrai ou non
@keen narwhal Tu auras pas d'hébergeur avec des mois d'essais 🙂
oh
🙂
J'en ai jamais vu perso
vous avez des plugins sympa ou utilise svp pour discord js
comme canvas, fidglet, etc
rien j’ai envie de découvrir des trucs
hm ok
y’a un plugin pour récupère une info sur un site ??
genre un compteur d abonne par exemple
api youtube
nice
et petite question pour l’hébergement, si j’héberge mon bot sur Heroku et en journée sur pc (tout en laissant tourner sur Heroku) car je peux pas laisser mon pc allumer toute la nuit genre, est ce qu’en journée mon bot sera plus puissant ou au contraire ça fera les commandes en double et tout ?
Ça fera en double si t’as 2 instances qui tournent en même temps
Mais ça ne changera rien à la puissance
ah k et c’est possible de transformer un pc portable en serveur dédiée ?
déjà ça coûte pas mal d’électricité oe
et un serveur dédié coûte minimum combien ?
ok ok 👍
logton user.guild.channels.get('') mais il a pas l'air d'etre defined
donc met juste tes logs jusque remonter au soucis
donc si je comprend bien je met un console.log c'est ça
Oui tu fais du debug quoi


