#javascript-typescript
1 messages · Page 44 of 1
Car là ce sera pas bon finalement comme ça
C’est là où tu appelles ta fonction que tu dois await
Pour attendre l’exécution de celle ci
Voilà là en gros tu auras
const check = await sql.sendSQL....
Ah ok, et j'dois mettre tout ça dans une function du coup j'imagine
Que j'appelle en bas
Bah si c’est pas déjà dans une fonction tu peux use une promise
Ah yes je connais pas encore ça je vais aller voir
Tu vas voir c’est tout bête ça va en gros attendre l’exécution et quand ce sera bon hop ça passe à la suite
bon allez j’y goo bon courage wasied
C'est bon j'ai compris merci pour ton aide 😉
Hello ! j'aimerais savoir comment dire quand il execute la commande !test et que c'est bien le user 283315291986067457 et qu'il est bien dans le channel 617677968474636298 et bah sa execute un script après, j'ai penser a un if(message.member === "283315291986067457 ") mais sa a par l'air de marcher
Si tu utilises la librairie Discord.js
if (message.author.id == '283315291986067457' && message.channel.id == '617677968474636298') {
// ton script
}```
Ah cimer 🙂
Bon désolé mais je galère de ouf avec je comprend pas les objets
En gros, j'aimerai bien renommer tout le monde sur mon serveur
En un coup
Genre dès que le bot se lance, tout le monde est renommé "Test" par exemple
Mais je pense qu'il faut encore faire des async et tout.. mais ça marche pas j'ai pas pigé l'utilité de ce truc
Quelqu'un peut m'aider 😦
t’es pas obligé d’utiliser des async
Mais alors je pige rien aux objets parce que rien ne fonctionne
tu peux juste utiliser les Promises mais là t’en as pas besoin (à moins que tu veuilles log quand t’as fini de renommer les gens)
Fin en même temps j'ai commencé sur le tas sans regarder de tutos du coup j'me retrouve paumé c'est sûr..
les objets c’est le même délire que les tables en Lua
donc devrait pas trop être paumé
si tu veux parcourir sur une collection de membres, tu peux members.entries() dans un for [k, v] of 🤔
bot.on('ready', function () {
console.log("Je suis connecté !")
const members = bot.guilds.get("511589599466749972").members;
for (let[k, v] of Object.entries(members)) {
console.log(`key ${k}, value ${v}`);
}
});
Rien que ça, ça ne me print rien
Et je comprend pas pourquoi
parce que members n’est pas un object au sens strict mais une Collection
Ah okey, comment je peux faire du coup? :/
Et Collection est hérité de Map donc tu peux utiliser la méthode entries dessus
donc members.entries() au lieu du Object.entries( ... )
wé t’as vu
Ok première étape maintenant va falloir test la suite ^^
Ok bah ça marche
Jtm
Merci 😄
Vu que j'ai testé en condition réelle tu saurais pas comment remettre les nicknames d'origine aux gens? lul
peut-être en récupérant leurs username?
Ah bah yes bien vu merci

const members = bot.guilds.get("511589599466749972").members;
for (let[k, v] of members.entries()) {
var userName = v.username.split("").reverse().join("");
if (userName) {
v.setNickname(userName);
}
}
@west plover désolé de te faire chier avec ça, mais pourquoi est-ce que par exemple v.username est égal à undefined dans ce code ?
J'ai du mal à comprendre ça m'arrive souvent malheureusement
Go utiliser la méthode foreach qui facilite grandement la lecture
et évite les problèmes de manière générale
members.forEach((k,v,c) => {
// k = clé dans la Collection, ici l'id du GuildMember
// v = valeur dans la Collection, ici un GuildMember
// c = la Collection sur laquelle on réalise un foreach, donc members
let usrName = v.username.split("").reverse().join(""); // je sais pas pourquoi tu veux faire ça mais osef après tout
v.setNickname(usrName).catch(console.error);
});```
@lone flax parce que v est un membre est pas un user, donc tu dois v.user.username pour récupérer son nom
Ok merci pour votre aide ;)
Hello ! je n'arrive pas a faire en sorte de modifier le message du joueur quand il fait !test et bah le bot il dois modifier le contenu du message !test en un autre message, j'ai essayé
message.edit("coucou !") mais ca marche pas
tu peux pas modifier le message d'une autre personne
ah ok :/
et pour faire en sorte que quand ont react un emoji sa supprime le message du bot c'est possible ?
ok
salut, j'ai un soucis je fait une commande !ban @name raison
et pour recup juste la raison j'ai fait ca
let raison = message.content.split(" ").slice(2);
mais le probleme c'est que si il y a un espace alros ca saute de ligne
Bonjour a tous, est-ce que quelqu'un connait la "fonction" pour créer un channel si la commande !createchannel a été utilisé ?
Merci de m'avoir donné, un site que je fouille depuis 30 minutes 🙂
Bah il est simple le site
"que je fouille depuis 30 minutes 🙂"
Tu crois que j'ai pas cherché ?
Bah oui
Car tu t'y prend mal ?
No ?
Et tu pense que sans code ont va pouvoir t'aider a résoudre un problème ?
Je demande juste la fonction c'est tout 
guild.createChannel
Bon c'est bien la fonction que j'utilisais donc ça vient pas de là merci Taink
je la trouve plus dans la doc tiens 🤔
same
Tout ce que j'i trouvé c'est un event
ça dépend de ta version je pense
la v12 est sortie donc y a certains trucs qui ont disparu ou ont étés déplacés
Ben je viens de refaire le bot donc avec les modules après là a chaque code que j'essaye "guild is not defined"
bah guild tu dois l'obtenir
C'est ce que j'utilse
déjà t'as quelle version de Discord.js ?
donc la 12
J'ai installé les modules y'a même pas 1/2 heure
ouais, ça doit être la 12
je t'avoue que je connais pas bien cette version donc il vaudrait mieux lire la doc un peu
ça je pense
je te laisse jouer avec
Eh ben ça a marché !
j'ai l'impression qu'il faut faire message.guild.channels.create(...)
oui ça a marché après 80 ans de rage ça marche
Je crois que j'ai un backup d'une autre version mais je vais garder celle là pour l'instant
De toutes facons, il faut s'adapter
@crimson fern c'est plus facile à dire qu'à faire -> par exemple pour le bot de gca on a plusieurs milliers de lignes de code à réécrire juste pour s'adapter à la nouvelle version... ça va demander un temps de réadaptation d'autant plus que pour l'instant peu de gens l'ont utilisé cette fameuse version
donc l'aide en ligne disponible est minime
qlq si connais avec le bot voicemaster ?
salut j'ai une petite question
j'aurais besoin d'aide pour recup des infos via un site
en gros sur gmod je fais un http post et j'aimerais bien recevoir les information sur mon bot discord
Bonjours
Je voudrais savoir c'est quoi le plus simple entre le lua le java et le python pour commencer
Merci
Ça dépend de ce que tu connais le mieux
Ok
Les trois se valent je dirais
Je comprend pas
J'ai beau réinstallé les dépendance etc
Même nodejs
Mais il ne veut pas fonctionné
. . .
quelle version de discord tu utilises ?
12
.fetch()
On ne peut plus get
Pas avec la version 12 à croire
La v12 à changé plein de trucs @keen narwhal, je l'ai dit la dernière fois
ils changent le nom de leurs méthodes
c'est normal c'est un changement majeur
donc faut s'y attendre, suffit de juste bien mettre la bonne version dans ton package
Tu peux toujours retourner à la v11 hein @keen narwhal
"discord.js": "^11.5.1",
dans ton package.json
maintenancetable = {
status: 0,
reason: reason,
hours: hours,
minutes: minutes,
time: time
}
console.log(maintenancetable);
fs.writeFileSync("../maintenance.json", JSON.stringify(maintenancetable));
Est ce que vous savez pourquoi est ce que ma table ne se marque pas dans mon fichier.json ?
Je viens de capter mon erreur mdr
(
const fs = require('file-system')
const JSON = require('JSON')`
)
Je mets fs Fireless ?
À la place de file-system ? Ouais
Niquel ! Mercii !
client.on("ready", async () => {
if (!data.id || !data.musique) return;
const channel = await client.channels.fetch(data.id);
const connection = channel.join()
const dispatcher = connection.play(data.musique, { highWaterMark: 12 });
});```
TypeError: connection.play is not a function```
:/
Pourtant dans la maj ils ont modifier PlayStream en play
essaye déjà de voir si ton connection n'est pas undefined
si le problème ne vient pas de plus haut quoi
Aucune erreur mais aucune musique
client.on("ready", async () => {
if (!data.id || !data.musique) return;
const channel = await client.channels.fetch(data.id);
const connection = await channel.join()
const dispatcher = connection.play(data.musique, { highWaterMark: 512, volume: true });
});```
VoiceConnection {_events: Object, _eventsCount: 4, _maxListeners: undefined, voiceManager: ClientVoiceManager, channel: VoiceChannel, …}```
J'ai un petit problème de syntax json
J'essaie de mettre plusieurs valeurs dans une "table"
sauf que j'obtiens cette structure
Au lieu de cette la
if (!warndata[user.user.id]) {
warndata[user.user.id] = {
"warns": [
""
],
};
}
warndata[user.user.id].warns += reason;
fs.writeFileSync("./warndata.json", JSON.stringify(warndata));```
D'accord je te remercie
J'ai fais des recherche et je ne trouve pas comment supprimer un une value d'un array :/
pop?
Alors j'ai trouvé, mais sa la supprime pas mais la define en null :/
delete warndata[user.user.id][args[1]];```
si tu veux supprimer tu splices ou tu filter ton array
le filter c’est cool car il te renvoie un tableau direct sans la/les valeurs
le filter ça ressemblerait à ça à peu près, array.filter(item => item._id === id)
Et il va supprimer tous les éléments avec cet id
const queue = new Map();
client.on('message', async message => {
if (message.author.bot) return;
const serverQueue = queue.get(message.guild.id);
if (!message.content.startsWith(prefix)) return;
if (message.content === prefix + "play") {
execute(message, serverQueue);
return;
} else if (message.content === prefix + "skip") {
skip(message, serverQueue);
return;
} else if (message.content === prefix + "stop") {
stop(message, serverQueue);
return;
} else {
message.channel.send('Tu dois être en vocal pour faire cette commande !')
}
})
L'image explique le problème
Car t'as mis un else qui envoie un message sans une commande spécifique
Mais un message commencant par !
C'est pas ça le problème
Ah
Ah oui j'avais pas vu
pourquoi pas faire un message.content.slice(1) == 'play' cependant ?
ah
nan
ok
c'est littéralement le message que tu as mis qui explique ton erreur
j'avais pas vu ta fonction execute
@keen narwhal va dans un channel vocal
et retente ta commande
c/c C'est a dire (Je suis un peux con x))
copié/collé
Je les fait a partir d'une vidéo
Ok
en gros ton truc t'as fait un else qui affiche le machin vous devez etre en vocal pour faire cette commande
sauf que n'importe quel message va trigger la commande
@crimson fern t'avais raison dsl j'ai juste mal lu
Np
Des que je suis en vocal sa fait pareil
Ouais
ok
dans ta fonction execute remplace ça
par message.member.voice.channel
il faut lire la doc
Je vais essayer
Salut, j'ai besoin d'aide pour les Promise...
J'ai une fonction qui fait des requêtes SQL et qui retourne automatiquement la valeur récupérée, mais malheureusement il y a un délai et donc ça retourne une valeur nulle avant même qu'on ai été la cherchée.
Il me faudrait de l'aide avec les Promise ou les Async funcs parce que j'ai du mal, merci ^^
Et c'est résolu 🙂
Bonjour bonjour, je commence tout juste dans la création de bots en Discord.JS et je souhaiterais faire une commande où quand on l'a fait ça fait une réponse au hasard dans une embed (ça je sais faire une embed)
Par exemple j'écrit ".fromage" et ça me mets une image au hasard de fromage 🙃
Mais je ne sais pas du tout comment fonctionne le random 😬
Ça dépend de comment tu as stocké tes images
Mais globalement tu dois utiliser Math.random() : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random
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...
Merci, je vais m'informer sur tout ça et comment je vais stocker les images 🙂
Me revoilà !
Bon du coup j'ai fait mon petit code qui choisi entre deux personnages d'un jeu et qui le mets dans un embed :
if (msg.content === '$ac-ours') {
let o_random = getRandomInt(2);
if (o_random === 0 ){
const o1 = new Discord.RichEmbed()
.setColor('#9B65C9')
.setTitle("Doudou")
.setDescription("Vous êtes tombé sur Doudou 🐻")
.setImage("https://cdn.discordapp.com/attachments/685889722190790661/685889749365424157/175px-Dozer_PG.png")
.setFooter('Demandé par :', msg.author.username,msg.author.avatarURL)
msg.channel.send(o1);
}
if (o_random === 1 ){
const o2 = new Discord.RichEmbed()
.setColor('#A36C74')
.setTitle("Oursula")
.setDescription("Vous êtes tombé sur Oursula 🐻")
.setImage ("https://cdn.discordapp.com/attachments/685889722190790661/685889814087991314/latest.png")
.setFooter('Demandé par :', msg.author.username,msg.author.avatarURL)
msg.channel.send(o2);
}
}```
Mais lorsque je fait la commande ($ac-ours), ça ne fait rien et cette erreur apparaît dans ma console :
```js
ReferenceError: getRandomInt is not defined```
(plus tard je compte en mettre beaucoup plus)
tu n'as pas définis le fonction qu'il y a dans la doc je suppose, cette fonction n'est pas native
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
Ah oui c'était ça, ça fonctionne, merci énormément 😄
Hey salut
j'aimerais bien savoir quelque chose
je fait actuellement un système qui supprime les messages de personnes quand on rentre la commande -msgsclear @mention
J'ai fait un embed qui s'envoie et qui dit suppression en cours
et j'aimerais que l'embed soit supprimé une fois la commande finie (une fois que les messages de la personne mention soit supprimés), mais impossible j'y arrive pas
Voici mon code
if (msg.guild && msg.content.startsWith(prefix + 'msgsclear ')) {
msg.delete()
const deleteper = msg.mentions.members.first();
const chargementsup = new Discord.RichEmbed()
.setColor('#ff0000')
.setAuthor('Suppression des messages de ' + deleteper.displayName + ' en cours...', 'https://cdn.discordapp.com/emojis/645226752091619338.gif?v=1')
msg.channel.send(chargementsup)
msg.channel.fetchMessages()
.then((msgCollection) => {
msgCollection.forEach(msg => {
if (msg.author.id === deleteper.id) {
msg.delete()
}
});
});
//J'aimerais que ça se supprime à ce moment là !
}
La suppression de messages fonctionne parfaitement
mais voilà
merci de me mention
@cyan iron
Je sais pas si c'est la meilleur idée, mais tu peux faire un .then
Si le mec a 400 messages, tu vas en delete 400 donc 400 requetes d'un coup ? je connais pas le rateLimit de discord
mais y a moyen que sur certains cas tu manges un 429
Et comme tu gères nul part tes erreurs
const chargementsup = new Discord.RichEmbed()
.setColor('#ff0000')
.setAuthor('Suppression des messages de ' + deleteper.displayName + ' en cours...', 'https://cdn.discordapp.com/emojis/645226752091619338.gif?v=1')
msg.channel.send(chargementsup).then(c => {
msg.channel.fetchMessages()
.then((msgCollection) => {
msgCollection.forEach(msg => {
if (msg.author.id === deleteper.id) {
msg.delete()
}
});
});
}
c.delete()
)}
ça n'attendra pas la fin du delete pour le remove
const chargementsup = new Discord.RichEmbed()
.setColor('#ff0000')
.setAuthor('Suppression des messages de ' + deleteper.displayName + ' en cours...', 'https://cdn.discordapp.com/emojis/645226752091619338.gif?v=1')
msg.channel.send(chargementsup).then(c => {
msg.channel.fetchMessages()
.then((msgCollection) => {
msgCollection.forEach(msg => {
if (msg.author.id === deleteper.id) {
msg.delete()
}
});
})
.finally(c.delete());
}
)}```
et là en effet sur 400 messages ça va faire une belle erreur
Nice merci ça a l'air de fonctionner
Je test
Ouais non ça marche pas...
Il se supprime tout de suite après
bawi
bah si tu supprime tout les messages en 0.5 secondes c'est normal qu'il se supprime "instantanément" si tu veux qu'il reste quelque seconde, il faudrais que tu ajoute un setTimeout avant de del ton richEmbed
Non justement les messages sont longs à se supprimer
Juste petite question comment je fais pour chopper l'ID d'un message que j'ai envoyé avec le bot
Quand je l'assigne à une variable ça marche pas
AH peut être avec un fichier.json
Oula non
Dans une fonction asynchrone, tu fais par exemple
let msgId = (await chan.send(...)).id
Ça doit être un peu différent en réalité mais je suis sur téléphone
Oulah
Euuh
Await j'ai jamais utilisé
J'avais vu un tuto sur ça
Mais je vais regarder apres merci 🙂

Utilise les promises au lieu d’await sinon
Non mais j'ai trouvé le problème
en fait c'est au niveau de mon code qui supprime les messages
c'est à moitié bugé
c'est pas grave
Si je connais rien des 3 sorte de développement c'est quoi le plus simple
De commencer par apprendre un des 3 langages avant de vouloir utiliser des libs 
Le javascript
guild.roles.forEach(r => {
msg.author.send("*Nom du rôle :* `" + r.name + "` | *Couleur du rôle :* `#" + r.color + "` | *ID du rôle :* `" + r.id + "` | Position : " + r.position)
});
Ca affiche les rôles du serveur
Avec leur nom, couleur, etc
Comment je fais pour les envoyer dans la bonne position
C'est a dire dans leurs bonne position ?
Oui
En fonction de leur position
J'ai mis r.position au pire pour le voir mais bon ce serait plus visible de le faire directement plutôt que de chercher l'ordre
Après si vous savez pas c'est pas grave
Tu vois dans le bon ordre comme ça
Et que dans ma liste ça fasse ça
Parceqye là ça fait ça
Pas ouf quoi
Aaah attends
Si je fais un tableau
Ptn j'ai eu une idée
Si je vais un tableau avec un élément une phrase
tu sort
si la position est un number
ca va le faire tt seul
de te trier ton array dans l'ordre asc ou desc
J'ai pas compris
Tu veux les afficher du plus grand au plus petit en terme de position ?
sur ton guild.roles tu fais un .sort()
Il va te permettre de comparer a et b
donc la par exemple a.position - b.position
et du coup il va te les ranger par ordre desc
guild.roles.sort((a, b) => a.position - b.position).map(item => {
msg.author.send(`*Nom du rôle*: *${item;name}......`)
})
par ex
a et b correspondent a ta premiere valeur de ton tableau donc guild.roles[0] et b guild.roles[1] ou l'inverse mais je crois que c'est ça
Ah oui mais j'ai pas de tableau
Ah non j'ai rien dit ok
Ok je vais regarder quand je serais chez moi
Quelqu'un sait comment stocker un objet (.Channel) dans un doc txt pour pouvoir le réutiliser par la suite
On est sur du python
C’est horrible en Python 😭
Ou alors tu passe en JavaScript c'3st mieux
tu veux stocker un ou plusieurs objets ? En soit juste un file = open("myfile.txt","w") file.write(myObjectInStr) puis le récup avec file = open("myfile.txt","r") str = file.read()
puis le l'instancier en type que tu veux
si tu en veux plusieurs open ("myfile.txt", "a") pour en ajouter str = file.read() pour lire, puis filter(lambda k: 'id=0000000000000000000000000000000' in k, str )
Je ne vais pas passer en JavaScript car c'est mon projet de fin d'année et on ne connait pas vraiment le JavaScript
Je vais essayer ta solution Frankich
Bonsoir , Un amis ma passez un bots discord mais je ne sais pas comment le faire marcher qui pourrais m'aider ?
Bah envoie nous le code x)
Ok :
@cyan iron alors ?
Ces a dire ?
Ouf
Mais ces que il a plein de ficher et je sais pas comment lancer
Bah ton ami il est pas cool si il t'as tout balancé comme ça
Déjà est-ce que t'as visual studio ?
Ouep
Mais il a pas le config.json
Envoie un screen de ton dossier stp
Ok attend
Pas besoin du config si il l'appelle pas
gulpbabel chépakoa là
ah
c'est pas le fichier babel qu'il faut run lool
car sur node certaines fonctions dispo en web ne sont pas encore dispo dessus par ex
voilà là ici
tu node index.js
mais chez pas si mon config.js et bon
bah oui
Et bah tu vérifies
tu as npm i avant ?
Oui x)
ben il ma dit il la pris sur internet x)
après j'en n'ai 1 autre mais il crash H24
toute les commandes bug
c'est qu'il est mal fait
C'est pas safe du tout
Tu sais que le mec il introduit un programme qui détruit ton serveur discord c'est nimportequoi
Ca existe
ah :/
Ou alors carrément un virus quand tu dl le dossier
Bah oui faut faire gaffe à ce que tu installe
et meme un dinosaure
j'allais te le dire @slim anvil
@slim anvil npm -g --add-python-to-path install windows-build-tools node-gyp Cette commande elle sert a quoi tu peux me dire ?
Sa va pas installé de merde dans mon PC ?
Je doit mettre sa dans PowerShell on ma dit
ca va faire un truc a mon PC ?
Ok normal que sa reste figé
ça veut dire que c'est en cours, il faut simplement le laisser faire
ça peut prendre du temps c'est tout
J'ai enfin crée mon bots finis 🙂
@keen narwhal la même je viens de le finir aujourd'hui ^^
A oui toi il et plus styler 😅
J'ai mis 2 mois pour le faire mdr
tu as quoi dessus ?
Vien privė
@fringe wyvern ?
rien
@cyan iron il parlais d'un autre msg qui a été del
Ah ok
if (msg.guild) {
const bonjourtext = msg.content.slice(prefix.length).trim().split(/ +/g);
QD(msg.author.id)
if (!msg.author.id === "618796535869866004") {
if (!client.quest[msg.author.id].badge_bjr === true) {
for (let pas = 0; pas < bonjourtext.length; pas++) {
if (bonjourtext[pas] === "Bonjour" || bonjourtext[pas] === "bonjour" || msg.content.startsWith('Bonjour') || msg.content.startsWith('bonjour')) {
msg.react("656029708907053110")
msg.member.addRole("681874519077683220")
msg.channel.send("Quête réussie, tu obtient le badge suivant : `👻`").then(msg => msg.react("👻"))
client.quest[msg.author.id] = {
badge_bjr: true
}
fs.writeFile("./quests.json", JSON.stringify(client.quest, null, 4), err => {
if (err) throw err;
});
return;
}
}
}
}
}
if (msg.guild) {
const firetext = msg.content.slice(prefix.length).trim().split(/ +/g);
QD(msg.author.id)
if (!msg.author.id === "618796535869866004") {
if (!client.quest["Fire badge :" + msg.author.id].badge_fire === true) {
if (cooldownFire.has(msg.author.id)) { }
else {
for (let pas = 0; pas < firetext.length; pas++) {
if (firetext[pas] === "🔥" || msg.content.startsWith('🔥')) {
client.quest["Fire badge :" + msg.author.id] = {
badge_fire: false,
badge_fire_count: client.quest["Fire badge :" + msg.author.id].badge_fire_count + 1
}
fs.writeFile("./quests.json", JSON.stringify(client.quest, null, 4), err => {
if (err) throw err;
});
cooldownFire.add(msg.author.id);
if (client.quest["Fire badge :" + msg.author.id].badge_fire_count >= 20) {
client.quest["Fire badge :" + msg.author.id] = {
badge_fire: true
}
fs.writeFile("./quests.json", JSON.stringify(client.quest, null, 4), err => {
if (err) throw err;
});
msg.member.addRole("681875077951651840")
msg.channel.send("Quête réussie, tu obtient le badge suivant : `🔥`").then(msg => msg.react("🔥"))
}
return;
}
}
}
}
}
}
Bonjour, vous êtes mon dernier espoir, j'aimerais savoir pourquoi ca fonctionne une fois sur deux ? Ca viens du return ?
lequel bout de code
fais une capture d'écran de ton editeur ce sera + visible que le codeview de discord
Bon deja le if (!message.author.id === '')
c'est pas bon
!message.author.id signifie si il n'y a pas d'id
Ah oui ok x)
c'est message.author.id !== ''
same, pas besoin de vérifier si
client.quest[].badge_bjr === true
Bah ca en fait partie
Parceque ça je l'ai rajouté après
Hop c'est bon
les methodes que tu appeles du genre msg.react, msg.channel.send, met des await devant, pour attendre que chaque soit fini pour passer à la ligne suivante aussi
si t'as un truc qui va plus vite que l'autre ca peut te faire merder le reste de ton code
Ta condition pour checker le bonjour, tu fais juste ça à la place aussi, ce sera plus propre
if (bonjourtext[pas].toLowerCase().includes('bonjour')) {
//code here
}
pas besoin de faire les 4 checks, celui ca suffira
Alors, je ne sais pas si tu stockes autre chose de base dans ton file a part le badge_bjr, mais là tu vas effacer toute la data que le user possédait
Yes
ca le met en miniscule
le toLowerCase
ok j'ai compris
En gros ca prend le mot ca le met en miniscule c'est ça ?
et ca verif si c'est bonjour du coup
ok nice
yes, et ensuite je regarde si dans la string il y a le texte bonjour
Du coup pour ton client.quest[id] etc
Oui
tu peux soit faire
client.quest[msg.author.id]['badge_bjr'] = true
// ou
client.quest[msg.author.id] = {
...client.quest[msg.author.id],
badge_bjr: true
}
mais pour le 2ème c'est quand a la limite tu as + de data a ajouter que un seul champ
du coup tu peux virer ton return, il aura pas grand intéret comme tu as riend 'autre après
Euuh ? J'ai pas compris
toi actuellement pour activer le fait qu'il ai dit bonjour et le stocker tu fais ça
Oui
Sauf que si par exemple tu stockais d'autre truc dans le user associé a cet id tu vas tout écraser
car tu réecris complètement l'objet là
Du coup si il avait le badge_fire a true
il va le perdre
entout cas tu vas perdre la data de ton côté
Yes
Ca c'est super merci
Parceque j'ai rencontré des pb avec ça
J'ai voulu faire un répertoir par personne
Je vais pouvoir le faire
Yes
Le fs.writefile je le laisse ?
yes tu vas en avoir besoin pour ajouter ta data du cp
ok
Du coup pour ton autre screen je te laisse t'occuper, mais c'est globalement les memes problèmes
client.quest[msg.author.id]['badge_bjr'] = true
fs.writeFile("./quests.json", JSON.stringify(client.quest, null, 4), err => {
if (err) throw err;
});
Du coup c'est ça ?
Ouais il faut que je refasse pas mal de trucs concernant mon .json aussi
Du coup juste si tu peux faire à la place
const newMessage = await msg.channel.send('....')
if (!newMessage) return // check si tu as bien le message
await newMessage.react('emojici')
Euhh je connais pas fs plus que ça, deja use mais si ça écrit bien dans ton fichier je pense que oui haha
Euuh après au niveau du msg.channel.send('").react("")
Ca ca marche pour l'instant
Mais après ca change grand chose ou pas ?
oK D4ACCORD
ca évite d'avoir des .then ou catch partout
Ok
pas fan du chaining
D'ailleur en parlant de catch j'en utilise pas x) C'est mauvais on me l'as dit
Tu gères jamais si tu as des erreurs du coup
Oui il faut que je le mette en place
Mais en fait j'ai pas trop compris comment ça fonctionnait
Bah en gros tu peux avoir un
try {
const data = await .....
} catch (err) {
await message.channel.send('oops une erreur est survenue')
}
et à partir du moment ou t'as un requête qui saute, ca va dans le catch
Ah ok d'accord
Après voilà le truc c'est que si tu as des requetes qui sont pas forcément grave si ca plante car tu peux faire autrement bah tu vas aller direct dans le catch => du coup c'est fini
Donc encore une fois tu peux faire tout simple
const user = await message.guild.....
if (!user) return message.channel.send('Désolé utilisateur inconnu')
const xxx = user.send('yo')
par ex
du coup là tu vas gérer le fait que tu n'as pas de user donc il essayera pas d'envoyer le 'yo'
Merci 😄
@slim anvil Le coup du await fonctionne pas
Le bot ne veux pas start
Ca met une erreur sur le await
Tu dois etre dans une fonction asynchrone
ton client.on('message', async (...) =>....
par ex
Ah ok
@slim anvil Y'a un moyen de calculer le temps qu'à passer un membre sur un vocal ?
[le temps où il rejoint] - [le temps où il quitte]
Comme l’a dit taink
Aaaah
@timid loom @slim anvil Du coup vous connaissez la commande ou pas .... Je trouve pas 😐
avec l’évent voiceStateUpdate
Merci
voilà
Comment faire une commandes de hug exemple
/hug @personne
sa send
${message.author.tag} Vous fait un gros bisous @personne
msg.mention.first() sera la première personne mentionnée dans la commande
Et le reste tu sais faire j'imagine
Vais essayer
@cyan iron msg.mentions.users.first()
Ah oui oups 🤭
PS: Desole de la mention j'avais pas vu le decalage entre ton message et maintenant
Bonjour quelqu'un pourrait m'expliquer comment faire un bot status gmod server
https://www.npmjs.com/package/steam-server-status @keen narwhal
client.on('message', message => {
if (message.content === prefix + "hug") {
if (message.mention.user.first === undefined){
message.channel.send('Vous n\'avez pas séléctioner un membre')
let member = message.mention.user.first
let auth = message.author
message.channel.send(`${auth} as dit ${message.content} à ${member} !`)
}}})
=> if (message.mention.user.first === undefined){
TypeError: Cannot read property 'user' of undefined
Première foi que je fait une commande de se type x)
Ça change rien au reste
Je commprend pas trop c'est truc la
juste de se relire et avoir la doc a proximité ça suffit
Il reste une erreur maus je vais essayer de me débrouiller
C'est quoi l'erreur @keen narwhal
Dit moi je peux t'aider
j'attends comme un con la réouverture de paladium
Oof tu va devoir attendre
😢
Quand je fait *hug sa fait aucune erreur (cool)
mais quand je fait *hug <member> sa fait rien du tout :/
//--HUG--\\
client.on('message', message => {
if (message.content === prefix + "hug") {
if (message.mentions.users.first === undefined){
message.channel.send('Vous n\'avez pas séléctioner un membre')
let member = message.mention.user.first
let auth = message.author
message.channel.send(`${auth} fait un bisou à ${member} :kissing_heart:`)
}}})
ton prefix c'est * j'imagine
t'as oublié le s encore
a let member =
x)
et normalement ça fonctionne
client.on('message', message => {
if (message.content === prefix + "hug") {
if (message.mentions.users.first === undefined){
message.channel.send('Vous n\'avez pas séléctioner un membre')
let member = message.mention.user.first
let auth = message.author
message.channel.send(`${auth} fait un bisou à ${member} :kissing_heart:`)
}
}
})
ça c'est ton code une fois indenté
Je suis nul pas croyable
@timid loom le s
J'oublie les s
@keen narwhal
Je suis là
fait clic droit format document
tu va sur ton .js
et tu fait clic droit
et tu clique sur format document
c'est miraculeux
xD
Je sur Visual Studio Code , pas besoin de mettre en format
Bah si vu comment t'as envoyé l'autre en haut y'a besoin
client.on('message', message => {
if (message.content === prefix + "hug") {
if (message.mentions.users.first === undefined) {
message.channel.send('Vous n\'avez pas séléctioner un membre')
let member = message.mention.user.first
let auth = message.author
message.channel.send(`${auth} fait un bisou à ${member} :kissing_heart:`)
}
}
})
J'ai fait se que tu ma dit pis voilà le résulta
Ouais
et il y a un gros problème
member sera toujours undefined
else: au niv du message.channel.send('Vous n'\avez séléctioner un membre')
client.on('message', message => {
if (message.content === prefix + "hug") {
if (message.mentions.users.first !== undefined) {
message.channel.send('Vous n\'avez pas séléctioner un membre')
let member = message.mention.user.first
let auth = message.author
message.channel.send(`${auth} fait un bisou à ${member} :kissing_heart:`)
}
}
})
Ou ça il me semble
c'est ça non @timid loom
Je suis pas sûr de mon coup avec le !==
Bon
message.content sera toujours égal à *hug, sinon tu fais rien
c'est ce que ton code fait
Ok
C'est plus clair ?
Ah oui aussi
Un peux plus
AH OUI y'avais deux erreurs je suis vraiment mauvais pour repérer les erreurs x)
En gros, tu fais que tester si le message est EXACTEMENT égal à [ton prefixe]hug
Ok
c'est message.content.startWith(prefix + "hug") et là ça teste si le message commence par *hug
et un conseil aussi met
if (message.guild && message.content.startWith(prefix + "hug"))
en gros là ça teste si ton message viens d'un serveur et si il commence par *hug
Ensuite, tu fais une autre erreur monumentale :
mettons que ta première condition est valide, il faut que tu teste ensuite si il y a une mention, ce que tu fais avec if (message.mentions.users.first !== undefined). Le problème c'est que la portion de code ```js
let member = message.mentions.users.first
let auth = message.author
message.channel.send(${auth} fait un bisou à ${member} :kissing_heart:)
un code correct serait de ce genre là :
```js
client.on('message', message => {
if (message.content.startsWith(prefix + "hug")) {
if (message.mentions.users.first !== undefined) {
let member = message.mention.user.first
let auth = message.author
message.channel.send(`${auth} fait un bisou à ${member} :kissing_heart:`)
} else {
message.channel.send('Vous n\'avez pas séléctioner un membre')
}
}
})
Ok
du coup tu peux aussi juste faire
if (message.mentions.users.first) {
let member = message.mention.user.first
TypeError: Cannot read property 'user' of undefined
mais en gros voilà
ouais
tu mets mentions et users pour let member
yep @slim anvil c'est sensiblement la même chose
mais je pense que c'est mieux qu'il le fasse de façon plus verbeuse pour mieux comprendre
Bot SEXKEYBOTAujourd’hui à 13:33
@keen narwhal fait un bisou à first(count) {
if (count === undefined) return this.values().next().value;
if (typeof count !== 'number') throw new TypeError('The count must be a number.');
if (!Number.isInteger(count) || count < 1) throw new RangeError('The count must be an integer greater than 0.');
count = Math.min(this.size, count);
const arr = new Array(count);
const iter = this.values();
for (let i = 0; i < count; i++) arr[i] = iter.next().value;
return arr;
} 😘
C'est pas normal xD
C'est bizarre
client.on('message', message => {
if (message.content.startsWith(prefix + "hug")) {
if (message.mentions.users.first !== undefined) {
let member = message.mentions.users.first
let auth = message.author
message.channel.send(`${auth} fait un bisou à ${member} 😘`)
} else {
message.channel.send('Vous n\'avez pas séléctioner un membre')
}
}
})
Pourtant voilà
client.on('message', message => {
if (message.content.startsWith(prefix + "hug")) {
if (message.mentions.users.first()) {
let member = message.mentions.users.first()
let auth = message.author
message.channel.send(`${auth} fait un bisou à ${member} :kissing_heart:`)
} else {
message.channel.send('Vous n\'avez pas séléctioner un membre')
}
}
})```
ça c'est mieux
avec les parenthèses
il faut regarder la doc, ça m'a induit en erreur en corrigeant ton code haha
🙂
client.on('message', message => {
if (message.content.startsWith(prefix + "hug")) {
if (message.mentions.users.first()) {
let member = message.mentions.user.first
let auth = message.author
message.channel.send(auth + " fait un bisou à," + member + " :kissing_heart:")
} else {
message.channel.send('Vous n\'avez pas séléctioner un membre')
}
}
})
Moi je fais comme ça perso
je connais pas les methodes par coeurs, mais ça me parait bizarre ça
if (message.mentions.users.first()) {
let member = message.mentions.user.first
unn coup users, un coup user, un coup first() un coup .first
c'est toujours .first()
il a dû prendre mon code
Je peux pas utilser mes smileys c'est vrai 😢
Triste
Comment j'ai le grade debutant dev bots ?
go voir ça avec @queen ocean en ce moment je suis un peu occupé
Ouais c'est ce qui est écrit
Bah je vais vous présenter mon projet de communication inter serveur
il faut montrer le code ou pas la peine ?
évidemment
//--kiss--\\
client.on('message', message => {
if (message.content.startsWith(prefix + "kiss")) {
if (message.mentions.users.first()) {
let member = message.mentions.users.first()
let auth = message.author
message.channel.send(`${auth} fait un bisou à ${member} 😘`)
message.channel.send(`https://tenor.com/view/bear-blow-akiss-love-hearts-kissing-gif-11674749`)
} else {
message.channel.send('Vous n\'avez pas séléctioner un membre')
}
}
})
Sa marche pour se qui veullent
Nice le grade
j'aurai encore besoin d'aide , c'est une erreur que je comprend pas pourquoi elle es la
?
client.on('guildMemberAdd', async member => {
const myGuild = client.guilds.get('669660128839991338');
const channel = myGuild.channels.find(channel => channel.name === "welcome");
if (!myGuild) return;
Cannot read property 'channels' of undefined
t'as la nouvelle version de discordjs?
look ds tn package.json
enfin je pense pas sinon ça t'aurais dis que guilds.get n'est pas une fonction
sinon, c que tout simplement l'id de la guild est mauvais 🤔
log ton myGuild et tu seras fixé
pour le coup, il va te return undefined
@keen narwhal un code lisible commence déjà par être bien indenté donc indente ton code
vu que 'channels' of undefined
d'ou le log ton myGuild et tu seras fixé
je vous send tout le code
pas besoin
Ok
ton probleme il est là
Oh
🤔
client.on('guildMemberAdd', async member => {
const myGuild = client.guilds.get('669660128839991338');
console.log(myGuild)
const channel = myGuild.channels.find(channel => channel.name === "welcome");
if (!myGuild) return;
j'ai mit un console.log
On va voir se que ça nous dit
undefined 100% 🤔
Bah c'est sur
si le channels il l'est aussi
mais c'est histoire de le faire chercher et de log pour remonter son pb petit à petit
c t sûr
yep
l'erreur l'indique déjà
client.on('guildMemberAdd', async member => {
const myGuild = client.guilds.get('669660128839991338');
console.log(myGuild)
if (!myGuild) return;
j'ai supr le const channel
Je sais pas :/ il y a pas une commande pour voir la version ?
package.json a dit Enzo
Ah oui dsl j'avais pas vue x)
"discord.js": "^11.1.0",
"lodash": "^4.17.4",
"request": "^2.81.0"
donc t'as l'ancienne
good
tu veux faire quelque chose sur une guild spéciale ou juste la guild où le membre est entré?
J'ai un welcome , je voudrais que ça rentre sr une guild spécial
Il peux tout faire le bot
Il te demande de vérifier si ton bost est bien invité dans le server "spéciale"
car si il y est pas il sera pas lister dans ces guilds
vérifie que c'est le bon ID de guild aussi
Déjà fait
Il me mais undefined encore
sur le client.guilds tu as undefined ?
Yep
//--Welcome--\\
client.on('guildMemberAdd', async member => {
const myGuild = client.guilds.get('669660128839991338');
console.log(client.guild)
if (!myGuild) return;
const canvas = Canvas.createCanvas(900, 589);
const ctx = canvas.getContext("2d");
const background = await Canvas.loadImage("./welcome.jpg");
ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
ctx.strokeStyle = "#FFFFFF";
ctx.strokeRect(8, 11, 880, 569);
const { body:buffer } = await snekfetch.get(member.user.displayAvatarURL);
const avatar = await Canvas.loadImage(buffer);
ctx.drawImage(avatar,362 , 60, 200, 200);
// premier = gauche/droite
ctx.font = "45px Consolas";
ctx.fillStyle = "#FFFFFF";
ctx.fillText("Bienvenue sur le serveur", 150, 294);
// = gauche/droite
ctx.font = "45px Consolas";
ctx.fillStyle = "#FFFFFF";
ctx.fillText("TEST", 275, 375);
ctx.font = "45px Consolas";
ctx.fillStyle = "#FFFFFF";
ctx.fillText("@" + member.displayName, 125, 450);
const attachment = new Discord.Attachment(
canvas.toBuffer(),
"welcome-image.jpg"
);
channel.send(`Bienvenue sur le serveur TEST ! ${member}!`, attachment);
})
665770285231767562
je vois que ça en ID de guild
donc logique
t'es sur de l'avoir invité dans les 2 discords ?
le meme bot ?
Il es sur un seul serv
Bah alors
on te pose la question 2 fois tu nous dis que si, et là non ? pfiou débrouilles-toi j'ai du taff
Je comprend plus rien :/
Hello, vous savez comment je peut passer mon code en async ? js rcon.connect().then(() => { let interval = setInterval(function () { return rcon.command('inovalist').then(inovalist => client.user.setActivity(`Inova Roleplay | ${inovalist}`, { type: 'WATCHING' })); }, 1 * 1000); });
😂
c'est pourtant pas compliqué
ça dépend ou tu veux l'use
mais par exemple dans ton .then( async () => ...
Je sais pas ou je veux l'use
c'est la console qui me dit de l'use
(node:7974) UnhandledPromiseRejectionWarning: Error: Command lost
at handleUnexpectedData (/home/inovarp/node_modules/srcds-rcon/index.js:127:39)
at dataHandler (/home/inovarp/node_modules/srcds-rcon/index.js:106:32)
at Socket.dataHandler (/home/inovarp/node_modules/srcds-rcon/lib/connection.js:77:22)
at Socket.emit (events.js:203:15)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
(node:7974) 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: 133)
(node:7974) UnhandledPromiseRejectionWarning: Error: Command lost```
Pourquoi tu veux une fonction asynchrone ?
Quand mon bot exécute le code dans l'interval js rcon.connect().then(() => { let interval = setInterval(function () { return rcon.command('inovalist').then(inovalist => client.user.setActivity(`Inova Roleplay | ${inovalist}`, { type: 'WATCHING' })); }, 1 * 1000); }); il spam l'erreur
Tu sais à quoi ça sert un async
ou tu l'utilises bêtement
setInterval(async () => {
ou dans ton .then( async inovalist =>
à chaque fonction
Je vais pas te mito, je l'utilise bêtement, j'ai jamais regardé a quoi cela servait
Ce serait peut etre le moment du coup
Yep :/
chercher avant de demander, c'est important pour apprendre
Okk, pas de problème merci a toi !
Vraiment personne ne peut m'aider là ?
Ta connexion mongo fonctionne ?
Bonsoir, je créer mon bot Discord et lorsque je le lance la console de Visual Studio ne s'affiche pas.
Comment faire ?
Oui ?
dans l'onglet terminal nouveau terminal
Merci
je peux pas faire plus clair
C'est bon
Top
Mais ouais toujours un problème avec mon bot
??
Oui ma connexion mongo fonctionne Enzo
Du coup tu dois te créer des modèles @cyan iron
Tu te crée par exemple un dossier de modeles
show me ton code loupYTB
et en gros wailrone, tu auras un truc semblabe a celà
const mongoose = require('mongoose')
const userSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: String,
firstName: String
})
module.exports = mongoose.model('User', userSchema)
Là ou tu veux créer une entrée dans ta bdd, tu import ton model User par exemple, et ensuite tu feras un truc comme ça
/// User = le modele que tu import
const user = new User({
_id: mongoose.Types.ObjectId(),
user: message.author.username,
etc...
})
user.save()
par exemple
sorry j'étais en call
tu as trouvé ton code ou @keen narwhal ? no sorry je opeux pas je suis au taff
Je t'ai envoyer un screen au-deesus
sinon je me rappelle plus comment on envois en ligne de type code sur Discord
Désolé j'étais parti
Je crois avori saisi
Mais en fait ce que j'aimerais faire ç'est ça
C'est une première fois que j'utilise Visual Studio, donc voilà
ca change pas grand chose l'éditeur @keen narwhal
Là ton erreur vient de events.bind
car ton import de events = import....
doit etre a null
dans ce cas tu te créer une table "Informations" de la maniere dont je t'ai montré
et a chaque fois que tu veux add un truc tu le saves en base
et ensuite pour get tes informations, tu pourrais faire ça
J'ai pas tout compris
User.find(....
@cyan iron pour get tout tes users, bon là toi ce sera informations mais voilà tu saisis le truc
c'est que ici ton require de /Events.... doit te return null ou autre, essaye de log ta variable events
@slim anvil c'est bon ce que j'ai fait ?
"flm" c'est ce que j'ai créé
ensuite y'a encore flm dedans
Et là j'importe mes fichiers ?!
flm.flm c'est bizarre
normalement tu as une collection "flm"
et dedans tu auras tes datas
ah ok !
Je vais peut être changer
donc oui c'est good
et en gros wailrone, tu auras un truc semblabe a celà
const mongoose = require('mongoose') const userSchema = mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, name: String, firstName: String }) module.exports = mongoose.model('User', userSchema)
@slim anvil Euh du coup je galère (désolé) mais ça je le met où ? dans le index.js ?
Là ou tu veux créer une entrée dans ta bdd, tu import ton model User par exemple, et ensuite tu feras un truc comme ça
/// User = le modele que tu import const user = new User({ _id: mongoose.Types.ObjectId(), user: message.author.username, etc... }) user.save()
Et ça ?
Je débute vraiment je suis NUL
Je ne sais rien faire x)
J'ai ça
en fichiers
exports.DBCONNECTION = "mongodb://Localhost:27017/discordBOT"et ça dans db.js
En gros, sans avoir un truc hyper développé dans sa structure mais fonctionnel dans un premier temps
Imaginons que dans ton fichier de commande !addinfo Salut ca va tu veux créer l'information et l'ajouter en base:
Dans le fichier de cette commande tu import mongoose, tu va faire ce truc la:
/// User = le modele que tu import
const user = new User({
_id: mongoose.Types.ObjectId(),
user: message.author.username,
etc...
})
user.save()
en important comme je t'ai dis le model que tu auras crée au préalable
const User = require('./../models/User.js')
et dans le fichier User.js (ton model), tu auras cela:
const mongoose = require('mongoose')
const userSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: String,
firstName: String
})
module.exports = mongoose.model('User', userSchema)
oui mais moi j'utilise pas plusieurs fichiers j'en utilise qu'un seul ...
Ca fait une différence ou pas ?
Je vais tenter
Oui
Donc dans mon index.js j'ai ceci
et mon model je le met où dans la base de données via mongodb compass ?
@slim anvil J'ai une erruer mais je pense que c'est normal
(node:16620) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'ObjectId' of undefined
J'ai presque tout saisi à part la dernière partie...
J'ai ça dans User.js
et dans mon index.js ça
Donc normalement oui
Ah et ça au niveau de la commande aussi
Mais c'est tout
en fait je met quoi dans la base de données
ici
@slim anvil Ah je crois avoir compris, je dois mettre le User.js ?
c'est pas du .json normalement
le const user tu peux le mettre tout en haut aussi comme l'import de mongoose
Pourquoi tu uses /utils/mongoose ?
jsp j'ai vu ça dans le tuto
je comprend pas tu le sors d'ou le mongoose
Ah bizarre ça
Car tu doup le objectId ne doit pas exister dans ton mongoose que tu import
Oui mais en fait dans mon mongoose y'a rien
C'est le vide
En fait je sais pas quoi mettre
ah dans le fichier ily a rien ?
du coup fais un const mongoose = require('mongoose')
a la place
ca devrait etre mieux
Ah euh chelou ton tuto
🤷
Quand tu require mongoose
tu le require de ton package
donc juste require('mongoose')
remplace ça deja
Dans le index.js ?
Oui partout
Oui c'est fait
Ok, tu as tjrs l'erreur du ObjectID ?
je teste
tes require se font en haut de page aussi
pas en pleins milieu du code
je parle pour le const User = ...
j'ai des erreurs bêtes je les corrige
Pas d'erreur cette fois ci, mais je ne sais pas ce qu'il s'est passé 😅
Est -ce que je dois supprimer le fichier mongoose.js
Avec ceci dedans
