#javascript-typescript
1 messages · Page 42 of 1
Je préfaire en js , c'est plus simple
Le lua
aussi
si tu est plus à l'aise
après vu que tu fais only du lua gmod (enfin j'imagine), j'imagine que tu connais pas les fonctions de LuaJT de type io et auter
autre *
Non , je connais pas
Si t'es à l'aise avec le lua utilise le
il est simple d'utilisation
y'a celle de guthen
aussi
Je trouve ça plus dur
mais je sais pas elle donne quoi

J'ai commencé avec le js donc je vais sans doute finir avec le js
gateway de merde 
mdr
@west plover une lib discord , toi?
OOF
ah ton truc php éclaté au sol?
nan nan
non mais c’était juste une question
en lua
go cassé un tête là
mon truc php c’t pour des webhooks
oui c’est pour ça j’ai pas compris
parce que faut bien refaire la roue pour apprendre 
c'est bon je suis mort
(là c t l’apprentissage de Luvit + doc Discord)
et puis si g envie de refaire la roue, kesk’y m’en empêche 
Genre la lib pour faire du lua sur discord
parce que love leur requêtes http sont fuck up
@west plover bah rien t’en empêche, juste je trouve ça inutile
bah écoute j’aime bien refaire des trucs à ma façon/expérimenter/faire des défis, etc. 🤔
hm why not
!rule 2

client.on("message", function (message, args, tools, async) {
if (!message.guild) return
const arguments = message.content.slice(prefix.length).trim().split(/ +/g)
const command = arguments.shift().toLowerCase()
// console.log(arguments, command)
const reason = arguments.join(' ')
if (command === `sondage`) {
if (!reason) return message.reply('Tu dois préciser la question!')
let embed = new Discord.RichEmbed()
.setColor(0xF08080)
.setFooter('Réagissez pour voter')
.setDescription(arguments.join(' '))
.setTitle(`Sondage crée par ${message.author.username}`);
let msg = message.channel.send(embed);
msg.react(':white_check_mark:');
msg.react(':x:');
message.delete({timeout: 1000});
}
})
Petit soucis avec le msg.react , je peux pas mettre les await sinons il me mais en tant quant
Parce que le async ne se met pas en tant que paramètre de fonction mais devant la fonction
Comment régler se problème alors ?
Oh ok , donc je devrais mettre de await ? ou pas
Ok , je te remerci de ton aide x)
Car du coup là il veut react a un message pas encore existant
Ok
** let msg = await message.channel.send(embed);
await msg.react('✅');
await msg.react('❌');
message.delete({timeout: 1000});
}
})**
Juste un await devant le message.channel.send
Pas besoin sur les autres
tu t’en fous d’attendre qu’il y est le react en soit
Ok
ok réglé en mp
.then
let msg = await message.channel.send(embed);
await msg.react('✅');
.then(() => message.react('❌'))
message.delete(1000);
}
})
Aucun intérêt de mettre le await sur le msg.reqct et encore moins de .then() ensuite
Tu await juste l’envoie du message pour être sûr qu’il ira pas react tant que le message n’est pas envoyé
Ensuite ce sera ok il peut react, sans await ni rien
await c pour stoper l’execution du code juste qu’à temps que le Promise then ou catch?
en gros oui, il continuera pas la suite du code
du coup ça fonctionne que sur les Promise
Donc pas besoin de await un msg.react on s’en fou d’attendre que le react soit fait
Oui
en soi tu await le react pour que ce soit en ordre
parce que sinon tu peux avoir ❌ et ensuite ✅
oui à la limite c’est pas faux
au lieu de ✅ et ❌
Mais await + .then faut m’expliquer
oé
surtout que ça te renvoie la valeur récupérée par le then/catch?
donc c pas un promise
quand tu await oui
(et en plus il a fermé la ligne avec ; donc tu peux pas .then dessus)
oui bon là tu chipotes ça arrive les erreurs de syntaxe 
(a moins de msg.then)
arrête de chipolata
manfou 

