#javascript-typescript
1 messages · Page 52 of 1
qu'est-ce que tu veux faire avec ton tableau après?
Tout fonctionne yes !
qu'est-ce que tu veux faire avec ton tableau après?
@timid loom En fait c'est pour éviter les mentions
En fait j'ai fait ça
let final_message = msg.content
let splited_message = msg.content.split(" ")
for (let pas = 0; pas < splited_message.length; pas++) {
if (splited_message[pas].includes("\n")) {
let withoutn = splited_message[pas].split("\n")
splited_message[pas] = withoutn[0] + " \n " + withoutn[1]
}
}
splited_message = splited_message.join(" ").split(" ")
splited_message.map((item, key) => {
if (item.match(/^<@!?(\d+)>$/)) {
let user_name = client.users.get(item.match(/^<@!?(\d+)>$/)[1]).username
splited_message[key] = user_name
}
})
final_message = splited_message.join(" ")
mais pourquoi tu veux les \n
@timid loom Parceque quand on retourne à la ligne, on a le \n
Sur discord
donc si je fais
salut
@cyan ironet bah ça fait
['salut\n@cyan iron']
@cyan iron
C'est ce que je disais plus haut
Pour analyser la mention j'ai besoin que le \n ne soit pas collé au reste
Mais de toute façon ça fonctionne là je suis trop content :)
Je sais, mais tu peux faire ça par exemple
let strArray = myString.split('\n');
// tu fais tes manips
let resStr = strArray.join('\n');
t'as juste à utiliser .join
je vois pas pourquoi tu veux absolument récup le \n
Oui mais là du coup ca va lui ajouter un /n devant chaque mot
En gros il veut recréer le meme message que celui envoyé
nan
mais sans les mentions
oui voilà enzo a raison
le join met des \n qu'entre les éléments de l'array
oui mais je veux pas faire ça
Bah yes
ok alors j'ai mal compris
c'est bien ce que je dis

En gros il va split toute sa phrase mot par mot
et vérifier chaque mot si c'est une mention ou pas avec la regex
si s'en est une, il remplace le mention juste par le pseudo de la personne pour éviter de double mention
et vérifier chaque mot si c'est une mention ou pas avec la regex
@slim anvil d'abord je vérifie si y'a un retour à la ligne et je remplace
Oui
j'ai l'impression qu'il s'est compliqué la vie alors
une regex peut faire ça toute seule
ouais
tu peux utiliser une fonction
c'est ce que je me posais comme question
Ouais pas faux, et quand ça find tu passes dans la fonction
ouais pas con mék
On va passer des 52 lignes
à 6

oui mdr
La méthode replace() renvoie une nouvelle chaîne de caractères dans laquelle tout ou partie des correspondances à un modèle sont remplacées par un remplacement. Le modèle utilisé peut être une RegExp et le remplacement peut être une chaîne ou une fonction à appeler pour chaque...
là ici tu as un exemple
pas compliqué
je vais te passer un code si tu veux, ça va me changer les idées
je fais du vb depuis 4 heures j'ai besoin d'une pause avec un langage bien

x)
Bon bah du coup ton truc est réglé à 100% wailrone juste à attendre tinque

Si on me demande le code je le vend 500€ et je te file 300 x)
4h pour faire cette m***
x)
Par contre @timid loom la regex sera plus bonne dans le cas où ça analyse toute là string et pas juste un mot
au cas où
msg.content.replace(/<@(\d+)>/g, (match, p1) => {
return client.users.get(p1).username;
});```
Essaye avec ça ?
Faudrait la changer un peu
avec le tag g ça devrait fonctionner 🤔
je suis pas sûr enfaite faut qu’il test ça se trouve c’est ok mais je suis pas sûr
ah wait
mon truc return un user
attends
là c'est bon
il faut stocker le resultat mais normalement ça fonctionne
Non mais t'embête pas ça marche bien comme ça ;)
ok, je suis sûr que ça fonctionne je viens de tester
client.on('message', (msg) => {
let resStr = msg.content.replace(/<@!(\d+)>/g, (_, id) => {
return client.users.get(id).username;
});
console.log(resStr);
});```
tu fais de resStr ce que tu veux
mais ça fonctionne
@cyan iron en vrai prends ce code parce que au moins il prend moins de ligne et il est facile à lire
ok
@timid loom ça marche nickel merci beaucoup <3
Et si je veux mettre un @ devant x)
j'ai trouvé lul
c'est le seul bug sinon x)
let final_message = msg.content.replace(/<@!(\d+)>/g, (_, id) => {
return client.users.get(id).username;
});
Le code :)
Y'a moyen de le patch ou pas du tout ?
hmm je vois pas trop la raison
c'est quoi le message que t'obtiens quand tu fais ta manip ? je veux dire le contenu pour discord
le console log ça rend quoi en fait? c'est ça ma question
ça c'est le message de la vidéo
**@deep torrent** **@vagrant sorrel** **@cyan iron**
**@deep torrent** **@vagrant sorrel** **WailroneFirelion**
La première ligne c'est le msg.content
et la seconde ligne c'est le final_message
Je ne suis pas sur le serveur de la vidéo
Donc c'est normal qu'il soit écrit WailroneFirelion
let final_message = msg.content.replace(/<@!?(\d+)>/g, (_, id) => {
return client.users.get(id).username;
});
Est-ce que ça ça fonctionne?
😎