Hey, comment faire un bot avec le roll un lancement de dés entre 0 et 100 merci de l'aide
math.random 
juste cette ligne car je débute et c'est un peu galère 😄
merci 😉
Comme si j’avais besoin de ta validation tocar 
Si je te pose une question je te fais bug 
@slim anvil dois-je te rappeler que qui fait le malin tombe dans le ravin?
ses vraies
Faut toujours douter comme ça si t’oublies un truc tu dis « ah oui » 
technique professionnel ça
Salut je n'arrive pas à récupérer le channelID de la salle vocal ou est connecté le bot, je peux faire comment svp ? :/
Avec quel lib ?
discord.js
oui non mais d'accord je les aussi la doc
bah xD
mais je trouve pas comment recupérer le id du channel :/
mais le voiceChannelID je le pointe comment celui du bot :/
donc ton_objet.voiceChannelID
pour celui qui met un message c'est ceci message.member.voiceChannelID mais pour celui du bot je trouve pas comment lui pointer ça
Si tu es dans un event message tu peux faire msg.client pour avoir ton bot (en partant du principe que msg est déclaré)
non mais je les deja ça je sais le pointer le bot
mais depuis son objet y a pas de voiceChannelID
j'ai essayé en me basant sur message.guild.voiceConnection mais pareil il ma pas l'air de me trouver le id du channel
Client.voiceChannelID?
client.voiceConnections.get( msg.guild.id )
non mais la doc je la connais je suis dessus hein c'est pas ça le problème lol
mais depuis son objet y a pas de voiceChannelID
@night star Tu as bien un GuildMember ?
bah non je le cherche justement lui le guildmember
je crois que vous comprenez pas ou je bloque 😄
Oé on comprend pas ce qu’y ne vas pas 
Ouai
Client.voice.channel
@keen narwhal .voice existe pas sur un client c'est voiceConnections 👀
Ah oups
je crois que vous comprenez pas ou je bloque 😄
@night star Go donner un cas concret avec plus de détail et ton code actuel hein
on a pas de contexte 
Client.voiceChannel
si je ne suis pas dans le meme salon vocal que le bot alors je ne peux pas faire une commande
pour ça je dois comparer le channelid vocal d'ou je suis à celui ou est le bot
oé
le mien j'ai trouvé ça c'est bon
oé
mais pour celui du bot je trouve pas
Bah client.voiceConnections.get( msg.guild.id ) 
daccord merci 😉
no problem 
Salut. J'essaye de faire un système de warn avec MySQL, mais j'ai une erreur que je n'arrive pas à résoude. Pouvez-vous m'aider svp ? Merci d'avance.
Code : https://pastebin.com/SuuVRuBd
Erreur : https://pastebin.com/uLS9VAVT
Je serais tenté de dire que préparer des requêtes avec des :variable ne fonctionne pas avec ta librairie vue que à une erreur de syntaxe, mais je fais pas de node donc je vais pas m'avancer
tu gère les timeout ?
Sa n'a pas de rapport avec mon code car c'est depuis que je suis passé sur une autre machine que sa me fait ça :/
getaddrinfo EAI_AGAIN discordapp.com
Tu aurais pas des problèmes pour communiquer avec l'exterieur depuis ta machine ?
ping discordapp.com
Ou à défaut un problème DNS
Tous les autres bots marche :/
Que ce bot la qui crash
Il n'a pas l'air de recrash pour le moment
Pour moi il a perdu la synchro avec discordapp.com, à voir si t'as pas des instabilités ... IDK
Yes
Après si ça c'est produit une seule fois, considère ça comme un incident isolé
Rip
:/
(node:423) UnhandledPromiseRejectionWarning: Error: getaddrinfo EAI_AGAIN discordapp.com
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:64:26)
(node:423) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:423) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.```
C'est juste un Warn
mais il ne crash pas là
C'est donc bien un problème avec tes serveurs DNS
J'ai pas touché a mes DNS :/
Ils arrivent pas à résoudre discordapp.com en adresse IP
C'est ceux de base avec ma box
ou sinon c'est discord qui font des modifs ?
A chaud ?
Non 😂 Impossible
Bah umh
Je dirais pas ça a ta place
Il y a déjà eu des moments ou discord était en PLS violent
2H de PLS
Des modifs à chaud non, et dans tous les cas ça n'affecte pas les DNS. Pour le coup ça vient de chez toi puisque c'est bien toi qui n'arrive pas à résoudre des noms de domaine en adresse IP. Essaie de te mettre en IP statique et spécifier 1.1.1.1 et 1.0.0.1 comme DNS, si t'es en ipv6 2606:4700:4700::1111 et 2606:4700:4700::1001
J'vai désactivé l'ipv6
C'est useless
je l'avais activé pour try mais sa ne sert a rien pour le moment
On est arrivé à court d'adresse ipv4 donc c'est tout sauf useless l'ipv6 🤔
Il faut faire la transition et s'habituer à l'utiliser, encourager les FAI etc
Tous les serveurs n'accepte pas les IPv6
Et au lieux d'accélérer la vitesse ça la réduit
je sais, mais il faut pousser les gens à le faire! et ça ne la réduit pas nécessairement
je l'avais activé pour try mais sa ne sert a rien pour le moment
@keen narwhal
le sujet est large et on pourrait en parler autrement
pour le moment
PM2 > Screen pour les bots discord 😉
Docker > PM2 
pm2-runtime + docker > pm2
xD
rien > all
Linux > Windob
C'est pas objectif comme avis, c'est 2 finalités totalement différentes
Mais bon c'est un débat vu et revu
rien et all? je suis entièrement d’accord

${message.guild.createdAt} Sa me donne les informations en anglais , il y a un moyen de mettre en français ?
Ok merci
Bonjour, j'ai voulus faire la commande /yt qui marche parfaitement bien mais le seul problème , c'est que j'ai mit un message.author.avatarURL mais je voudrais l'avatar du fondateur du serveur.
Guild.author ?
Essai avec message.guild.owner.user.displayAvatarURL
Ou sinon message.guild.owner.user.avatarURL
@errant rampart @timid loom Je n'est plus d'erreurs depuis que je tourne sous pm2
Etrange 🤔


J'ai abandonné pm2 pour docker
le viagra aussi
Whut
Oui pm2 c’est bien mais docker c’est mieux 
Bah le jour ou quelqu'un m'expliquera comment s'en servir je dis pas non 🙂
google is your friend
Google is not sympathic
go bing alors
Make better search 
xD
Je serais l'installé
Ça va docker en vrai une fois que t’as compris la notion d’image ça va tout seul
C'est fais de base pour ?
Conteneurisation, cloisonnement des ressources, scalabilité, simplification des processus d'intégration et de déploiement continue
C'est pas une application, c'est un environnement 🙂
Si je me trompes pas, Docker est basé sur LXC
Oui c’est moins complet qu’un LXC
Docker autorise la portabilité entre machines (qui exécutent aussi Docker) et permet ainsi à une application et à ses composants d'exister en tant qu'objet mobile unique. LXC seul permet la mobilité.
après perso sur docker en perso je run que des projets node
node-alpine life
Ah et des strapi apps aussi 
Pour un bot discord, Docker c’est pas « un peu trop » ?
Bah c’est relou à mettre en place juste pour ça oui
mais quand tu commences à avoir quelques projets ça vaut le coup
@hazy mirage Tout dépend de ce que tu as comme besoin au final, mais quand tu arrives avec plusieurs bots, une appli pour des API, un front, un reverse proxy, un stack de monitoring, que tu couples ça avec de l'intégration continue pour déployer automatiquement tes applis ... Ca commence à être intéressant ! 🙂
Oui c’est sûr et c’est plutôt logique, mais je parlais uniquement d’un seul bot là ^^
Merci Kotus et Fireless de m'avoir aidé a se sujet !
au plaisir 😉
J'ai une petite question , je voudrais faire un message de bienvenue avec un fond , genre un île paradisiaque avec au millieux le nom , et au niveaux du bas sont prénom , c'est dificile de faire ça ?
Ooofff
C'est plus que complexe
Ah :/
Faut savoir faire beaucoup de choses en JS
c'est juste un canvas
Oula
c'est pas si complexe
Jsuis pas fort a se point la moi
c'est l'occasion d'apprendre
De même
Ouais
Je pense aller me documenter
Car c'est plutôt stylé
Moi aussi x) tu a de la doc Enzo pour nous ?
je regarde wait
Ok merci
https://www.youtube.com/watch?v=gm1QtePAYTM traversy media je regardais ces videos a lui quand j'étais en étude
In this video we will look at the HTML5 Canvas element and JavaScript API to draw shapes, paths and do some basic animation
Sponsor: Linode Hosting
https://linode.com/traversy
Code:
https://codepen.io/bradtraversy/details/YzPeNxg
💖 Become a Patron: Show support & get pe...
Pilot l’a fait donc vous pouvez le faire 
const channel = member.guild.channels.find(ch => ch.name === ‘bienvenue-aurevoire’);
Sa me dit invalid or unexpected token , comment je pourrais faire :/

ch is undefined ?
Oh mince , j'ai tellement chercher un problème trop dur alors que c'est peut étre le channel
Marche pas . . . 🤔
const yourchannel = <guild>.channels.find(channel => channel.name === "bienvenue-aurevoire’")
<guild>
???
Wait
const myGuild = client.guilds.get('ID DE TON SERVEUR');
const yourchannel = myGuild.channels.find(channel => channel.name === "bienvenue-aurevoire’");
@keen narwhal
Oui ?
const myGuild = client.guilds.get('ID DE TON SERVEUR');
const yourchannel = myGuild.channels.find(channel => channel.name === "bienvenue-aurevoire’");
je vais test ça
Après c'est pas opti
Ton bot marchera que sur ton serv
Ouais , je le ferai
Hey , j'ai une fonction qui change les caractères d'un message , mais j'aimerais qu'elle retourne le message changé :
function font(text) {
let texte = text.replace(/a/g, "𝐚")
texte = texte.replace(/b/g, "𝐛")
texte = texte.replace(/c/g, "𝐜")
texte = texte.replace(/d/g, "𝐝")
texte = texte.replace(/e/g, "𝐞")
j'aimerais que ça marche comme ça :
font("abcde") // 𝐚𝐛𝐜𝐝𝐞
sauf que ça me retourne "undefined"
quelqu'un a une idée ?
il faudrais que je dise que text = texte
tu mets texte.replace
Dans ta fonction tu passes test
Text*
Ah oui non
Pas vu la première ligne mybad
Si tu logs ton texte tu as un undefined ? 
tu return bien texte ?
ah c'est bon
car y a pas d’zrreur dans ton code
return text.replace(/a/g, "𝐚").replace(/b/g, "𝐛").replace(/c/g, "𝐜").replace(/d/g, "𝐝").replace(/e/g, "𝐞")
pour le lol
ah tu faisais un const toto = font(« iDisk ») je pensais tu faisais un log dans ta fonction
d’où le undefined du coup
et tu peux aussi mettre /e/gi
pour que meme les majuscules soient remplacés si jamais t’as besoin
Le g correspond a quoi ?
Excusé moi , s'y le problème en haut est pas finie dite le moi !
Suite a mon code de canvas , il n'arrive pas à avoir le channel
**(node:5689) UnhandledPromiseRejectionWarning: ReferenceError: channel is not defined
at Client.<anonymous> (/home/keysex/Desktop/bot discord/index.js:684:1)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:5689) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:5689) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
**
(node:5689) UnhandledPromiseRejectionWarning: ReferenceError: channel is not defined
at Client.<anonymous> (/home/keysex/Desktop/bot discord/index.js:684:1)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:5689) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:5689) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Le channel existe juste pas
yourChannel.senf
Il a la permission 8 le bot ?
Fireless sinon /g c’est pour une recherche global
Je note
Oki merci
const yourchannel je mais le nom du channel ?
Trop de question à la suite
Bah comme tu veux
c'est une variable tu met le nnom que tu veux
Constante*
Bah non
Je fessais pareils
Mais après pour les gens qui apprennent c'est pas ouf, car ils vont s'habituer a Variable et non Constante :/
c'est vrai
//--AFK+NO_AFK--\\
client.on('message', message => {
if(message.content === prefix+"afk") {
if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send("Vous n'avez pas la permission d'utiliser cette commande")
let embed = new Discord.RichEmbed()
message.channel.send(`${message.author} est maintenant AFK.`);
}})
client.on('message', message => {
if(message.content === prefix+"no-afk") {
if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send("Vous n'avez pas la permission d'utiliser cette commande")
let embed = new Discord.RichEmbed()
message.channel.send(`${message.author} n'est maintenant plus AFK.`);
}})
Qu'elle qu'un pourrais m'expliqué comment faire pour => Quand on se mais afk en ne reçois aucune notification et que quand ont fait /afk et que au bout de 5 minutes en écris un message sa dit tout de suite qu'ont est revenue au lieux de devoir faire la commande manuelement.
ça peut aider
si il ne connaissait pas la doc
je peux pas aider son pb , donc je le redirige vers la doc
bawouai logique
S'il a cherché un minimum après il auras la doc, donc je ne pense pas que le redirigé dessus l'aidera
il est peux étre pas au courant au sujet de la doc ? :/
Et même avec la doc ça ne changera rien car sa demande ne sera pas forcément dans la doc
Ouai mais c'est logic après, tu apprend un language... Tu va voir la doc...
Ouai mais c'est logic après, tu apprend un language... Tu va voir la doc...
@keen narwhal Non , pas pour tout le monde
TU VEUX QU'ON S'LA DONNE ? HEIN ? PARCEQU'ON VA S'LA DONNER JTE LE DIT
#general les gars
Ok bob le brico
Tu pense que dire, va voir la doc en lui envoyant le lien va l'aider ?
c'est le maximum que je puisse faire , a ce niveau là je n'aurais tt simplement rien dit
hello !
j'aimerais savoir si c'est possible en créant une commande en node.js de faire un compteur sur un embed et le compteur augmenterait quand on fait: !add nomducompteur (y'aurait aussi une commande qui créerait le compteur sous embed en question)
je me suis jamais vraiment attardé sur l'utilisation de compteur / autre, et j'ai pas trouvé de tutoriel pour bien expliquer donc bon ^^ (si quelqu'un saurait m'expliquer)
Yes tu édit ton embed a chaque fois en rajoutant +1
Stock ton compteur dans un ficher json
Je peut te montrer via mon anydesk comment faire ?
@keen narwhal
yep @keen narwhal go pv 😉
bonjour, je suis entrain de commencer mon bot mais j'ai un prob majeur, je fais sa dans Node Command prompt :
npm install --save discord.js
et ?
C'est pas npm install discord.js --save normalement ,
et aucun fichier spawn dans mon folder
tu as pas d'erreur?
npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\aztea\package.json' npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\aztea\package.json' npm WARN discord.js@11.5.1 requires a peer of @discordjs/uws@^10.149.0 but none is installed. You must install peer dependencies yourself. npm WARN aztea No description npm WARN aztea No repository field. npm WARN aztea No README data npm WARN aztea No license field.
t'es au bon endroit, sur ?
oui
si tu fais un ls, tu vois ton fichier index.js ?
hein ?
fais juste un npm init
si t'es sur d'etre au bon endroit
et ensuite tu fais un npm i discord.js
ok c bon merci
Bonjour , j'ai un petit problème !
J'aimerais , avec mon bot discord , faire une recherche sur l'api de spotify. Pour ça , je me suis créer un compte , j'ai pris mon client id et secret , tout va bien. Sauf que j'ai besoin d'un token , que j'obtiens en faisant une request post. Je n'ai pas trés bien compris , quelqu'un pourrais m'éxpliquer comment je pourrais faire une post request ?
The request is sent to the /api/token endpoint of the Accounts service:
POST https://accounts.spotify.com/api/token
The body of this POST request must contain the following parameters encoded in application/x-www-form-urlencoded as defined in the OAuth 2.0 specification:
REQUEST BODY PARAMETER VALUE
grant_type | Required.
Set it to client_credentials.
The header of this POST request must contain the following parameter:
HEADER PARAMETER VALUE
Authorization | Required.
Base 64 encoded string that contains the client ID and client secret key. The field must have the format:
Authorization: Basic <base64 encoded client_id:client_secret>
voilà les parametres dans la doc de spotify
attend$
request.post({
url: `https://accounts.spotify.com/api/token`,
headers: {
'Authorization': "Basic mes client",
},
body: {
"grant_type": "client_credentials"
}
}, function (error, response, body) {
console.log(body)
});
};
c'est mon code
La route /api/token elle sert a quoi ?
Ok bah dessus t’as pas besoin de lui passer le Authorization
Tu fais une promise pour que au retour de ta requête tu set ce token dans ta requête de recherche
bah si , il lui faut mes clients id pour savoir quel application correspond au token
mais ça justement ça marche pas
j'arrive pas à générer mon token
request.post({
url: `https://accounts.spotify.com/api/token`,
headers: {
'Authorization': "Basic mes client",
},
body: {
"grant_type": "client_credentials"
}
}, function (error, response, body) {
console.log(body)
});
};
@rough tide ici
(node:5768) UnhandledPromiseRejectionWarning: Error: Argument error, options.body.
c mon erreur
Envoie la doc
authorisation : https://developer.spotify.com/documentation/general/guides/authorization-guide/#client-credentials-flow
En gros,
Un exemple pour le header:
headers: {
Authorization:
'Basic ' +
new Buffer(client_id + ':' + client_secret).toString('base64')
},
donc je met ça dans le header de mon code d'en haut ?
request.post({
url: 'https://accounts.spotify.com/api/token',
headers: {
'Authorization': "Basic mes client",
},
body: {
"grant_type": "client_credentials"
}
}, function (error, response, body) {
console.log(body)
});
}; dans ce code ça donne quoi ?
Je suis sur tel compliqué, mais ta clé headers tu mets la mienne à la place
parfait merci
le retour c'est le body ou le response ?

aie
(node:12304) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
_http_outgoing.js:618
throw new ERR_INVALID_ARG_TYPE('first argument',
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer. Received type object
at write_ (_http_outgoing.js:618:11)
at ClientRequest.write (_http_outgoing.js:586:15)
ouais c’est un vieux code
Juste concat
regarde la concaténation elle date de 2012 
Non 2017 il connaissait pas ES6 le mec, tu concat juste et ça devrait le faire
bah tu concat tes variables en une seule string quoi
utilise Buffer.from au lieu du constructeur de Buffer
Bien vu bg
_http_outgoing.js:618
throw new ERR_INVALID_ARG_TYPE('first argument',
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer. Received type object
at write_ (_http_outgoing.js:618:11)
at ClientRequest.write (_http_outgoing.js:586:15)
'Authorization': 'Basic ' + Buffer.from("clientid:secret").toString('base64')
Fais ce que vikrrr a dit
bah c cque j'ai fait
oh...

j'ai mis une seule string "clientid:secret" jlai est collé
l'erreur viens d'autre part, t'utilises quelle lib pour ton client HTTP?
j'utilise le module request pour faire ma requete
il faut que tu sérialise le body de ta requête, probablement avec JSON.stringify
avec request tu peux aussi juste ajouter json: true ça le feras pour toi en plus d'ajouter le Content-Type approprié
_http_outgoing.js:618
throw new ERR_INVALID_ARG_TYPE('first argument',
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer. Received type object
at write_ (_http_outgoing.js:618:11)
at ClientRequest.write (_http_outgoing.js:586:15)
request.post({
url: `https://accounts.spotify.com/api/token`,
headers: {
'Authorization': 'Basic ' + Buffer.from("xxx:xxxx").toString('base64')
},
json: true,
body: {
"grant_type": "client_credentials"
}
}, function (error, response, body) {
console.log(JSON.stringify(body))
});
};
mon code au cas ou
comme ça ? regarde le code
t’as que ça comme info sur l’erreur ?
Non tu log ta responsable
Response*
Body c’est ta requête
log ton erreur aussi
Error*
error = null
reponse = IncomingMessage{avec plein de trucs}
et jvois pas de token dedans
show me
Screen
attend
j'lai JSON.stringify c bcp plus compacte
{"statusCode":415,"body":{"error":"server_error"},"headers":{"date":"Fri, 31 Jan 2020 18:45:06 GMT","content-type":"application/json","set-cookie":["__Host-device_id=AQDorwUvKSx2p_18d57sZavJC6g6RVxRm5BBPqIeHUFasV_5QQu1BQZhfu0b_0wYgVL8bMFPAtS9cQVYka7pqljDVrqfn6J6Qd0;Version=1;Path=/;Max-Age=2147483647;Secure;HttpOnly;SameSite=Lax"],"content-length":"24","server":"envoy","x-envoy-upstream-service-time":"1","strict-transport-security":"max-age=31536000","x-content-type-options":"nosniff","via":"HTTP/2 edgeproxy, 1.1 google","alt-svc":"clear","connection":"close"},"request":{"uri":{"protocol":"https:","slashes":true,"auth":null,"host":"accounts.spotify.com","port":443,"hostname":"accounts.spotify.com","hash":null,"search":null,"query":null,"pathname":"/api/token","path":"/api/token","href":"https://accounts.spotify.com/api/token"},"method":"POST","headers":{"Authorization":"Basic NDU5NjYwNzgwMTAxxxxxxxxxNGE3OWViYTAyMDk6MDI3OGIyMThlZTUyNxxxxxxxxxY=","accept":"application/json","content-type":"application/json","content-length":35}}}
comment ça ?
request.post({
url: `https://accounts.spotify.com/api/token`,
headers: {
'Authorization': 'Basic ' + Buffer.from("459660xxxxxx0209:0278bxxxxxd566").toString('base64')
},
json: true,
body: {
"grant_type": "client_credentials"
}
}, function (error, response, body) {
console.log(error)
console.log(JSON.stringify(response))
});
};
c'est bon là non ??
remove ton client id
pourquoi ?
ah ok mybad
il faut envoyer le grant_type en paramètre de requête pas dans le body
donc jlet met ou ?
sur la doc c'est marqué body parameter
ah il faut le mettre en url-encoded alors
mais du cp dans le code ca équivaut a quoi ?
rajoute un header Content-Type avec la valeur application/x-www-form-urlencoded et en body tu met qs.encode({ grant_type: "client_credentials" })
meme niveau que authorization
qs viens du module querystring de node donc faut que tu require ça
ça marche pas
{"statusCode":200,"body":"{"access_token":"BQCQxxxxxaTTOnfbE9-jxxxxD57qj_W4hxxxxxxxtERqxoyI","token_type":"Bearer","expires_in":3600,
parfait merci
juste , comment je fais ressortir direct le token ?
sans le reste
si c'est le log de response, tu fais un const
{ access_token } = response.body
const token = response.body ?
ça va pas me ressortir {"access_token":"BQCQxxxxxaTTOnfbE9-jxxxxD57qj_W4hxxxxxxxtERqxoyI","token_type":"Bearer","expires_in":3600, ?
non const { access_token }
la clé c'est access_token ou alors tu peux le redéfinir avec un as
faut que tu JSON.parse le body avant
bon allez je vais manger salut les bgs
ouiiii merci bcp les gars, désolé du dérangement
par contre du coup... comment je fais ma recherche ?
Look sur la doc tu dois envoyer en paramètre certaines data
La query, le type etc enfin tu as plusieurs choix
request.get({
url: `GET https://api.spotify.com/v1/search/q=name:${rech}&type=album,track`,
headers: {
'Authorization': 'Bearer' + Buffer.from(acces_token)
}
}, function (error, response, body) {
if (error) console.log(error)
console.log(body)
});
j'ai fait ça
Q c’est la query genre « rap fr » et type ça peut être album, single etc
Tu as tout sur la doc
Yes ça a l’air bon a première vu
Test
{
"error": {
"status": 400,
"message": "Only valid bearer authentication supported"
}
}
il manque un espace entre ton token et Bearer
Invalid URI "GET%20https://api.spotify.com/v1/search/q=name:Luv%20Resval&type=album,track"
sachant que ${rech} c'est args.join(" ")
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/encodeURIComponent faut que tu encodeURIComponent je crois
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
enlève le GET qui est dans ton URI
Pas lui qui l’a mit si ?
C’est son retour d’erreur on dirait
Ah oui si
Bien vu haha tu as laissé le GET dans l’URL
{
"albums" : {
"href" : "https://api.spotify.com/v1/search?query=name%3ALuv+Resval&type=album&offset=0&limit=20",
"items" : [ ],
"limit" : 20,
"next" : null,
"offset" : 0,
"previous" : null,
"total" : 0
},
"tracks" : {
"href" : "https://api.spotify.com/v1/search?query=name%3ALuv+Resval&type=track&offset=0&limit=20",
"items" : [ ],
"limit" : 20,
"next" : null,
"offset" : 0,
"previous" : null,
"total" : 0
}
}
ça me return ça
sauf que j'aimerais une liste de chaque track
genre
Albums :
Nom : Artiste :
URL :
Image
pour chaque
jfais comment ? 
bah tu map dessus
tu boucles et tu mets ça dans ton embed
Bon là tu as 0 résultats pour le coup
essaye de faire un peu par toi même aussi
oui je sais , désolé
mais je trouve pas ou est l'array dans l'histoire
ah oui c'est items
donc body.tracks.items.map
La tu as juste à bouclé sur le tableau items qui est dans album et tracks ou un des deux, et dans ta boucle tu feras un embed.addField(...
jveux pas d'embeds
https://files.lynaria.fr/Code_fxIpdsnyVl.png
Comment je pourrait check si le joueur a déjà join ?
Syntax du data.json
https://files.lynaria.fr/Code_EqkITGp9U3.png
Tu as une fonction ferchMember
Oki
?
Je ne sait pas comment m'y prendre :/
client.guild.fetchMember(id_user)
Non mais
Join par rapport a ma list en json :/
J'aime que quand ils font /join, il sont ajouté dans le data.json et s'il refont /join sa leurs dis qu'ils on déjà join
Oui je viens de tilté
@keen narwhal « rejoind » 
¿?
C'est pas correct mais comment ça devrais l'être
if(data[message.author.id] === 0){```
👀
Hein ?
Tu as rejoint *
Ty @hazy mirage @slim anvil
Hmm bien fait de vérifier 😂
Tu as une erreur ou autre ?
Ah ok il rentre pas dedans
C'est si il est dans la data alors il return
yep
Et dans ce cas la il n'écrit pas
Mais du coup tu met bien la bonne url ?
Oui
C’est la même que quand tu lis le fichier ?
log ton data ?
J'ai trouvé l'erreur
Top
Réussis
top
Je suis obligé de mettre une value a mon id dans la data
C'étais pas se que j'avais fais car tu ma dis Pas besoin de === 0
Du coup j'ai supr dans le write le joined: 0
xD
Voilà l'erreur
Ah okiiiii
rien dis d'autre 
Comment je pourrais mettre tous les id dans une category
Car la si je crée plusieurs tâche ( c'est le but du bot, crée une tâche et pouvoir lla rejoindre, sauf que s'il y a plusieurs Tâche OOFFFF )
tu fais un object indexé par l'id du membre 🤔
Alors la :0
qui est set sur la data de la tache
me dis pas que c'est compliqué, parce que ça ne l'est pas 
@keen narwhal typiquement une Map, voire une Collection si tu es sur Discord.js
Quelqu'un aurais le code pour supprimé tous les channels qui sont dans une catégorie ?
message.guild.channels.forEach(channel => channel.delete())
```

Je sais pas si il y a une fonction deja faites, mais sinon tu fais quasi la meme chose, mais avant tu fais un .filter sur le message.guild.channels
et tu regardes si .filter(channel => channel.parentID === '')
je crois que c'est parentID mais check avant pr etre sur
Avec ton code:
const channels = server.channels.filter(channel => channel.parentID === config.CategoryID)
if (!channels.length) return
channels.forEach(channel => channel.delete())
voila*
console.log(channels) avant le if
voir ce qu'il te sort
^^
car si il y en a pas, il va return vide
ah oui y a

bizarre, ça fonctionne là ?
Nop
0 erreur ?
Ouai :/
const channels = server.channels.filter(channel => channel.parentID === config.CategoryID)
if (!channels.length) return
channels.forEach(channel => console.log(channel))
juste voir qu'il log le bon truc
il log quelque chose ?
fais if (!channels.array().length) return
Bah il vois les deux cannaux
const channels = server.channels.filter(channel => channel.parentID === config.categoryID);
if(!channels.array().length) return
channels.forEach(channel => channel.delete())```
?
ui
met un await devant le channel.delete() pour qu'il attende de supprimer le channel avoir de passer au suivant déjà ce sera better si jamais tu as une catégorie rempli de chan
No c'est bon
ca fonctionne ?
pas d'erreur ?
Nop
show me le code plz
client.on("ready", async () => {
const server = client.guilds.get(config.GuildID)
const channels = server.channels.filter(channel => channel.parentID === config.categoryID);
if(!channels.array().length) return
await channels.forEach(channel => channel.delete())
})```
pour le await oui et non, ce serait better avant chaque delete mais tu regarderas ça après
hmmm bizarre sinon
Att
Erreur graphique de ma pars ?

ça je sais pas
mais ton console.log
si il dit qu'il y a pas
c'est que peut etre le categoryID de ta config est pas le bon ^^'
en tt cas tu as un array vide donc il return
Ou le filter ...
Att je met l'id direct
Euh
Wesh
Avec l'id ça marche
Ah att
vérifie ton id alors^^
car le code est bon pour le coup quasi sur a 99%
1% pour le doute

@slim anvil
Comment je peut faire pour define toutes les value d'un fichier json sur un état ?
Car moi ma méthode pour reset la data c'est de tous effacé
get ton tableau, tu boucles dessus et tu reset chaque valeur
Si jamais tu as un tableau de users dedans, tu fais un
users.map(user => (
user.state = 0 // set good key and new value
))
par ex
Je vais try alors
et après tu set ton users a ton fichier json
Ah tu as pas de clés users avant, ca peut etre sympa de le rajouter si jamais un jour tu veux use le meme fichier json pour stocker autre chose
de pas tout mélanger
Ouai je m'en suit rendu compte a la fin :/
avec un
{
users: [{}, {}],
warns: [{}] // ceci n'est pas un vagin :kappa:
}
par ex
bah tu peux edit c'est rapide
tu add juste une clé et quand tu get ton fichier json, tu fais juste file.users
ou direct const { users } = fsRead.....
Et il n'y a pas d'autre moyen sans key ?
Ah si bah tu boucles sur tes objets
mais c’est moins propre je trouve t’es au début tu devrais l’arranger direct pour si jamais tu veux faire évoluer le truc
après tu peux use une vraie db aussi au moins hop
!boost
:one::two: Nitro Boost
Deviens toi aussi un Michel en boostant le Discord ! :sunglasses:
Les avantages à boost le Discord ?
:small_blue_diamond: Accès au site https://g-ca.fr avant l'ouverture + un accès à notre environnement de dev pour tester les futures fonctionnalités !
:small_blue_diamond: Accès au channel #michel-room pour parler entre Michel et avoir accès aux nouveautés et aux annonces avant les autres membres !
:small_blue_diamond: La possibilité de choisir un emoji qu'on ajoutera sur le Discord :scream:
:small_blue_diamond: La possibilité de changer de pseudo :eyes:
:small_blue_diamond: La possibilité d'utiliser des emojis externes :smirk:
:small_blue_diamond: Un taux de chance supérieur aux autres membres lors des giveaway :tada:
:small_blue_diamond: Un taux de gain en XP supérieur aux autres membres :ok_hand:
:small_blue_diamond: La possibilité de participer à des soirées karaoké avec le staff :smirk::microphone:
Et encore pleins d'autres :scream: (mais c'est déjà bien là nan ?!)
Alors n'hésite plus ! :heart:
oui
comment ça
quand tu react(':thumbsup:')
met le en forme please
plus lisible
manque une '
dans ton setFooter
l'url cdn.discord.com/....
.setFooter('Château des roi', 'https://cdn.discordapp.com/avatars/658074146567094282/3fccc87e964683f3ae4796b78892f504.png?size=2048' ');
ah non je crois c'est discord qui delete les '
ça m'affiche pas tout comme il faut, relou, prend un screen de ton code plz ^^
tu l'as ajouté a ton serveur l'emoji ?
yes better
mais il est ou le message.react() ?
ah ok dans le setTitle
tu as l'id de l'emoji ?
tu dois le get
client.emojis.find(emoji => emoji.name === "server")
je pense , mais pas sur
.setTitle(`${client.emojis.find(emoji => emoji.name === "server")} Notre hébergeur`)
après vraiment pas sur que ça fonctionne dans les embeds jamais vu, mais ca doit l'etre
top
Sinon pour avoir l'id d'un emoji il suffit de mettre un backslash devant
Genre pour
tu fais \:demizieu: et tu obtiens !demizieu
Yes
ah oué bien vu
Ou sinon ça va te le donné au format Unicode il me semble ( Pour ceux qui sont déjà de base )
🔨
\🔨
Comment je peux créer un fichier json ? Genre en générer un ?
C'est a dire que il n'y as pas de fichier , et que avec un module ou une fonction j'en créer un a la racine de mon fichier et le rempli
C'est possible ?
je vais tester ça , merci !
Salut, vous savez si il faut faire un bot pour que quand je clique sur un bouton sur Gmod ça me fait venir sur discord et ça me mette une fenêtre avec le prénom du serv etc...
Non bah merci quand même
Bah si
Si tu appuis sur un Button ingame c'est du glua
Ah c'était une question, bah il te faut un Addon in game et un bot discord
@ionic glade
quelqu'un ici pour m'aider à créer un système de tâches ? là je bloque parce que le joueur quand il rejoint la tâche n'est pas mis dans le json (fs), et donc normalement grâce à ça je devrais faire une vérification pour que le joueur rejoigne une seule fois une tâche 😉
bah
qd y'as un nouveau join , tu vérifie si il n'y est pas dans ton json. Si il n'y est pas , tu l'ajoute
dnc en gros tu fais :
const task = JSON.parse(fs.readFileSync('./task.json'));
let membre = bah ton membre quoi
if(!task[membre.id]) {
task[membre.id] = []
task[membre.id]
fs.writeFileSync('./task.json', JSON.stringify(task));
}
```|
un truc dans le genre
ouais mais ma data ressemble à ça:
"tasks": [
{
"userId": "249459790953185280",
"name": "spo",
"channelId": "673173059598811153",
"users": []
}
]
}
quand il n'y a pas de tâches, il n'y a rien sauf:
"tasks": [
]
}```
tasks
Doit être ton args[0]
càd ? || c'est à dire* ||
@keen narwhal
Je t’ai dis, quand il !create Tache tu ajoutes comme je t’ai fais dans ta task avec userId, channelId et un tableau de users, une fois qu’il fait le !join tu regardes dans tes tasks si il y en a une ou le message.channel.id === a task.channelId avec un .find(), si oui tu push l’ID du user dans cette task
ça peut pas être plus clair..... je te l’ai expliqué plusieurs fois ^^
sinon , j'ai encore un pb avec les requètes xd
ouaip sauf que j'y connais rien dans fs, et si je comprends rien ça n'a aucun sens 😒
var urlToken = 'https://mtxserv.com/oauth/v2/token';
var query = {
grant_type: 'https://mtxserv.com/grants/api_key',
client_id: '',
client_secret: '',
api_key: ''
};
$.ajax({
url: urlToken,
dataType: 'json',
data: query,
success: function(data) {
console.log(data); // contain access token
},
error: function(data) {
console.log(data.responseText);
}
});
En javascript c'est ça , sauf que j'ai pas compris comment adapter ça dans mon code :/
sachant que je fais mes requetes avec request
Bah ça n’a plus rien avoir avec fs là c’est juste du JS de base
Car les fonctions de write et file y sont déjà
Tu dois générer un access_token hellaStok
oui je sais , comme avec spotify
mais là enft , je sais pas ou mettre mon grant type et ou mettre le reste
j'ai fait ça :
je l’avais fais j’ai plus le code mais en gros tu get la route en lui passant les datas demandes il va te renvoyer un access_token puis pour tes prochaines requête tu devras le set dans les authorizations headers
request.post({
url: 'https://mtxserv.com/oauth/v2/token',
body: {
grant_type: 'https://mtxserv.com/grants/api_key'
}
headers: {
client_id: '',
client_secret: '',
api_key: ''
},
time: true
}, function (error, response, body) {
console.log(body)
})
c'est faux ça non ?
ah oui faut get
Mais yes déjà c’est du get
okép
throw new ERR_INVALID_ARG_TYPE('first argument',
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer. Received type object
at write_ (_http_outgoing.js:618:11)
at ClientRequest.write (_http_outgoing.js:586:15)
jdois buffer.from() ?
j'ai beau faire ce que tu m'as dis, ça ne fonctionne pas (même en essayant le code que tu m'as donné)
Le code que je t’ai envoyé au début fonctionnait, tu devais juste passer le channelID dans la création de la task avant de la push, donc rien avoir avec du fs, et ensuite regarder dans ton tableau tasks si une task.channelID === message.channel.id donc pas du fs non plus ... c’est juste que c’est un sacré bordel sur le code comme je t’ai dis ça va être compliqué de faire un truc bien ^^
Yes hellastok test sûrement
bah tjrs pas
Mais ça fonctionne comme Spotify quasiment
ah
ah oui jdoit utiliser querystring non ?
tjrs pas
oh jsuis pas futé
c des strings enft
'grant_type' etc
tjrs pas xd
ça me soule en plus y'a personne qui peut m'aider 😒 (pour le refaire)
Tu as que l'ajout de task sur ton bot discord strax ?
oui
Honnêtement, si tu as deja fais du js tu iras plus vite a le refaire, c'est 2 commandes c'est rapide
j'ai déjà fait du js, sauf que là vraiment j'ai jamais été aussi paumé
pourtant ça reste des basiques 🤔
j'y arrive vrmt pas xd
pour y arriver, faudrait que quelqu'un m'explique fs, après j'y arrive je pense sans pb
bah le fs il est déjà fait de toute façon
FS c'est juste un fichier json, ou si tu le get tu vas récupérer une string, qu'il va falloir parse et donc tu auras un objet
Enfin fs c'est pas ça, mais dans ce cas ça te permet de faire ça
okey, alors tu pourrais à la limite me dire ce que je dois utiliser et l'expliquer stp (j'ai vu les pushs, les writefile,... mais je comprends pas vraiment son utilisation)
j'avais fait une commande d'afk une fois avec une map
c'est possible
j'tenvoie le tuto en dm , c'est de l'anglais et c'est super complet
tu modifie bien sur par les infos dont t'as besoin pour tes tasks
en gros, mon système de taches servirait à voir des gens qui join justement ces taches, on pourrait en créer plusieurs et en rejoindre grace à une commande (!join)
okey, merci, je vais voir 
J'aimerais supprimé un role si il a deux rôle en commun :/
Mais il me met un erreur
Trouvé
🙂
fs c un module de système de fichiers (file system), il sert pas à gerer des array
ok
mais là c'est pareil, je reste coincé à l'endroit où je join la tâche, je n'arrive pas à add le joueur dans le tableau users de la table de la tâche...
salut ca fais deux jours je crois que j ai fais une erreur de syntaxe mais je trouve pas et j ai des erreurs de merde
(node:126) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'createChannel' of undefined
at Object.execute (/home/runner/bot/commands/setup.js:30:29)
at Client.client.on (/home/runner/bot/index.js:39:34)
at Client.emit (events.js:198:13)
at Client.EventEmitter.emit (domain.js:448:20)
at MessageCreateAction.handle (/home/runner/bot/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (/home/runner/bot/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/home/runner/bot/node_modules/discord.js/src/client/websocket/WebSocketManager.js:393:31)
at WebSocketShard.onPacket (/home/runner/bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:434:22)
at WebSocketShard.onMessage (/home/runner/bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:294:10)
at WebSocket.onMessage (/home/runner/bot/node_modules/ws/lib/event-target.js:120:16)
(node:126) 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: 1)
(node:126) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Met le sur git à la limite que ce soit plus simple à la lecture
ok ok
Et montre ton fichier setup.js
Tu peux delete et me faire un screen please, je suis sur tel le rendu est affreux 
Preuve que je mens pas 
super lisible donc je te comprends pas @slim anvil
Salaud
T’es un chef
tu as 2 lignes avec le createChannel, fais avant
const guild = client.guilds.get(servId)
Et log le voir si c’est pas undefined
Mais pourquoi tu récupères pas juste le client.guild ?
@rare gulch aucun rapport avec l'erreur mais tu peux remplacer tes <Promise>.catch(err => console.error(err)); par <Promise>.catch(console.error);. Ici dans ton catch tu mets une fonction qui n'a que pour seul intérêt d'en appeler une autre, autant directement l'appeler (à part si tu veux réaliser un traitement).
ok merci les gars je prends note de vos commentaire je verais ca demain car j ai cour demain et il faut etre frai pour la journée
HAHAHAHA quelle enflure ce mec, toi aussi prend en de la graine il se couche tôt lui
Good Night MrMoi
good night
ah ouai trop chaud mdr comment on fait pour héberger un bot pls
tu te prend un petit serveur
tu en as des pas cher chez notre partenaire wizzard heberg par exemple
Hello ! j'aimerais savoir comment récupérer une value dans une table mysql pour l'intégrer a un bot discord js ?
Hello @weak grove https://www.w3schools.com/nodejs/nodejs_mysql_select.asp pour get des datas mysql
ah nice merci 🙂
J'aurais besoin d'aide avec ce code =>
client.user.setActivity("Surveillance serveur", {
type: "STREAMING",
url: "https://twitch.tv/"
});
Cannot read property setActivity
Tu l’as mis ce code ?
Où*
client.on("message") + check si c’est un message privé (message.channel.type === dm)
personne ne saurait m'aider ? 😒
pourquoi tu essayes pas deja de faire, et quand tu bloques tu viens ici et on t'aide ??
je l'ai dis...