Si tu scroll vers le haut tu monte pas tu descend 
tro for
salut ! vous pensez comment faire pour genre sa envois un message.channel.send aléatoire genre j'ai deux message.channel.send et j'aimerais faire un random sur les deux
T'as pleins de possibilités
Le plus simple reste de faire un Array qui contient toutes les phrases que tu veux utiliser
et ducoup sa feras un random sur les messages l'array?
okay sinon ya un truc sur le wiki qui explique?
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random
tu prends une valeur avec ça
La fonction Math.random() renvoie un nombre flottant pseudo-aléatoire compris dans l'intervalle [0, 1[ (ce qui signifie que 0 est compris dans l'intervalle mais que 1 en est exclu) selon une distribution approximativement uniforme sur cet intervalle. Ce nombre peut ensuite êtr...
Ah bah xD
et tu la ceil ou tu la floor, comme tu veux
donc par exemple
let mes_phrases = ['Salut', 'Wow', 'Dingo', 'Haha j\'adore écrire omg'];
let ma_phrase_random = mes_phrases[Math.floor(Math.random() * Math.floor(mes_phrases.length)];
message.channel.send(ma_phrase_random);
wait
Trop fort UwU ( pas vrai j’ai tous appris a cause de vous xD )
mais bon voilà quoi
A vrais dire un math.floor ne sert pas trop ici
Yep
Car ton chiffre est forcément un entier
J'allais le dire
A moi que Math.random() * Math.floor(mes_phrases.length) retour pas un entier
Je vais tcheck
Math.random() c'est pas un entier
My bad
Surement
ah nice
j'ai juste une erreur
let ma_phrase_random = mes_phrases[Math.floor(Math.random() * Math.floor(mes_phrases.length)];
ici
L'erreur ?
tout est dis ...
Sinon je l’ai fais avec des liens d’images
ouep je l'ai fait rapidement j'ai pas vraiment vérifié la syntaxe
yep
c'est facile à repérer dans un éditeur de texte cela dit
je te donnerais ça si tu y arrives pas
Sinon je l’ai fais avec des liens d’images
@oak turret ?
c'est à dire @oak turret
Un random
Ah
ah oui effectivement
bref la même chose quoi
c'est sa que je cherche mais sa après c'est pas complexe a modif
yep c’est simple
essaye ça
const phrases = [« phrase1 », « phrase2 »];
const idx = Math.floor(Math.random() * 3);
const rep = phrases[idx];
const reply = message.channel.send(rep);
j’s sur tel donc les « change les
pas sur du * 3 mais test
mets 2 si ça fonctionne pas
nop sa marche pas
aucune
- 2 ?
Mais pourquoi * 3
?
var phrases = ["Test", "lol", "mdr"];
var idx = Math.floor(Math.random() * phrases.length);
var rep = phrases[idx];
console.log(rep)```
Et puis sa revient a faire ça dans tous les cas
var phrases = ["Test", "lol", "mdr"];
var rep = phrases[Math.floor(Math.random() * phrases.length)];
console.log(rep)```
oui c’est sur
ah ca fonctionne
bon bah super
merci 👍
U're welcome
dernière petite question, quel est la "function" pour mettre du texte à droite dans un embed ?
thumbnail c'est pour l'image
Après tu peux faire des tests
Non, image, c'est .setImage
Non @weak grove
LA DOC
x)
Quoi que, je crois avec set, author ça marche non ?
@weak grove
yep je sais la doc mais quel est l'option a utiliser 👀?
Inline
ahhh
ah ok
Il y a que la description mais elle n'est pas a droite
Fireless pour edit un role on est d'accord je dois faire role.edit({ color : dsgnklfd})?
Yep
Rolemanager
Doc
Du coup why ça me met role.edit est indéfinis ;-;
Quel version ?
12
Role undefined ?
role.edit is not a function bruh
Viens vocal
J'peux pas vraiment
Sorry
Mute toi au pire
Ton role
Toi être get avant
Donc tu a une erreur quand tu le get
Author fire c’est au-dessus du title je crois
const Discord = require('discord.js')
module.exports.run = async(client, message, args) => {
message.delete();
var Embed = new Discord.MessageEmbed()
.setDescription(`:x: | Vous n'avez pas la permission d'exécuter cette commande !`)
.setColor(`#edeb58`)
.setTimestamp()
.setFooter("A!ex Bot RoleColor", message.author.displayAvatarURL({format: "png", dynamic: true}))
if(!message.guild.member(message.author).hasPermission("MANAGE_ROLES")) {
return message.channel.send(Embed)
} else {
var color = args.join(' ').split('##')[1]
var roles = args.join(' ').split('##')[0]
var role = message.guild.roles.cache.some(role => role.name === roles);
role.edit({
color: color
})
Embed = new Discord.MessageEmbed()
.setDescription(`✔️| La couleur du rôle à bien été édité !`)
.setColor(`#edeb58`)
.setTimestamp()
.setFooter("A!ex Bot RoleColor", message.author.displayAvatarURL({format: "png", dynamic: true}))
}
}
module.exports.help = {
name: "rolecolor"
}
Oui
Console.log(role)
@oak turret Oui
Tu as ta réponse
Mais olalaaa
message.guild.roles.cache.some(role => role.name === roles);
Return soit true ou soit faut s'il fais partis d'une list
.some
Toi c'est un fetch
Que tu veux
Je dois faire .get au lieu de .some ?
Non fetch
Non
Find
My bad
find("name", "Your_role_name")```
Je sait plus c'est quoi fetch
Bordel je suis perdu
xDD
Va dormir
Try find
I do
Console.log
role
et
message.author.displayAvatarURL({format: "png", dynamic: true})```
Useless
message.author.AvatarURL()```
Undefined
Umhh
liveshare stp
Je t'ai invité
Pas très intelligent
Le wiki le montrait
Effectivement
Pas vue
try
Le bot est lent
30 sec
Ouah
xDD
Ta full erreur dans ton bot
faut dodo
.displayAvatarURL c’est mieux je crois
Yep
att je look
Marche mieux
xD
Mais bon
Non il y a pas besoin
Il veut essayé sans donc je le laisse essayé sans
Tu peux use directement avatarURL()
Et dans tous le cas ta une erreur discord dans ton bot
fn.bind
C'est quoi s'te merde x')))
Jamais eu cette error
yep je fais avatarURL() perso je viens de vérif
member.user.avatarURL()
sûrement un autre truc qui merde Alex
Fireless
Regarde
C'tait bien ce que la doc montrait
Bah le role existe donc ..
tu veux pas get l’id du role que le mec mentionne?
Ouais, je pourrais faire ça, mais copier l'id d'un rôle sur tablette..
Non il veux par le nom
• Hachibi @keen narwhal
Oui
C'est le nom du role ?
I see
Oui
depuis l’id d’un rôle on peut pas display le name?

d’où les 30 secondes mdr
Non, le bot prenait déjà du temps à ce lancer
mh
mdrrr
;-;
Moi jfais tourné mes bots sur des FX8300
MDR
Un peu trop pour des bots discord
en effet mdrr
Fais ta commande @keen narwhal
bref gl les gars, good night
Il faut attendre le dernier truc, c'est lui qui prend du temps
Je veux bien être sympa et t'aider mais si tu modif a chaque fois que je debug ça ne va pas le faire
kk
Tu as aucun role avec le nom que tu lui donne
Pff
Si
Je l'ai copier dans les rôles du serveur donc..
Bah moi il me dis que non
La preuve
Tous est en false
Le premier
Aucun le correspond avec un role
Non
Il doit mettre true s'il correspond avec celui que tu as spécifié
Je l'ai dans ma list de rôle
Put u're serveau on
Je vais en essayé un autre
Je viens de faire fonda
All false
Donc
C'est le point
Mec
C'est pas par se que je suis la que voilà
Entre le point et le nom du role ta un espace
Donc ça crée un nouveau args[]
Enlève l'espace
Ou c'est le point qui le remet en Unicode
Bah du coup, je vais seulement retirer la commande.. comme ça plus de problème
C'était seulement pour me facilité la tache
Hey ! Je fais ça depuis tout à l'heure, mais ça ne fonctionne pas
if(msg.member.roles.has(muteid)) return msg.channel.send("> :warning: **Cette personne est déjà mute**")
muteid est une variable contenant un id du rôle mute
Et je ne comprends pas
utilise le cache
Je suis en v11
qu'est-ce qui ne fonctionne pas?
@cyan iron muteid doit être le rôle et non un id
Const muteid = msg.guild.roles.get(id)
Bah si
Bah j'ai eu une erreur quand j'ai essayé 😂
My bad nope
🙂
J'ai tout tenté
Bonne lecture
😆
Tu as liveshare ?
Tu est sous vscode ?
Nope
Bruh
Phpstorm
vscode > all
Js, SQL, php
C'est pour du web phpstorm
Pas pour use des modules comme discord.js
Tu n'auras pas forcément tout
Depuis mes débuts j'suis sous vscode et sublime text et c'plus général donc c'est des préférences là ^^
Envoie ton code
C'est pas avec ton petit bout que j'irai loin
C'est juste un return à l'interieur d'un dbquery
Je sais placer mes returns ça vient pas de ça 🙂
J'ai vérifié
J'ai mis un return sans conditions et il fonctionne
Log juste avant ta condition et dans ta condition
@slim anvil je lui ait dit
Le muteid je le prends dans la base de donnée
Oui mais Enzo je peux pas là je suis sûr mobile :/
Si il passe avant et dedans log le msg.member
Puis le .roles etc
Yes quand tu seras sur pc
Du debug quoi
on pourra pas bcp t’aider on voit pas le avant donc c’est compliqué
je vais dormir on peut check demain !! Good night
J'ai remplacé membre par user, j'ai bougé la condition j'ai tenté d'autre mméthodes, j'ai get le rôle our le mettre à la place de l'ID et toujours rien
Ok bonne nuit
yo, je fais une configuration d'un de mes bots, fonctionnant avec bdd pour gérer les serveurs (pour l'instant quelques trucs restent en json pour test), et j'aimerais faire patienter les autres "prompt" en attendant la réponse de celui-avant lui, je dois obligatoirement use une lib ou je peux le faire en dur ?
sinon je fais avec discordjs prompt, mais je voulais savoir si le faire en dur c'est better ?
Sinon tu te fais un tableau ou tu stock les infos pour vérifier si c'est lui ou non et tu check dans ton tableau si c'est ok tu delete l'élément du tableau et au suivant
Après meme problème si tu restart il existera plus ce tableau
ouais c'est sur, autant use une lib alors j'ai moins à me faire chier, merci du conseil ^^
Hello, vous sauriez pourquoi après le changement de prefix, plus aucune commande ne veut se lancer, aucun message d'erreur donc je ne comprends pas trop :x
if(command === "setup") {
prompter
.message(message.channel, {
question: `Choisissez un préfixe ( de base ${config.prefix} )`,
userId: message.author.id,
max: 1,
timeout: 300000,
})
.then(reponse => {
if(!reponse) { return message.channel.send("Vous n'avez pas répondu, vous devez donc reprendre la procédure à zéro."); }
else {
const rep = reponse.first();
config.prefix = rep;
message.channel.send(`${rep} est définit comme préfixe pour le serveur ${guild}`);
}
})
}
J'avais fais avant une commande setprefix sans le prompter, et ça marchait bien, mais avec le prompter ça bloque après le changement de préfix, et idk d'où ça vient
ui
Mais du coup tu l’édit à quel moment
Car là tu édites juste la variable qui contient ta config
Pas la config elle même
Donc si tu restart tu perds les modifs
oui ça je sais
mais j'allais le mettre en base après fin tout harmonisé
mais là je testais juste
Ah yes si tu restart pas ça devrait fonctionner par contre
Tu as log un peu voir ce que tu récup dans rep?
Ah yes
mais après faire les commandes avec le new prefix ça marche po
et du coup j'ai aucune info pour savoir si ça fonctionne, ni si il y a une erreur
problématique :x
Est ce que les commandes suivantes sont placés au même endroit que où tu edit le prefix ?
Car si c’est une scope ou fichier différent ce sera pas bon
no les commandes sont toutes dans le même event
Log config après ton send voir si il est bien edit et pareille à l’appel d’une autre commande log le aussi
j'ai log mon config.prefix
Voir si ça l’édit bien déjà
ah bag voilà
yep je look
alors eu il m'affiche juste le "devise" c'est un truc qui y est dans mon config
mais les autres je les vois po
Tu fais pas un édit de config quelque part ?
ou tu remplaces son contenu par un autre par hasard
bah du coup si la réponse est bonne je modif config.prefix par la réponse de l'user
config.prefix = rep;
Oui mais tu as que ça ? Au démarrage tu fais pas autre chose ou même après ? Dans ta config de base tu as bien un préfix dedans ? Car du coup mets 1 log avant l’appel de ta commande, 1 après l’édit et 1 dans une autre commande que tu appelles après l’édit pour vérifier
Mais log que config
et vérifie ce que tu as de base, après l’édit, et à l’appel après l’édit
C'est ce que je viens de faire
et avant tout est good
et après l'édit mon config part en vrille
il me sort on dirait mon rep + une partie de mon config
log juste rep pour voir
okay
log un peu tout et regarde ou ça coince
Oui bah du coup si tu fais config.prefix = rep tu mets tout cet objet dans prefix là 🤣
Récupère juste le content
donc rep.content
Oui
vérifie que content existe mais normalement oui
tout de façon si rep n'existe pas rep.content non plus donc
Logique
oui mais tu auras une erreur
Donc vérifie
C’est important de toujours vérifier on sait jamais
même si la proba est faible c’est toujours mieux
Sinon tu va te retrouvé avec de la purée de pommes de terre
encore une fois suffit juste dd tout log
oauip
Du debugging
Tu met des CATCH PARTOUTT
mais j'avais pas capté qu'il me remplaçait mon prefix par mon objet
xD
Bah le try catch il va arrêter l’exécution du reste du code si il y en a donc a use que si la suite ne doit pas arriver sans résultat
Oui mieux de prendre l’habitude car sur discord ça va mais en web c’est important
Hey ! Vous savez comment on fait pour faire une action quand le bot rejoins un serveur ?
client.on("guildMemberAdd", (member) => {
if (member.id === client.user.id) member.guild.owner.send("Hey ! J'ai rejoins ton serveur !")
});
J'ai tenté ça mais ça n'a pas fonctionné
c'est le bon event, log juste ce que tu recois et ce que tu compares pour voir si tout est ok ^^
et la ta condition =
Si l'id du nouvel arrivant est égale à l'id du bot
si je dis pas de connerie
Bah donc ta condition est tjrs fausse
Ah
il rentrera jamais dedans
Je ne pense pas non
c'est le bon event, log juste ce que tu recois et ce que tu compares pour voir si tout est ok ^^
@slim anvil J'utilise déjà cet event pour des messages de bienvenue et tout est ok :)
J'ai juste pas montré le code
Aucun rapport je te dis de log pour voir si justement tu recois bien la data a ce moment là
Voir si déjà le problème vient du fait qu'il se "log" pas lui même
Voir si déjà le problème vient du fait qu'il se "log" pas lui même
@slim anvil Effectivement il ne se log pas lui même
Je vais tester avec un ami si il log les autres je reviens
Tu as un event GuildCreate sinon je crois
Oui
Guildmemberadd c'est quand une personne rejoint un serveur
GuildCreate c'est quand une Guild est ajouté au client
client.on('GuildCreate', guild => {
guild.owner.send("Hey j'ai rejoint ton serveur !")
})```
Fast
Ouiiiii ça fonctionne merci
en 40s
pg
client.on("guildCreate", guild => {
guild.owner.send("Hey ! J'ai rejoins ton serv !")
});
Le même en plus x)
if(msg.guild.members.cache.get(player.id).roles.has(muteid)) return msg.channel.send("> :warning: **Cette personne est déjà mute**")
Hey ! Je suis passé en v12 donc j'aurais besoin d'aide sur cette commande qui ne fonctionne pas
TypeError: msg.guild.members.cache.get(...).roles.has is not a function
Je ne comprends pas
ça permet d'avoir un code plus uniforme au final
mais c'est vrai que c'est un bon bordel de passer de la v11 à la v12
Oui x)
oh t'en fais pas, j'ai fait du similaire sur le bot de gca
je suis même pas sûr que le truc est stable
Normalement j'ai tout passé en v12, j'ai rajouté les cache, les embes, les roles, etc
AH !
haha
il faut faire des rechercher/remplacer
c'est le seul moyen de pas en oublier
et les faux positifs tu les remet comme avant
oui
là ce que je fais actuellement c'est que je test les commandes 1 à un :'(
C'est long mais j'ai pas le choix
const player = client.users.cache.get(msg.mentions.members.first().id)
if(msg.author.roles.cache.highest.position <= player.roles.cache.highest.position) return msg.channel.send("> :warning: **Vous ne pouvez pas mute une personne qui a un rôle égal, où au dessus de vous**")
Hey c'est encore moi avec encore un problème que je n'arrive pas à résoudre :/
TypeError: Cannot read property 'cache' of undefined
:(
Problème réglé ☑️
j'ai get le player autrement :)
il fallait un member ...
pas un user
function statistiques_minecraftia(client) {
const statsguild = client.guilds.cache.get("715552266479992842")
if (statsguild === undefined) return
const statschannel = client.channels.cache.get("715552267574575113")
statschannel.messages.fetch()
.then((msgCollection) => {
msgCollection.forEach(msg => {
if (msg.id === "715556725780119553") {
const embed = new Discord.MessageEmbed()
.setColor("#2f3136")
.setDescription("> 🔄 **Voici les stats du serveur :**\n\n**📌 Nombre de personnes présentes :** `" + statsguild.memberCount + "`\n**📌 Nombre de salons présents :** `" + statsguild.channels.cache.size + "`\n**📌 Nombre de rôles présents :** `" + statsguild.roles.cache.size + "`")
msg.edit(embed)
}
});
})
}
Hey ! j'ai fait ce code mais ma console est spam par ceci :
(node:24) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 55)
(node:24) UnhandledPromiseRejectionWarning: TypeError: fields.flat is not a function
at Function.normalizeFields (/home/container/node_modules/discord.js/src/structures/MessageEmbed.js:443:8)
at MessageEmbed.setup (/home/container/node_modules/discord.js/src/structures/MessageEmbed.js:77:91)
at new MessageEmbed (/home/container/node_modules/discord.js/src/structures/MessageEmbed.js:18:10)
at embedLikes.map.e (/home/container/node_modules/discord.js/src/structures/APIMessage.js:164:40)
at Array.map (<anonymous>)
at APIMessage.resolveData (/home/container/node_modules/discord.js/src/structures/APIMessage.js:164:31)
at Message.edit (/home/container/node_modules/discord.js/src/structures/Message.js:421:105)
at msgCollection.forEach.msg (/home/container/index.js:304:29)
at Map.forEach (<anonymous>)
at statschannel.messages.fetch.then (/home/container/index.js:299:31)
(node:24) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 56)
Hey 👋
Pour le deuxieme avertissement (TypeError: fields.flat is not a function) ne le voyant pas dans ton code, je suppose donc que c'est directement dans discord.js; essaye de voir par ici: https://github.com/discordjs/discord.js/issues/3913
D'accord, ils ont l'air de dire que cela est lié a la version de node. Vérifie bien si ton node est en v12+ 😉
Faut que tu rajoute un catch aussi
function statistiques_minecraftia(client) {
const statsguild = client.guilds.cache.get("715552266479992842")
if (statsguild === undefined) return
const statschannel = client.channels.cache.get("715552267574575113")
statschannel.messages.fetch()
.then((msgCollection) => {
msgCollection.forEach(msg => {
if (msg.id === "715556725780119553") {
const embed = new Discord.MessageEmbed()
.setColor("#2f3136")
.setDescription("> 🔄 **Voici les stats du serveur :**\n\n**📌 Nombre de personnes présentes :** `" + statsguild.memberCount + "`\n**📌 Nombre de salons présents :** `" + statsguild.channels.cache.size + "`\n**📌 Nombre de rôles présents :** `" + statsguild.roles.cache.size + "`")
msg.edit(embed)
}
});
}).catch((error) => {
console.log( error );
})
}
pourquoi t’utilises pas game-server-query ?
Car c'est les stats du serveur discord
Si t'as l'id du message pourquoi tu get pas direct le message ? au lieu de get son channel puis de boucler sur chaque message
D'accord, ils ont l'air de dire que cela est lié a la version de node. Vérifie bien si ton node est en v12+ 😉
@hazy mirage Merci pour tes conseils mais ça vient de mon hébergeur, il vont me régler ça vite fait ;)
Coucou, des gens peuvent m'aider à faire un classement ?
Je m'explique j'ai un fichier JSON qui stock une valeur pour chaque utilisateurs et j'aimerais pouvoir savoir comment faire pour savoir qui en a le plus et tout...
Merci
{
"709064224252624936": {
"totalXP": 914,
"xp": 14,
"level": 3
},
"176740082340986880": {
"totalXP": 420,
"xp": 114,
"level": 2
},
"499535881800122401": {
"totalXP": 23,
"xp": 23,
"level": 1
},
"721022134469787708": {
"totalXP": 13,
"xp": 13,
"level": 1
}
}
Pour le coup la valeur totalXP
tu peux utiliser reduce
ou faire un sort tout bêtement
Si je dis pas de connerie tu feras un
array.reduce((a, a) => (a.totalXP > b.totalXP) ? a : b)
Ça va te sortir un objet et du coup normalement celui où totalXP est le plus grand
Donc évidemment le « array » c’est ton tableau
mon tableau en json ?
Oui tu vas venir le récupérer le stocker et tu viendras reduce dessus
Si tu l’appelles toto ce sera toto.reduce(...)
const levels = require('./level.js')
levels.reduce((a, a) => (a.totalXP > b.totalXP) ? a : b)
comme ça ?
et donc tu feras un const bestXP = levels.reduce(..)
log ton levels voir si tu récupères bien ton tableau déjà
levels.js c’est pas ton fichier json
yes good donc try maintrnant
ah mais c’est pas un tableau d’objet mais juste un objet qui contient des objets
Comment ça ?
bah c’est un objet pas un tableau c’est écrit 🤨
.array du coup
Et regarde ton json c’est {} pas []
Test quand même le .reduce
Mais sur un objet je suis pas sûr
Tu peux enlever le reduce (commente le) et fais juste un
console.log(Object.values(levels))
Regarde ce que ça te donne
Mais sinon de base ça aurait été mieux de faire un tableau d’objet que un objet avec pleins d’objet dedans 🤨
perfect
(je crois)
yes
const bestXP = Object.values(levels).reduce((a, b) => (a.totalXP > b.totalXP) ? a : b)
console.log(bestXP)
Ahhh tu veux pas que le premier t’es sur 
donc faut sort ?
en vrai oui tu changes juste le reduce en sort
Ça va te renvoyer un tableau
Mais du plus grand au plus petit
Tu auras qu’à garder les 3 premiers
ok mais du coup je fais une boucle for k, v ?
Ahh pour afficher les 3 premiers oui
(mais pas en mode glua j'ai capté)
yes pour ensuite les afficher tu boucles dessus
Oui merci
DESC ?
Plus grand au plus petit
nan j'ai plus rien
Object.values(levels).sort((a, b) => (a.totalXP > b.totalXP) ? a : b)
ahhh my bad
Trop bête attend
Object.values(levels).sort((a, b) => a.totalXP - b.totalXP)
Si je dis pas de connerie
si c’est pas bon att juste je sois sur pc car tel c’est relou
c'est l'inverse
mais perfect
voilà
j'ai juste changé ici : ```js
const bestXP = Object.values(levels).sort((a, b) => b.totalXP - a.totalXP)
inversé a et b
Merci de ton aide en tout cas 
Merci ^^
Merci Enzo, (si y'a que moi c'est pour pas faire d'erreurs et crash le bot j'ai vérif la taille de la table)
Top!
Bonjour,
Désormais je souhaite savoir la position actuelle du joueur (son classement), j'ai essayé avec des boucles for...
Mais je n'ai pas réussi
Merci
Comment ça ?
Ou tu cherches l’id de la personne dans le tableau
C’est la personne qui fait la commande pour voir tout ça ?
Pour voir où elle apparaît ?
Yes bah du coup tu peux me remontrer ce que donne le Object.values(levels)
const bestXP = Object.values(levels).sort((a, b) => b.totalXP - a.totalXP)
Ah oui on a plus l'id 
si tu l'as tu fais juste comme pour le sort mais ce sera
.findIndex(e => e.id === message.author.id)
et j'le met où ce code ?
ca va te renvoyer juste l'index (0, 1, 2 etc etc, du coup tu fais + 1)
const classment = Object.values(levels).findIndex(e => e.id === message.author.id)
C'est qu'il ne le trouve pas
Ton bot est encore en creation ? a ta place je changerai dès maintenant ton json, et le mettrait sous forme de tableau
ce sera + simple et + propre
tu auras plus besoin des Object.values etc
Mais je sais pas comment mis prendre
avoir un rendu comme ça:
[
{
"id": "xxxx",
"totalXP": 1000
}
]
et pas mettre l'id du user en clé
ça te donnerait un truc comme ça du coup
if (!xp.find(e => e.id === message.author.id)) {
const newUser = {
totalXP: 0,
username: message.author.useranme,
id: message.author.id,
xp: 0,
level: 1
}
xp.push(newUser)
}
ça c'est si tu veux passer sous tableau
Sinon tu peux garder ton objet et oui ajoute juste l'id dedans ce sera good
Oui, j'ai ajouté l'id
Okep bah du coup tu peux refaire avec le findIndex ca devrait etre good
édite ton json du coup et ajoute ton id à ton user
pourquoi stocker le username 🤔
Oui il peut le get avec l'id, après il a peut etre pas envie 
C'est surtout qu'il peux changer de username entre temps
Yes
juste l'id ça suffit ouais
Je me demandais, pour la commande Wiki que j'ai fait.. Si je pouvais vérif si la recherche que j'ai fait genre Pikatchu apparait dans le titre de l'article trouvé afin de pas avoir des réponses random
bah si tu récupères le titre tu fais juste un .includes(‘Pickachu’)
Mauvaise quote mais je suis sur tel
En gros si je fais >>wiki Pikachu.. dans le code je fais items[0].title.include(string)
Justement, c'est si il en a pas que je veux pas que ça donne un truc random parce que là genre si je >>wiki Naruto Uzumaki et que ça me sors un pokémon de type dragon...
Franchement...
Je te dis juste de checker que le items[0] existe etc
Pour pas avoir de canot read property xxx of undefined
non mais ça j’ai bien compris 🤣 je te dis juste de faire des vérifications
il te renvoie des résultats random si il en trouve pas
Non tu fais juste un
If (items[0] && items[0].title && items[0].title.includes(string)){}
Juste pour vérifier que le items0 existe
si il existe pas tu vas venir faire un include sur rien
donc tu vas avoir une erreur
items[ string ] c est si string est un index
Ok
Att
moi j'avais fais comme ça
Tu veux faire un clear ?
if ( command === "clear" ) {
if(!message.member.hasPermission("MANAGE_MESSAGES")) return message.reply("Vous n'avez pas la permission");
if(!args[0]) return message.channel.send("Veuillez enter un montant !");
message.channel.bulkDelete(args[0]).then(() => {
message.channel.send(`**__${args[0]} messages supprimés.__**`).then(msg => msg.delete({timeout: 2000})).catch(error =>{console.error(error)});
})};
Ah je vois
Bah non du coup
Le truc de Lartaxx te donne le nombre que toi tu as envoyés
Toi tu veux savoir le vrai nombre qu’il en supprime ?
. then(messages => console.log(Bulk deleted ${messages.size} messages))
yep genre /clear 90 supprime les 90 derniers messages
ahh d'accord
Sauf s'ils datent de plus de 14 jours
mais qu’il y a que 50
ouais je vois
Salut depuis qu'el que temps jsuis entrain de créer mon bot discord mais j'utilise que des commandes
bot.on('message', message => {
if (message.content === '!test') {
message.reply('test')
message.reply('test')
}
})
Donc ce serait pour savoir comment puis-je amener mon bot a aller chercher les commandes dans mon dossier commandes car j'ai déja regardez des tuto ou sur des forum ou sur la documentation j'aimerais savoir comment le faire exactement si c'est possible :)
Meric d'avance
tu pourrais tout simplement faire des const
je te fais ça
const args = message.content.slice(process.env.PREFIX.length).trim().split(/ +/g);
const command = args.shift();
et maintenant
if ( command === "!test" ) {
message.reply("test ok");
}
Humm Ok
Il faut que tu fasses un handler @brave coral
Mais j'ai pas compris totalement
J'ai pas appris ce qu'est était un handler je viens juste de commencer le js
sois tu uses celui de discord commando sois tu te fais le tiens
Y a pas mal de tuto youtube
Oui mais il explique pas vraiment en quoi consiste certaine choses
Il nous donne juste le codes et puis il explique pas en détail tout ce qu'on peut faire avec je trouve
Tu peux aussi utiliser les classes
Bonsoir à tous, quelqu'un a t'il déjà utilisé MongoDB avec Node.js ? J'aurai quelques questions à ce sujet...
Merci d'avance.
Poses-les et quelqu'un y répondra 🙂
@steel maple yes ?
#announcements
discord en PLS
Merci messieurs, alors j'envoie :
Je souhaite faire communiquer mon bot avec plusieurs collections d'une BDD MongoDB.
Grâce aux documentations, je suis arrivé à me connecter et récupérer mes collections dans des variables.
Par contre, j'ai vite compris qu'il ne fallait pas réutilisé la fonction connect à chaque fois car cela génère des erreurs malgré le fait que je ferme la connexion ou pas après utilisation...
Mais du coup, comment mettre à jour mes const lorsque ma BDD est modifié ?
à priori d'après mes habitudes sur des SGBD divers, tu devrais récup tes données non dans des const mais directement quant tu en as besoin, non pas via des connect mais via des requête de type fetch
je sais pas si ça fait sens, je vais essayer de m'informer + sur mongo pour t'aider un peu mieux
yes exactly
tu vas .find directement dans ta collection
pour venir récupérer les datas dont tu as besoin
Collection.find({}, async (err, items) => {
if (err) return err
if (items && items.length) {
console.log({items})
}
})
par ex
Effectivement, j'utilise la fonction .find pour récupérer les données dans mes collections.
Vous voulez dire que la fonction connect n'est pas nécessaire ?
Non tu te connectes qu'une fois
elle est nécessaire mais pour établir la connexion à la base de données
pas pour récupérer les données qui sont dedans
Effectivement j'y ai pensé et j'ai placé ma connection dans le fichier principal sans succès et je suis bloqué à ce niveau...
Comment partager le client MongoDBB (qui est connecté du coup) sur mes fichiers annexes ?
tu uses mongoose ?
Non j'utilise le pack Mongodb
j'ai un exemple de ce que j'avais fais y a un petit moment
mongoose
.connect(uri, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then( () => {
console.log('✅ MongoDB')
}).catch(err => {
console.log(err)
})
Yes merci, ça c'est ok pour moi.
Mais maintenant comment utiliser cette connexion sur un fichier command annexe par exemple ?
Rien de particulier 🤔
tu vas juste require mongoose dans ce fichier
require aussi ton Model
tu vas venir faire un
const item = new Collection({
_id: mongoose.Types.ObjectId(),
// etc
})
Collection = le nom de ton model j'ai juste mis un truc random
et ensuite faire un
item.save()
Après j'use mongo atlas (mongodb dans le cloud) c'est peut etre légèrement différent avec une bdd en local 🤔
Ça vient pas de moi content de le savoir :3
J'utilise également mongo sur le cloud
Celle proposée en Add-on par Heroku
Qu'est ce que tu appelles le Model stp ?
Le nom de ma collection à priori, dsl je débute...
Un model c'est ça en gros:
const exampleSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
userId: String,
fileUrl: String,
roleId: String
})
Ok je vois, cela est pour stocker un utlisateur qui vient de faire un "report" par exemple.
En fait, je prévois de rendre ma BDD accessible et modifiable via des formulaires sur un site Web par des tiers et que cela se répercute du coup sur le bot (exemple message de bienvenue Auto, ...).
"Je prévois", enfin j'essaie 😄
Pratique lorsque tu ne veux pas que tes administrateurs Discord accèdent à ton code
Pour l'instant je suis côté Bot et je cherche à récupérer les données pour les utiliser dans mes fonctions discord
Dans ce cas là, si tu comptes l'utiliser a gauche et a droite
crées toi une petite api
que tu appeleras dans tes bots et sur ton site 👍
Tu met le doigt sur un truc nouveau pour moi ^^
Cela est impossible sans cette api ou juste compliqué/absurde ?
Je pense que tu vas avoir des trucs redondants entre les 2 projets ce sera, je pense, plus simple d'avoir un seul endroit ou tu te crées des routes / controllers / models
Un nouveau challenge pour moi lol.
Quel language me conseil tu pour cette API avec node.js côté bot et PHP côté site internet.
nodejs coté back du coup au moins tu sais ou tu mets les pieds
après tu peux aussi le faire en php du coup a toi de voir ! 😄
Lorsque j'ai conçu le site en PHP, il n'était pas prévu de réaliser cette fonction ^^
Je présume que Node.js peut remplacer mon PHP côté back site internet ?
(c'est un tout petit site)
pk tu fait pas ton api sur le même projet que le site ?
puis si ta déjà commencé ton site en php autant le continuer en php au lieu de recommencer
Ok je vais suivre ton conseil.
En gros, mon PHP va lire et écrire dans la base et mon Bot envoyer des requêtes pour récupérer les valeurs lues par PHP.
Cela évite en effet que node lise de son côté alors que PHP le fait déjà.
Yes puis ça reste surtout plus maintenable d'avoir que un endroit qui fait "tout" au lieu de devoir modif ton code à 15 endroits différents à chaque fois ^^
Yes je comprends tout à fait ^^
Le nouveau challenge et une première pour moi sera de faire communiquer les deux ensembles ^^
Je n'ai aucune idée du niveau de difficulté ou de la charge de travail nécessaire...
C'est vraiment pas compliqué ^^
Ok dans tous les cas je vas tatter le terrain, je ne suis pas pressé car je réalise cela à titre perso.
Mais d'une simple création de bot à une autre je me retrouve propulsé à rajouter des trucs où j'apprends de nouvelles choses et j'adore ça 😄
Merci pour votre aide et vos retours 👍 🙂
Salut, il existe un event onBotCrash (ou un truc similaire)? Merci
par définition si le bot crash c'est que le processus a rencontré un problème... le fait qu'il y ait un log du crash est déjà un truc assez incroyable en soi
Un try catch sur tout le projet ferait l’affaire 
cela dit tu peux configurer l'environnement d'exécution du bot pour qu'un code s'exécute au moment du crash du processus
tu peux également juste bien gérer les erreurs sur le bot
Un try catch sur tout le projet ferait l’affaire
@hazy mirage C'est ce que je veux pas x)
enfin, si tu veux juste réaliser certaines actions lorsque le bot se déconnecte tu peux le faire via l'event 'disconnect' ou 'shardDisconnect' (je crois) sur la v12
mais c'est très rare de pouvoir faire un truc avec ça et je doute que ce soit ce que tu recherches
Non, j'aimerais quelque chose qui envoie l'erreur en cas de crash mais sans faire l'astuce de Pilot2 si c'est possible ^^
hmm, globalement son idée est pas complètement mauvaise
Y’avait un kappa 
si tu lances ton bot dans un script d'initialisation (du genre ton fichier index.js va appeler des fonctions pour lancer ton bot) tu peux faire de la gestion d'erreur à partir de là
mais c'est pas possible en général parce que les erreurs sont trop variées
Merci, je vais écouter Pilot je pense alors 
bah je viens de te dire que c'est pas une bonne idée
complètement
mauvaise
🤏
je veux dire dans le fond ça fonctionne, c'est juste pas une bonne idée
Sinon si tu utilises un pm2 ou autre, tu peux aussi intercepter les erreurs
Donc dans l'interceptor tu peux ajouter un webhook pour te notifier que ca a crash
Ouais j'ai PM2 mais il m'énerve à reste on h24
je t'ai donné 66546645 autres alternatives, tu peux ou pas les considérer c'est ton problème pas le mien
Bah c'est que ton instance node ne crash pas
Donc les erreurs sont gérables dans le bot directement
et je vois pas pourquoi tu voudrais pas que pm2 reste on en fait 🤔
mdr c'est clair "trop chiant ca reste ON" 
le principe c'est que pm2 héberge ton instance node, si tu veux pas que ton instance soit on tu veux pas que ton bot soit on tout le temps, donc t'as juste à l'arrêter 🤔
je comprends clairement pas le soucis
salut j'ai trouvé un prob pour remplir ça
pour créer un bot
pouvez vous m'aider svp
dans client.login tu dois mettre le token de ton bot
yep
ok
essaye d'espacer ton code 😉
faut le lancer
comment ?
pour l'instant j'ai collé mon token
mais j'ai pas compris le discord.js je sais pas le remplace avec quoi
ah! d'acc
oui
oui et tu écris node index.js
deja ecrit
fin si ton fichier s’appelle index
automatiquement
ok
node . Lance tout les fichiers
non il est pas allumé
node fichier.js
allume le fichier
oui
ouais je vois ça me le fais pas avec les bots mais sur les ftp
fais ok
et écris dans le terminal
juste ça
node index.js
attend
t’as installé node.js ?
et t’as npm i discord.js
?
Waw
mdrr
oui je l'ai installé
t’as npm i ?
Je peux lui passé des tutos ?
ui
Jamais eux cette erreur xzd
moi je l’ai des fois en ftp
t’as npm i ?
@oak turret non
pour apprendre à coder, il y a une multitude de tuto sur internet. Voici quelque lien qui pourrait t'être utile ! https://www.grafikart.fr/formations/debuter-javascript -> Apprendre les bases du JavaScript :langage_nodejs:
https://www.npmjs.com/ -> La documentation NPM :npm:
https://nodejs.org/en/download/ -> Pour télécharger Node.JS :langage_nodejs:
https://nodejs.org/en/docs/ -> La documentation Node.js :langage_nodejs:
https://discord.js.org/#/docs/main/stable/general/welcome -> La documentation discord.js :discordjs:
https://www.youtube.com/playlist?list=PLssd99LQmGUekT80WRpyZo2GWO9U5wKWq -> Une série de tuto orientée discord.js en création de bot :emoji_2: