#javascript-typescript
1 messages · Page 51 of 1
@oak turret si tu veux compter le nombre de gens qui ont réagi à une réaction spécifique (comme sur notre truc dans #suggestions par exemple), tu dois regarder le nombre de membres qui ont réagi avec cette réaction, pas le nombre de réactions
Si t'es en v11 :
// À noter: j'utilise message.reactions.first() mais si tu peux obtenir la réaction
// précise c'est mieux
let reacNbr = message.reactions.first().users.size;
Si t'es en v12 :
// À noter: j'utilise message.reactions.cache.first() mais si tu peux obtenir la réaction
// précise c'est mieux
let reacNbr = message.reactions.cache.first().users.cache.size;
@keen narwhal si j'ai bien compris en gros tu veux faire en sorte d'envoyer un dm quand quelqu'un fait la commande help ?
En gros pour faire ça tu veux vérifier que tu peux envoyer un DM avant de faire quoi que ce soit, vu qu'en effet il est possible que la personne bloque les MP aux gens qui ne font pas partie de ses amis ou ne sont pas sur le même serveur
Kk et si ses mps sont débloqué, je fais { mon code } else { le code qui dit que ses mp's sont bloqué }
en gros ouais
tu peux utiliser un try catch par exemple pour ça
ça fonctionne également
Mais, la j'ai un problème avec une autre commande (Parce que voilà je m'ennuyais un peu pendant l'attente de ta gentille réponse et merci ) (node:13136) UnhandledPromiseRejectionWarning: FetchError: invalid json response body at https://lewiki/fr/wiki/api/v1/Search/List?term=La%20Recherche reason: Unexpected token < in JSON at position et mon code est : ```js
const Discord = require('discord.js')
const querystring = require('querystring')
const fetch = require('node-fetch');
module.exports.run = async(client, message, args) => {
if(message.deletable) message.delete();
if (!args.length) {
var F = new Discord.MessageEmbed()
.setColor(`#EFFF00`)
.setTitle(`${args.join(' ')}`)
.setDescription(`Tu as besoin de mettre quelque chose à chercher !.`)
.setTimestamp()
.setFooter(`A!ex Bot Wiki !`)
message.channel.send(F)
}
const query = querystring.stringify({ term: args.join(' ') });
const { list } = await fetch(`https://naruto.fandom.com/fr/wiki/api/v1/Search/List?${query}`).then(response => response.json());
if (!list.length) {
var E = new Discord.MessageEmbed()
.setColor(`#EFFF00`)
.setTitle(`${args.join(' ')}`)
.setDescription(`Aucun résultat à été trouvé pour : **${args.join(' ')}**.`)
.setTimestamp()
.setFooter(`A!ex Bot Wiki !`)
message.channel.send(E)
} else {
const trim = (str, max) => ((str.length > max) ? `${str.slice(0, max - 3)}...` : str);
const [answer] = list;
const embed = new MessageEmbed()
.setColor('#EFFF00')
.setTitle(answer.word)
.setURL(answer.permalink)
.addFields(
{ name: 'Description', value: trim(answer.definition, 1024) }
);
message.channel.send(embed);
}
}```
J'ai refais au complet la commande Wiki que j'avais ( Merci Aiko ) parce que je voulais la faire moi même donc j'ai essayé une manière différente de celle avec superagent ou https et lorsque j'essaie la rechercher j'ai
Voilà mon deuxième problème xD
@timid loom pourquoi sur la v12 devoir rajouter .cache a tout bout de champs?
genre
try {
member.send('le dm');
} catch (err) {
channel.send('impossible d\'envoyer le dm :(');
}
@hazy mirage parce que c'est plus directement aux collections que tu as accès mais à des managers
dans les faits ça permet d'avoir un meilleur contrôle du cache justement
Mmmh d'accord j'essaie
mais le problème (comme souvent avec les changement majeurs de version), c'est que tout le monde n'a pas l'utilité de ce contrôle, donc au final c'est + verbeux mais pas forcément + utile
@keen narwhal hmm je pense que le soucis sur ta deuxième commande c'est seulement au niveau de la réponse de la part du forum
Bah, je pense pas parce que avec l'aide d'Aiko ( Il avait tous fait c'est pour ça que j'ai voulu recommencer ) bah ça marchait...
à aucun moment le caractère < est légal en JSON, donc soit JSON.parse() est très mal foutu et reconnaît un caractère qui n'existe pas soit le site renvoie une réponse incorrecte
la dernière solution c'est que ta façon de recevoir cette réponse est invalide, mais je t'avoue que je suis pas méga disposé à lire ton code
Bah du coup le > je devrais le remplacer par quoi ?
nan mais
c'est pas un truc que tu peux remplacer à priori
ok
je sais pourquoi
ta page de requête à l'api existe pas sur ton forum
enfin ton forum
ton wiki
essaie de remplacer ton lien par ça https://naruto.fandom.com/api/v1/Search/List?${query}
tu fais une requête sur une page html donc fatalement sa réponse c'est du html
Yep ça à marcher, mais la ça me dit que length est undefined ;-;
depuis quand length n'est pas définis ;-;
alors je crois que tu envoie une paramètre term au lieu de query donc ton truc fonctionne pas déjà
en fait t'as pas adapté ton truc à l'api de fandom
lis la doc de l'api de fandom et tu sauras comment faire
K je fais ça, je reviens après :3
@timid loom ok ty
D'ailleurs
tu vas peut etre pouvoir me renseigner
tous les bots actuellement en prod sur la v11
je vois une popup d'alerte sur leur wiki disant qu'il faut absolument passer sur la v12 je sais pas quoi
Dans les faits, a la date limite, ces bots ne fonctionneront plus si ils restent sous la v11 ?
pour différentes raisons c'est mieux ouais
je crois notamment que c'est parce qu'ils vont plus update les routes api
et donc si il y a un problème ça sera corrigé que dans la v12, ils vont arrêter le support de la v11
par exemple nous sur gca on va devoir refaire toute l'archi des bots pour s'adapter à la v12
ouais refaire les bots tout court car là 
Ok, Taink. J'ai résolu un problème sauf que enfaite, lorsque je fais >>wiki Naruto Uzumaki ça me donne ...
Genre why ????
bah en gros ouais haha @hazy mirage
Mais du coup la v11 sera plus supporté comme win 7 vs win 10 mais continuera de fonctionner selon toi ?
@keen narwhal ta requête doit être mal formée
Yep i think so
@hazy mirage non pas pareil
discord.js est une librairie qui fonctionne via les routes de l'api
pour te faire une analogie c'est comme si tu voulais faire fonctionner win98 sur du hardware de 2020
ça peut fonctionner mais rien ne le garantit
oui non mais clairement pas pareil, mais ce que je sous entendais c'était que win 7 fonctionne toujours malgré l'arret du support
ok merci ^^
la v11.5.1 sera deprecated
J'avais pas see, merci @timid loom (Je te tag pour te remercie ahah ^^) !
Les codes seront break en octobre (ceux en v11) et la v12 est quand meme meilleur 🤔
c'est peut-être meilleur mais ça reste bien plus verbeux
Je vois pas énormément de changement a part l'utilisation du cache
si ils ont fait ca, y'as surement une raison 🤔
la raison c'est aider à la gestion du cache justement
Est-ce qu'on peut encore fetch des channels dans discord.js ?
Parce que là
J'ai essayé plusieurs trucs et rien ne marche
<Client>.channels.cache.get(id)
t'es en v12 ?
Je te prends un screen ou je te passe le code ?
Vasy screen
comment je fais pour en mettre trois ?
T'en met pas 3
Bah il me faut client, message et member xD
client tu l'as plus haut
message ? t'as 0 message vu que c'est une nouvelle personne qui join
member c'est le seul que tu gardes
pareil pour le remove
Np
Encore un débutant ;-; et encore pour longtempppppss
Yep, sûrement mais je ne savais pas quoi chercher
Regarde tes events
La premiere chose
des que tu les connaitras par coeur ca sera plus simple
Pour avoir un channel, il se peut parfois qu'il ne soit pas dans le cache. À ce moment-là, il faut plutôt essayer de le fetch :s
client.channels.fetch(id)
.then((channel) => {
// Ton code avec le channel ici
})
.catch(console.error);
pas un pavé je suis juste ultra lent haha
D'ailleurs on est d'accord que c'est bien possible de fetch un user qui n'a pas de discord en commun avec le client
@keen narwhal a cause dr ton event 
Surement
Bon, il ne me reste pas grand chose à faire pour mon bot. Je pense que ce qui va me causé le plus de problème sera le wiki ( Qui m'en cause déjà xD )
Il consiste en quoi ?
@keen narwhal
Bah quand tu fais >>wiki <la recherche> bah ça send un embed qui répond à ta recherche
Tu dois faire du scraping
Je sais pas c’est quoi xD ( un peu trop con pour toi xD )
Alors là
Tu va chialer a le faire ton système de wiki
Aiko, me l’avait avec https ( Le package) mais vue qu’il me l’avait fait au complet bah je voulais le refaire XD
sinon tu as https://www.npmjs.com/package/scrape-it
Ouais, je regarderais après merci :3
Je-je-je pense, que que que je vais m'arranger avec https xD
Bah c'est le même principe
Yep, mais du coup, j’ai essayé un truc mais genre ça marche pas ( au cas où tu veux m’aider ) ( je te passe le code ? )
If u want
const Discord = require('discord.js')
const fetch = require('node-fetch');
module.exports.run = async(client, message, args) => {
if(message.deletable) message.delete();
if (!args.length) {
var F = new Discord.MessageEmbed()
.setColor(`#EFFF00`)
.setTitle(`${args.join(' ')}`)
.setDescription(`Tu as besoin de mettre quelque chose à chercher !.`)
.setTimestamp()
.setFooter(`A!ex Bot Wiki !`)
message.channel.send(F)
}
const query = args.join(' ')
const list = await fetch(`https://naruto.fandom.com/fr/api/v1/Search/List?query=${query}`).then(response => response.json())
if (!list.length) {
var E = new Discord.MessageEmbed()
.setColor(`#EFFF00`)
.setTitle(`${args.join(' ')}`)
.setDescription(`Aucun résultat à été trouvé pour : **${args.join(' ')}**.`)
.setTimestamp()
.setFooter(`A!ex Bot Wiki !`)
message.channel.send(E)
}
const trim = (str, max) => ((String.length > max) ? `${str.slice(0, max - 3)}...` : str);
const answer = list
const embed = new Discord.MessageEmbed()
.setColor('#EFFF00')
.setTitle(answer.title)
.setURL(answer.url)
.addFields(
{ name: 'Description', value: trim(answer.ns, 1024) }
);
message.channel.send(embed);
}
module.exports.help = {
name: "wiki"
}
Voilà je te sors l'error ça ne sera pas long
Bah la tu use pas https
Je sais, parce que je trouvais pas la doc pour ce que je voulais faire
J’ai use node-fetch
Car https ne le permet pas
Enfin si normalement
Ah
Du scraping c'est juste récupérer le content de la page et faire des recherche dedans
Ouais, si tu n’arrives pas à m’aider, je regarderais pour le scrapping demain
Il faudrait déjà que tu débug ton résult au lieu de le mettre directement dans un embed
Et faudrait try avec le module que je t'es send
Oki, j’essaie et je reviens si ça ne marche pas :3
ok
scrapeIt("https://ionicabizau.net", { // Je met le lien de mon api ici ?
title: ".header h1"
, desc: ".header h2"
, avatar: {
selector: ".header img"
, attr: "src"
}
}).then(({ data, response }) => {
console.log(`Status Code: ${response.statusCode}`)
console.log(data)
})``` Ça sert à aller chercher l'API on est d'accord ?
Tu sait c'est quoi une api ?
Bah le truc qui sert à faire des requêtes non ?
Faudrait que tu sache c'est quoi la différence entre le scraping et une api
Bah une api aussi
Le but du scraping c'est de pas use une api mais de récupérer brut le contenue d'une page
Une api, vois ça comme une interface où dedans tu auras des informations qui seront donnée par le site
L'utilité du scraping c'est de ne pas avoir besoin d'une api et ducoup pouvoir tout récupérer sur une page en elle même
Par exemple récupérer une image de background mis sur une page
Ahh ok
En gros, sur le naruto fandom lorsque genre ca mettais un bout de la description ( parce que sinon trop gros pour Discord ) bah ça coupait en plein milieu sauf qu’avec Scrapping non ? Si j’ai bien compris
non...
@keen narwhal en gros là le scraping c'est prendre carrément la page internet qui correspond au wiki et récupérer des infos dessus. c'est lourd et généralement fastidieux : il faut faire en sorte de l'adapter à la page internet précisément parce que c'est fait pour être interprété par un navigateur internet
du coup ce qu'on utilise à la place c'est des API : c'est beaucoup plus facile à gérer et en général ça change peu, et ça donne les informations dans un format qui est facile à lire pour une application (par exemple, un bot discord)
le problème c'est que les API c'est les sites qui doivent les développer et donc c'est pas toujours là ou bien fait
Oh, d’accord mais du coup pour ma commande c’est mieux un scrap ou l’api ?
Ah k
Le wiki ne possède pas d'api
Le fandom si
en l'occurrence fandom c'est super bien foutu leur api donc je vois pas pourquoi tu voudrais t'embêter à récup tout le contenu de la page
Ah bah xD
Tu as du mal t'exprimé avec Aiko et moi
Il va juste me falloir comprendre tout ça parce que je sens que je vais en chier sa mère
Car moi je pensais que tu parlé du wiki gmod
Effectivement, j’ai toujours eu du mal pour expliquer xD
Ah non xD
Bah c'est pas pareil alors
Toute la doc dont tu as besoin est là normalement https://naruto.fandom.com/api/v1/
A noté que certains api on besoin d'un token d'identification pour limité par exemple le nombres de requêtes
Voir avec fandom s'il en ont
Apparemment non
Ouais, mais comment l’utiliser et comment faire en sorte de la placer dans un embed, je pense pas que ce soit expliquer dans le lien fandom.. je regarderais demain et merci :3
Nop
Par rapport au lien que j'ai envoyé c'est file qui contient le json de l'api
Donc après par rapport a https://naruto.fandom.com/api/v1/Activity/LatestActivity?limit=10&namespaces=0&allowDuplicates=true
Pour récupérer Items ça sera
File["Items"]
Ou
File[0]
Ou
File.first()
Kk
oula tu complique pas mal la chose fireless
@keen narwhal déjà est-ce que tu sais ce que c'est JSON ?
Je donne juste des exemples x)
Sait-tu c'est quoi un Object, un array ?
Bah c’est une extension du js non ?
Non
Ça sert un peu de stockage
Ah k
Si tu veux le nom entier c'est JavaScript Object Notation
Je connais tellement rien xD
le but de JSON c'est pas de stocker mais plutôt de transmettre des données
ça permet d'uniformiser la mise en forme des données dans un format qui est compréhensible pour n'importe quel langage
Petit tuto pour use du json https://developer.mozilla.org/fr/docs/Learn/JavaScript/Objects/JSON
Le JavaScript Object Notation (JSON) est un format standard utilisé pour représenter des données structurées de façon semblable aux objets Javascript. Il est habituellement utilisé pour structurer et transmettre des données sur des sites web (par exemple, envoyer des données d...
Ahhh !
en fait ça a son utilité parce que le plus souvent les sites par exemple c'est pas fait en javascript
donc ça permet de le transcrire en javascript, en python, en ce que tu veux
Kk. Je suis vraiment fatigué xD et je regarde un truc en même temps, donc je regarderais ça demain
je vais faire une sorte d'explication rapide tu peux la lire quand tu veux
je sais que c'est pas toujours facile de lire les documentations mozilla parce qu'elles sont davantage destinées à des gens qui s'y connaissent un minimum
Là ce que te transmet l'api c'est une série d'informations sur les résultats de ta recherche. Pour savoir le contenu, tu peux aller sur la doc ou simplement faire la requête via ton navigateur pour savoir ce que tu vas recevoir.
Voici ce qu'on peut tirer de la doc
Il faut que tu transmette une chaîne de caractères dans ton URL pour faire ta recherche sur le site via le champ query (1). Tu peux utiliser davantage d'options si tu veux affiner ta recherche mais bon en gros voilà.
Ensuite, tu peux voir que le champ items de la réponse que tu obtiens est sensé contenir tous les résultats vis-à-vis de ta recherche. Autrement dit, un tableau de données qui contient toutes les pages correspondant à ta rechercher (2).
Le contenu de chaque élément de ce tableau items est détaillé juste en dessous : tu as un un titre, un id, une url, et un "snippet" (autrement dit un extrait de l'article, ici en format HTML) ; ça c'est les infos que tu peux tirer de chaque élément du tableau (3).
Tout ce qu'il te reste à faire c'est récupérer le contenu de la réponse de l'api et laisser javascript interpréter le JSON pour en faire un objet.
Pour la dernière partie de mon message, c'est tout simple.
// list, c'est tout bêtement l'objet que t'envoie l'api sous forme de JSON
// tout ce qu'il te reste à faire c'est récupérer les résultats qui t'intéressent
const result = list.items[0]; // tu prends (par exemple) le premier résultat de ta recherche
const titreArticle = result.title; // Le titre de l'article
const urlArticle = result.url; // L'url menant à l'article
El profesor, d’ailleurs je voulais dire que sqlite > enmap, beaucoup moins chiant, ça me facilite la vie, par exemple pour les warns, une soirée et c’était bouclée, alors que enmap perso ça faisais des galères
créations d’objects pour les requêtes et c’est partie pour faciliter la vie
C'est pas exactement la même chose...
J'utilise pas enmap perso donc je pourrais pas te dire, mais j'utilise sqlite sur tinkbot et c'est loin d'être pratique.
Sqlite c'est du JSON déguisé, au final tu fais la même chose : t'écris dans un fichier. C'est plus rapide en lecture et en écriture (et encore j'en suis pas certain) mais il n'en demeure pas moins qu'il faut utiliser et avoir accès au système de fichiers, hors c'est pas censé être le cas.
Du coup sur des services d'hébergement comme Heroku, ça fonctionnera pas : il faut utiliser leur base de données pour stocker tes valeurs.
Bonne nuit à tous et encore merci Taink et Fireless :3
yes bonne nuit
@oak turret si je dis pas de connerie enmap c’est du Sqlite
c’est juste une espèce de lib qui se base là dessus
Et sinon mon avis personnel, le mieux sur ce genre de bot c’est d’utiliser du noSql beaucoup plus adapter au besoin de stocker un peu tout au même endroit, sans a faire de jointure à chaque requête qui ne sont pas nécessaires + que ça
dans ta collection warns tu auras un document qui contient mon discord_id, la date la raison et qui a warn (son id)
Je vois pas où est le besoin d’avoir des tables, car il y aura pas vraiment de jointure sachant que quand tu récupères le document de ce warn, tu vas utiliser les 2 discord id (celui qui a warn et celui qui s’est fait warn) pour fetch le user avec l’api discord 🤔
tu ne stockes pas le user dans une table faites pour ça, car les infos ne seront pas forcément à jour, donc le sql est pas le plus adapté, autant faire du noSQL
pas bête, perso j’ai juste stocker la table warns avec dedans l’id autoincrement le nom du joueur son nombre de warns et son id discord
Et vous faites des auto save de votre db ?
parce que oui le JSON ça se corrompt mais si vous faites 0 saves automatiques le jour ou ça pete cote serveur vous perdez tt aussi
utilisez des solutions de db dans le cloud, style mongo atlas pour du noSQL par exemple
Ils font des saves eux mêmes, donc si ton serv crash, plante, ou merde après une install la db est pas affecté non plus
Hey salut à tous j'ai un petit problème !
@hazy mirage m'avais déjà aidé mais ça ne fonctionne pas
Code :
async function deletewh(channel) {
const webhooks = await channel.fetchWebhooks()
for (hook of webhooks) {
hook.delete()
}
}
Erreur :
(node:22716) UnhandledPromiseRejectionWarning: TypeError: hook.delete is not a function
Ce que je cherche à faire : Supprimer tous les webhooks du channel en question
@keen narwhal Ouais, mais c’est un p’tit bot perso donc je pense que le JSON peut faire l’affaire
hook
euhhhh
Pourtant ça devrait pas faire ça mdr
aaaaah
ah mais si
mais si$
ça log un par un
ta log dans la boucle x)
je suis con
oui mdr
je viens de capter en meme temps que toi mdr
je vais mettre une "séparation"
oui
donc ça prend un par un tous les webhooks
ok
là ppur le coup ça log tous les webhooks du channel
ce qui est logique
https://discordapp.com/channels/223070469148901376/617677968474636298/716963979234377768
Du coup c'est la même chose que ça
sinon essaye ça JS const hooks1 = await message.guild.fetchWebhooks(); await hooks1.forEach(async webhook => { if (!webhook.channelID === "Channel_ID") return webhook.delete(); });
ouais mais nan xD
aaaaah attend
async function deletewh(channel) {
const webhooks = await channel.fetchWebhooks()
for (let [id, hook] of webhooks) {
await hook.delete()
}
}```
derien ^^
Taink, du coup pour l'url que j'utilise je dois utiliser toute les options ?
pas nécessairement
D’accord, là je suis entrain d’essayer de faire la commande, je suis rendu à que je veux log les résultats obtenu par la recherche alors j’ai fait un console.log( ) mais je ne sais pas quoi mettre à l’intérieur des parenthèses ;-;
il me semble que tu récupère les résultats dans une variable appelée list, nan ?
Bah j’ai essayé console.log(list) mais ça me dit que c’est indéfinis
hmm étrange
Tu veux que je te montre le code ?
yes
Screen ou en bloc ?
va pour un screen
oula ok t'as grandement changé le corps de ta fonction
bon là tu as ans qui contient la réponse de l'api
Ah ok
ce que tu dois faire c'est récupérer l'interprétation en json de cette réponse
Du coup un JSON.parse() ?
Du coup après mon console.log je met .JSON.parse() ?
Ok okay
undefined:1
[object Object]
^
SyntaxError: Unexpected token o in JSON at position 1
un truc alternatif si tu utilise node-fetch (c'est ce que j'utilise perso)
const { items } = await fetch('tonlien').then((res) => res.json());
// tu peux aussi utiliser ça
fetch('tonlien').then((res) => res.json())
.then((object) => {
// ici tu peux utiliser object.items normalement
})
.catch(console.error);
tu peux faire soit la première ligne soit la seconde
Je vais repartir sur node-fetch alors xD
non mais visiblement tu avais déjà un object, alors pas besoin de le parse 
;-;
hmm?
ah j'avais pas vu la syntax error
ouais en effet tu peux déjà essayer de console.log(ans)
si c'est un objet tu devrais tout voir
mais ça me surprend que ce soit un objet
ah ok
je vois pourquoi
ouais utilise node-fetch, sinon tu vas devoir t'embêter à utiliser des éléments de la classe clientRequest
et bon bah c'est pas la peine
Mais du coup node-fetch j’ai pas grand chose à faire ?
Je regarde le wiki et ouais, il n’y a pas grand chose voir rien..
Et ensuite envoyé le message?
? comment ça
nan mais si tu prends la ligne que je t'ai donné tout à l'heure là
const { items } = await fetch('tonlien').then((res) => res.json());
t'as juste à faire items[0] pour avoir par exemple le premier résultat
ensuite ouais t'envoie ton message
Kk
Hey salut j'aimerais modifier un vieux message envoyé par un webhook ! C'est possible ? J'ai tenté ça mais bon
// dans l'event : client.on('messageUpdate', (oldMessage, newMessage) => {
oldMessage.channel.fetchMessage(oldMessage.id).edit(newMessage.content)
Mais du coup, je fais Var x = items[0] ?
@cyan iron c'est impossible d'éditer un message envoyé par un webhook
ouais ça ça fonctionne bien
de manière générale utilise plutôt let que var
Ouais, c’est ce que je fais j’utilise const seulement au début pour require certain truc
Rien de plus
Hey me revoilà pour une question rapide je pense, j'aimerais envoyé une image récupérée sur un autre message
if (msg.attachments) hook.send(msg.attachments)
else hook.send(msg.content)
En gros j'aimerais que le bot récupère le fichier envoyé par la personne et l'envoie via le webhook
msg.attachments c'est une collection
tu dois envoyer chaque MessageAttachment un par un
si tu vois pas ce que c'est une collection il faut que tu lise la doc, je peux pas t'aider davantage
( je suis un noob en collection j'ai appris la notion y'a 3 jours lol )
ok merci
y a toutes les infos ici
Taink ça parait qu'il débute pas dans la matière xD
Les collections oui
Bah c'est à dire que je dev que depuis janvier donc bon
Je suis pas ultra bon non plus
Collection = map
.addField(
{ name: 'Description', value: items[0].snippet, inline: true }
)
Mais là j'ai fait un petit système de communication interserveur qui fonctionne à merveille donc je suis content mdr
Et mon bot fait modérationn, économie, rank, etc
@keen narwhal pourquoi tu mets des accolades ?
enlève tes accolades et c'est bon
Bah je veux que ça donne un truc dans le genre sauf qu'au lieu de object object bah j'ai description et au lieu de undefined bah j'ai le snippet
Debug ton object
Tu essaies d'envoyer ton object et non une Key ou une value
.addfield('Description', items[0].snippet, true)
en gros
là à la place de 'Description' tu lui envoyait un objet
donc fatalement c'est [object Object] qu'il t'affiche
Merci Taink et Fireless mais du coup xD, j'ai du codes HTML qui gâche un peu le tous
xDD
yes ça c'est normal
je t'ai dit que snippet c'était un extrait de la page en format html
Yep
rien de surprenant à ce que tu obtienne un extrait en html du coup
Mais du ccoup pour retirer l'HTML je dois faire un truc </span>
Je me souviens pas de c'est quoi la fonction
Aïe
Il faut que je retire mes macros moi
Tu mélange tous
tu peux utiliser ça ```js
items[0].snippet.replace(/</?[^>]+(>|$)/g, "");
https://stackoverflow.com/questions/5002111/how-to-strip-html-tags-from-string-in-javascript#5002161
C'est bon, mais du coup je me demandais si c'était possible de faire en sorte que ça ne coupe pas en plein milieu de la phrase et que ça soit un peu plus long
MMh d'accord
tu peux mettre des points de suspension après si tu veux mais c'est tout
@timid loom Du coup je me suis replongé dans les attachments, je sais comment ça fonctionne maintenant mais j'ai un p'tit soucis, je sais comment envoyer un attachment avec un lien donc ce que j'aimerais récuperer est le lien mais j'y arrive pas
j'ai essayé ça mais ça fonctionne pas :/
let messageattachments = msg.attachments.array()
if (messageattachments) {
console.log(messageattachments[0].url)
}
à la limite tu peux vérifier dans ton if si la longueur de messageattachments est supérieure ou égale à 1
messageattachments[0].url return quoi ?
Super mais ça crash pourquoi ?
alors
console.log(messageattachments[0].url)
^
TypeError: Cannot read property 'url' of undefined
Pour ça @keen narwhal
:/
console log juste messageattachments[0]
Logique
console.log(attachements.url)
dans le foreach
oui
J'ai un problème ultra bizarre
webhooks.filter(hook => {
if (hook.name === msg.author.tag) {
hook.edit(msg.author.tag, msg.author.avatarURL)
return hook.send(msg.content, { files: [messageattachment] });
}
else calc++
})
Là hook est undefined
webhooks.filter(hook => {
if (hook.name === msg.author.tag) {
hook.edit(msg.author.tag, msg.author.avatarURL)
return hook.send(msg.content);
}
else calc++
})
Et là ça marche nickel x)
On m'explique ou pas ?
x)
Personne ne sait ?
:'(
Taink, tu me conseilles quel Package facile d’utilisation et de compréhension pour les stupides comme moi, afin de créer un genre de tâche qui s’exécute chaque jour même heure afin de kick les gens qui n’ont pas le rôle Vérifié ?
Cron
Kk
Mais du coup, il doit avoir une Timezone genre America/New_York ?
En général c'est sur le +0
Donc tu rajoute 1 à l'heure
(En général)
Après les trucs bien foutus t'as tous les trucs horaires
@keen narwhal Désolé du ping, mais genre je test l'exemple voir, j'ai rien changé vraiment et ça ne marche pas..
Tu as bien mis la timezone
Ouais America/New_York
Europe/Paris
Pff
xDDD a
Keskia
T'es pas très intelligent
Maintenant que tu le remarques seulement ? Aiko ne te l'avait pas dit ?
De quoi ?
Le pfff il est beau
Ah 2 QI
Mdr
Il ne m'a jamais parlé de toi 
;-;
Mais pourtant America/New_York existe ;-;
Oui mais t'habite pas à New York ;-;
;-;
;-;
;-;
;-;
Il est situé où ton pays bizarre ?
Bah au canada
xDDD
Donc dans autres
Canada/Atlantic
Canada/Central
Canada/Eastern
Canada/Mountain
Canada/Newfoundland
Canada/Pacific
Canada/Saskatchewan
Canada/Yukon
Marche même aps
;-;
Ayaaaa
Ton module est exécuté a quelle moment ?
Tu va me dead
Bah au lancement
C'est un event
T'es sûr de toi
Oui
Met un console log au démarrage de ton module
Ligne 3
Personne ne sait pour ça 😢
#javascript-typescript message
Nop
😢
Je comprends pasn
Il ne s'execute pas quand c'est dans le module ;-;
Voilà
SAL FOU
Ta ta réponse
;-;
MAIS J'DOIS FAIRE QUOI??? PARCE QUe tous les autres event que j'ai fais marche ;-;
Qui vend une corde et un tabouret svp ?
Viens vocal

Vient aide vocale
bjr, j'aimerai savoir comment je pourrai faire sous Discord.js pour récupérer tous les membres ayant le rôle x, tous les membres ayant le rôle y, et ensuite tous les membres ayant le rôle x ont le rôle y et tous les membres ayant le rôle y obtiennent le rôle z
Tu regardes les roles de tous les membres et tu find si il a le role
@mint oasis tout est dans la doc
okok merchiii
@keen narwhal Hier tu n'as pas joué au Piano je suis dessus
Hey hey, j'ai un petit problème ;-;
J'ai fait une commande pp/avatar mais qui consiste à envoyer la pp de la personne mentionnée dans un embed. Jusque là tout va bien sauf que quand ça envoie, ça ne mets pas en ".gif" pour les pp animées mais ça les mets toutes en ".webp" !
Et bah ce que je voudrais savoir c'est comment régler ça °^°
Mais il n'y a pas de moyen de l'afficher en gif ?
si
Tu dois pouvoir si
qu'est-ce que vous utilisez aussi?
Demande ça à Vasco je posais seulement la question moi xD
tu dois use le "displayAvatarUrl"
Oui, c'est comme ça que j'ai fait
du coup il te récupère le webp je pense
faudrait que tu récupères une autre url i think
ayes bienvu
donc format en png et dynamic en true
Ça marche pas mais ça fait mal à son égo donc il vous le dit pas
Si tu es pas là pour aider les commentaires HS c'est #general
Mais il a un peu raison ^^'
montre comment tu as passés tes params
D'acc :
const Discord = require('discord.js');
module.exports.run = async(client, message, args) => {
let msg = await message.channel.send("Génération en cours...");
const user = message.mentions.users.first() || message.author;
if(!args[0]) {
const avatar1Embed = new Discord.MessageEmbed()
.setColor('0x26E8DC')
.setDescription(`Voici ta photo de profil **${message.author.username}** :`)
.setImage(user.displayAvatarURL("png", true, 1024));
message.channel.send(avatar1Embed);
}
else {
const avatar2Embed = new Discord.MessageEmbed()
.setColor('0x26E8DC')
.setDescription(`**${message.author.username}**, voici la photo de profil de **${user.username}** :`)
.setImage(user.displayAvatarURL("png", true, 1024));
message.channel.send(avatar2Embed);
}
msg.delete();
};
module.exports.help = {
name : "pp"
}```
Un objet c'est genre ["png",
true,
1024] ?
Non ça c'est un tableau du coup
Je mélange plein de truc
Ow
Ouais, ce serait bien de connaitre les différents types quand même
C'est les accolades du coup
Ouais, mais je l'ai mélange je suis jamais sûr, après mes cours et pendant ma pause ce midi, je vais regarder les tuto's grafik art
Good vasco ?
Non, ça ne marche toujours pas :/
Si si
J'avais juste pas enregistré enfaite ^^'
ah xD
Et j'avais codé la version "avatar" et pas "pp"
Top
Merci ! :0
Bonjour, :3 j'ai un event qui permet de rajouter un rôle lorsque la personne ajoute une reaction en dessous du bot, seulement lorsque nous redemarrons le bot, il faut faire la commande etc du coup, chaque fois le message change. On voudrait justement évité que le message doit être renvoyé quand nous relancons le bot... voici le code : ```js
const Discord = require("discord.js");
const config = require('../config.json');
module.exports = async (client, messageReaction, user) => {
const message = messageReaction.message;
const member = message.guild.members.cache.get(user.id);
const emoji = messageReaction.emoji.name;
const channel = message.guild.channels.cache.find(c => c.id === "711656459628183612");
const verifRole = message.guild.roles.cache.get('716804619564482591');
if (member.user.bot) return;
if (["✅"].includes(emoji) && message.channel.id === channel.id) {
switch (emoji) {
case "✅":
member.roles.add(verifRole);
const embed = new Discord.MessageEmbed()
.setColor(`#edeb58`)
.setDescription(`✔️ | Le rôle **• Vérifié** vous a été ajouté !`)
member.send(embed)
message.channel.cache.get(config.channel.verif).send(`<@${user.id}> C'est bien vérifié`)
break;
}
}
}
Regarde un tuto sur les partials
Si juste une condition, et une fonction à rajouter, mais vaut mieux comprendre ce que tu fais, alors va sur internet et regarde les partials message
@red snow Tu aurais pas un lien parce que je voulais prendre lui dans Debuter en web sauf que ça marche pas erreur 504
Salut ! Comment je teste le role du bot mais pas sur le serveur dans lequel est envoyé le message x)
j'ai fait ça mais ça marche pas
if (!channel_choisi.guild.members.get(msg.author.id).hasPermission('ADMINISTRATOR'))
ça marche mais genre ça a bugé je comprends pas
Bah perso quand je veux envoyé un message sur dans un channel qui n'est pas sur le serveur dans lequel j'effectue la commande, je fais un .cache.get('id)
Donc essaie non ?
@keen narwhal https://discordjs.guide/popular-topics/reactions.html#listening-for-reactions-on-old-messages
Merci Taink :3
Bah perso quand je veux envoyé un message sur dans un channel qui n'est pas sur le serveur dans lequel j'effectue la commande, je fais un .cache.get('id)
@keen narwhal Comment tu fais je connais pas :/
Je comprends pas sur la doc
bah en gros, si je veux que ça s'envoit dans un channel précis, je fais client.channel.cache.get('id du channel')
ok je tente
kk
Du coup, ça va sûrement être stupide comme à chaque fois mais... ```js
const Discord = require("discord.js");
const config = require('../config.json');
const client = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION'] });
console.log('Ça se lance bel et bien !')
client.on('messageReactionAdd', async(client, message, args, reaction, user) => {
console.log(`Ici aussi ça marche !`) // <- Ça ne se lance pas !
const message1 = messageReaction.message1;
const member = message.guild.members.cache.get(user.id);
const emoji = messageReaction.emoji.name;
const channel = message.guild.channels.cache.find(c => c.id === "711656459628183612");
const verifRole = message.guild.roles.cache.get('716804619564482591');
if (reaction.partial) {
await reaction.partial();
if (["✅"].includes(emoji) && message1.channel.id === channel.id) {
console.log(reaction.message.author, reaction.message.content)
switch (emoji) {
case "✅":
// Embed
const embed = new Discord.MessageEmbed()
.setColor(`#edeb58`)
.setDescription(`✔️ | Le rôle **• Vérifié** vous a été ajouté !`)
member.send(embed)
//Add Rôle
member.roles.add(verifRole)
break;
}
}
}
if (!reaction.partial) {
console.log(`Ce n'est pas partial !`);
}
})
client.channels.cache.get('id du channel').send("ton message") @cyan iron
np
:3
Personne ne sait ?
@timid loom Tu saurais m'aider ? Parce que genre, le console.log s'effectue bien en dehors du client.on mais j'ai l'impression que tout ce qui est à l'intérieur, ne s'exécute pas... déso du ping à une heure comme ça ;-;
attends, d'où tu tire tous tes paramètres?
sur la doc je vois que reaction et user, rien d'autre
et ouais, évite les mentions si possible
(peu importe l'heure)
D'accord, je ferais attention. Mais du coup genre, ça pourrait empêcher le code de se lancer ?
honnêtement j'en sais rien parce que j'ai jamais essayé, j'en doute très fortement
cela dit ça pourrait avoir des conséquences sur l'exécution du corps de la fonction
Ça ne change rien effectivement. Parce que genre le console log qui est juste après ne s’exécute pas ...
En dessous, du code il y a un client.login..
ok tu me rassure
xD
Et si t'enlève les arguments de trop ?
alors je te confirme qu'il y a PLEIN d'erreurs
Ma console doit encore deconner ;-;
Parce que la ça devrait générer des erreurs oe
et le console.log s'exécute bien quand j'ajoute une réaction
Elle log rien, att relance VSC
je vois pas d'où viens ton soucis
T'as bien sélectionné la bonne console ? 
Parce que t'as le debug et le terminal où un truc comme ça
Je test voir si c’est à cause de mon vsc
nan mais
;-;
j'espère que tu t'attends pas à ce que ça s'exécute tant que t'as pas fait ta réaction
A parce que la tu te serais fais tape
nan mais je les connais les ptits malins là
Genre, il y a plein de truc stupide comme ça que je ne penserais pas mais ça j’y pense xD
Sinon lance ton bot en tapant cmd dans ton chemin d'accès-> et tu marche node index.js
(Le chemin d'accès du dossier, tout en haut la)
Bah j’ai l’impression que la console marche la...
;-;
Sauf que genre ça me dit ID is not defined
;-;
normal
Déjà lors de l'évent tu dois avoir seulement réaction et message ou user je sais plus
User
Bah je dois avoir messageReaction aussi parce que sinon il y a plein de truc qui ne marche plus
t'as besoin que de deux trucs
reaction, et user
autrement tu les sors de nulle part
Tu dois les redéfinir ensuite
et crois moi, tu peux obtenir tout ce que tu veux avec reaction et user
Kk :3
Voici mon code pour un clear sauf que ca me donne cela quand j'exécute la commande
pouvez vous m'aider
Msg tu aurais pus faire let msg = args.join(' ')
Et si tu envoies msg[0] au lieu de x si c’est un nombre?
@umbral marsh
je ne comprends pas ce que tu as ecris, tu peux reformuler stp
Oh, shit il est pire que moi XD
Il y'a une condition qui se nomme isNaN, donc avant de clear, tu dois mettre if(isNaN(x)) return;
Ca marche aussi
je la mets ou ?
Mais en vrai tu vérifie si ce que l’utilisateur a fourni avec msg[0] si c’est un nombre tu return ton message et ton code qui delete.. et dans le message qui dit avoir delete bah au lieu de faire + x tu fais + msg[0] ...
Tu comprends ?
bah tu dois metter quelque chose dans ta condition ^^ C'est une condition comme une autre
😅
Burger tu penses qu’il est pire que moi ?
je suis débutant...
Je suis un débutant aussi XD
bah tu es plus avancé que moi à ce que je vois
Non, juste que je ne comprends pas un certain nombre astronomique de truc et que je me casse la tête à faire un truc complètement simple. Genre définir guild tandis que normalement il est définis fin bref.. je suis un peu beaucoup débile dans ce domaine xD
guild n'est pas définit
Bah je mets quoi alors pour le définir ? Genre...
Const guild = Discord.Guild non ?
oof
Ça marche pas ;-;
Tu mets const guild = client.guilds.cache.get('id')
Ah ouais pas con, je ferais ça quand je passerais pc xD merci :3
fonction
c'est bon le js plus en sueur 
mdrr
@umbral marsh Ça marche ?
@red snow même quand tu l'as définis ça met que c'est indéfinis
j'ai pas la ligne 
C'est quoi que t'as mis dans ton event ?
qu'est ce que ressors message quand tu fais ctrl + espace ou un console.log ?
A mais non je sais ^^
const messageReaction = Discord.MessageReaction
qu'est ce que c'est ? ça sert a rien
;-;
Pour initialiser message tu dois juste faire const message = reaction.message
et tout marchera
J'te dis ça
Name is undefined ;-; Du coup, je dois le définir mais avec quoi ? Aucune idée ;-;
Quand undefined c'est pas forcément que tu dois le définir
c'est peut être un paramètre inexistant aussi
et tu dois mettre reaction.emoji.name
Pas messageReaction
Je l'avais changer par reaction.message.emoji.name
pourquoi mettre .message ^^
Bonne question xDD
Quand Taink a dis que plein de truc étais indéfinis, je pensais pas qu'il en avait autant xDD
Parce que ;-;
maintenant on sort des const xD L'error est maintenant reaction.partial is not a function ;-; et je trouve rien à ce sujet
reaction.message.partial
J'me sens vraiment stupide
Genre tu me sors ça en 30 secondes comme si tu avais fait ça toute ta vie et moi en 3 minutes rien ;-;
L'expérience Alex
mdrr
car à force d'avoir l'erreur
Ui c'est l'expérience
Justement ça veut dire que j'étais con aussi si je connais ce genre d'erreur 
On apprend en faisant des erreurs ^^
Comme a l'école
Effectivement
Je crois rien xDD
Enlève le alors 🤷♂️
Fait
il est async ton event ?
Ça marche @red snow Merci
👌 pas de soucis
C'est quoi la fonction pour log la personne qui se verif genre quand il ajoute la reaction ça envoit un message ?
c'est l'event messageReactionAdd et dessus tu peux récuperer & reaction & user, il suffit juste de faire un callback dessus et hop le tour est joué 😉
C'est bon
Salut
me revoilà ;-; en gros, je voulais que chaque jour à minuit bah les gens sans le rôle vérifié soit kick du coup avec l'aide de Fireless, j'ai fait ça : ```js
const CronJob = require('cron').CronJob
const Discord = require('discord.js');
const config = require('../config.json')
const client = new Discord.Client();
client.on('ready', (message, args) =>{
var job = new CronJob('* * * * * *', function () {
var guild = client.guilds.cache.get(config.GuildId);
guilds.member.forEach(user => {
if (user.roles.cache.has(config.Verified)) {
user.send(`Tu n'a pas acceptée le règlement, tu as donc été expulsé du serveur !`)
.then(msg => user.kick(`N'a pas accepté le règlement !`));
}
});
}, null, true, 'Canada/Eastern').start();
})
mais du coup, j'ai mis à chaque seconde comme ça genre je peux voir si ça marche.. du coup j'ai une error que je ne comprends pas pourquoi.. l'error est :C:\Users\Desktop\α!eχ вøт\events\job.js:10
guild.members.forEach(user => {
^
TypeError: Cannot read property 'members' of undefined
at CronJob.<anonymous> (C:\Users\Desktop\α!eχ вøт\events\job.js:10:15)```
tu déclares guild sans s
et tu utilises guildS
mais l'erreur est pas cohérente au code envoyé
car il met bien guild au singulier alors que ton code non
c'est bien là l'erreur ?
Bah j'ai mis guild et member au singulier mais member est toujours indéfinis et c'est au forEach l'erreur oui
guild.member.forEach(user => {
^
TypeError: Cannot read property 'member' of undefined
Effectivement il l'était i don't know why parce qu'il était définis dans le dossier config fin bref du coup ça me dit guild.member.forEach is not a fonction
guild.member.forEach(user => {
^
TypeError: guild.member.forEach is not a function
t'es en v12 ?
si oui :
guild.members.cache.forEach(user => {
...
})```sinon :
```js
guild.members.forEach(user => {
...
})```
Ah ouais, plus d'error sauf que ça kick pas ;;-
Ah bah enfaite normal
xD
Il n'y a rien pour kick xD
Ah si
Je comprends pas pourquoi les gens aiment pas la V12 OwO c'est un changement comme un autre.. Et il y'a forcément eu des améliorations
Ah bah ça marche
Mais du coup ça kickais les gens avec le rôlent et non ceux sans le rôle du coup j'ai rajouté !
Et là ça à Kick
Eux sans rôle
Je comprends pas pourquoi les gens aiment pas la V12 OwO c'est un changement comme un autre.. Et il y'a forcément eu des améliorations
je trouve que la v12 est tellement mieux
Du coup quand quelqu'un leave et que je veux log le message je dois faire quoi ? Genre mettre entre les accolades ? .setDescription(`${...}, a été kick du serveur !`)
Parce que je voudrais le log, mais je ne trouve pas la fonction approprier à cette effet
Bah oé Samuel, y'a ptet des trucs a rajouter, mais y'a plein de trucs utiles
Surtout que il y a pas tant de gros changements, ça reste des trucs super simpliste à changer pour migrer v11 à v12, c'est juste il y a des personnes incapables lire une doc, et donc forcément quand il faut changer et qu'ils ont appris par coeur certains trucs bah ils ont l'impression qu'ils vont plus y arriver.... alors que suffit de lire et de chercher un peu quoi
C'est la base du dev, la doc, les recherches
Je pense que j'ai trouvé. On ne peut pas le seul moyen de le faire est lorsque quelqu'un quitte le serveur non ?
@slim anvil en plus il y a discord.guide qui on fait un beau récapitulatif
bonjour j'ai un problème j'ai fait un code qui permet d'enregistrer les utilisateur sur un database sauf que quand un utilisateur a un nom du genre "Le P'tit Killer" ou encore "L'opriso87" bah le bot crash je sais que c'est a cause de se caractère ' mais comment régler sa
Code Source
``` connection.query(SELECT * FROM user WHERE id = '${message.author.id}', (err, rows) => {
if(err) throw err;
let usersql;
if(rows.length < 1){
usersql = `INSERT INTO user (id, name, server) VALUES ('${message.author.id}', '${message.author.tag}', '${message.guild.name}')`
} else {
let user = rows[0].user;
usersql = `UPDATE user SET server = '${message.guild.name}'`
}
connection.query(usersql);
});```
Dans la structure de ta table, tu as mis quoi comme type pour le row "name"
@burnt junco
Bah je demande juste quel type tu a mis dans ta row user
Je peut pas faire plus clair
et sans l'erreur on peut pas t'aider
varchar(255)
INSERT INTO user (`id`, `name`, `server`) VALUES (?, ?, ?), [message.author.id, message.author.tag, message.guild.name], function (error, results, fields) {
if (error) console.error(error);
});```
Essaie
ok
Le probleme ne viens pas de la
Bah sans l'erreur je serait pas l'aider mdr
Ici
Si le tag contient un ' ça va fermer le '..' avant la fin et faire n’importe quoi du coup
Mais du coup ta solution devrait solutionner le problème j’ai juste pas lu entièrement
ha bah oui
Sorry 😂
Pourquoi avoir mis '${}'
Surtout
Alors que tu peux mettre ta variable directement
bah je vais essayer sa du coup
usersql = `INSERT INTO user (id, name, server) VALUES (${message.author.id}, ${message.author.tag}, ${message.guild.name})`
} else {
let user = rows[0].user;
usersql = `UPDATE user SET server = ${message.guild.name}`
}```
je met comme sa ?
Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''s#8156, ???? GrandCity | V4.5)' at line 1
Mais
Omg
${message.author.tag} -> message.author.tag
${message.guild.name} -> message.guild.name
usersql = `INSERT INTO user (id, name, server) VALUES (message.author.id, message.author.tag, message.guild.name)`
} else {
let user = rows[0].user;
usersql = `UPDATE user SET server = message.guild.name`
}```
?
bah oui
Error: ER_BAD_FIELD_ERROR: Unknown column 'message.author.id' in 'where clause'
@burnt junco c'est facile à trouver sur Stack Overflow mais bref la solution est simple : il suffit apparemment de doubler l'apostrophe
Autrement dit, pour tout code :
if(rows.length < 1){
usersql = `INSERT INTO user (id, name, server) VALUES (${message.author.id}, ${message.author.tag.replaceAll('\'', '\'\'')}, ${message.guild.name})`
} else {
let user = rows[0].user;
usersql = `UPDATE user SET server = ${message.guild.name}`
}
mrc
bon bah décidément sa veut vraiment pas marcher
TypeError: message.author.tag.replaceAll is not a function
rajoute ça a la fin du fichier String.prototype.replaceAll = function(search, replacement) { var target = this; return target.replace(new RegExp(search, 'g'), replacement); };
alternativement tu peux juste faire ça
if(rows.length < 1){
usersql = `INSERT INTO user (id, name, server) VALUES (${message.author.id}, ${message.author.tag.replace(/'/g, '\'\'')}, ${message.guild.name})`
} else {
let user = rows[0].user;
usersql = `UPDATE user SET server = ${message.guild.name}`
}
mais c'est étonnant que replaceAll ne soit pas reconnu 🤔
je vois pas de replaceAll sur les wiki js 🤔
JavaScript now has first-class support for global substring replacement through the new String.prototype.replaceAll API.
Enfin trouvé 🥵
La méthode replace() renvoie une nouvelle chaîne de caractères dans laquelle tout ou partie des correspondances à un modèle sont remplacées par un remplacement. Le modèle utilisé peut être une RegExp et le remplacement peut être une chaîne ou une fonction à appeler pour chaque...
C'est plutôt replace
Ouais ta fonction elle sert a rien Pilot
Tu fais juste un replace avec ta regard dedans direct
en /g
et ce sera bon
Regex* correcteur naze
Je lui cherchais juste son truc
Bizarre je suis sûr de l'avoir vu quelque part
Yes mais je sais pas si elle est déjà passé cette proposition
la voilà
elle est ptêt juste pas dispo
Mais sa sert a quoi un replaceall alors que raplace fais pareil
Genre dans le replace il va déjà tous remplacé ...
replaceAll permet d'utiliser un substring
c'est moins lourd qu'une regex
et ça permet de le faire dynamiquement bien + facilement, donc ça aurait un intérêt
Bah dans tous les cas tu use un regex
nan
Bah
Dans l'exemple il le fait
tu peux
pas dans tous les cas
bref j'ai juste pas vérifié que c'était dispo, rien de grave vu que j'ai offert l'alternative juste après
ça a un sens de le faire via un replaceAll mais bon si tu le vois pas c'est que t'en as pas l'utilité ¯_(ツ)_/¯
Je sais pas ce que je pourrais rajouter à mon bot pour que sa le complète encore plus vous avez des idées ?
Merci de votre aide aussi chaque fois que j’ai eu des problèmes et que je ne trouvais pas, vous étiez là pour m’aider. Je vous en remercie :3
Ça reste quelque chose que tu dois décider par toi même, si tu trouves des idées plus tard rien ne t'empêche de les rajouter
J'aurais besoin de quelqu'un en vocal qui s'y connaisse bien si possible
Mentionnez moi pls
En vocal ou par écrit mais mieux vocal
merci :)
précises dequoi tu as besoin déjà
que quelqu'un de compétant et dispo puisse en savoir +
Alors en fait j'aimerais récupérer un message avec plusieurs ou une mention, et le renvoyer sans les mentions mais avec le pseudo
alors j'ai réussi
ça fonctionne
mais vu que j'utilise un array les \n font de la merde
donc j'aimerais savoir si il y a une autre méthode je bidouille depuis tout à l'heure et ça m'énerve x)
Tu veux les afficher 1 pseudo à chaque ligne c'est ça ?
non
att
Je veux transformer
Salut @slim anvil
en
Salut Enzo
donc j'ai fait ça :
const msg_mentions = msg.mentions.members.array()
for (let i = 0; i < msg_mentions.length; i++) {
for (let j = 0; j < splited_message.length; j++) {
if (splited_message[j].startsWith("\n")) {
splited_message[j] = "\n " + splited_message[j].substr(1)
}
splited_message = splited_message.join(" ").split(" ")
if (splited_message[j].startsWith("<@")) {
if (msg_mentions[i]) {
splited_message[j] = msg_mentions[i].user.username
i++
} else {
return msg.channel.send(":warning: **Ne mentionne pas autant de monde comme ça !** *Ton message n'a donc pas été envoyé !*").then(msg => msg.react("718445428072513597"))
}
}
final_message = splited_message.join(" ")
}
}
mais le problème étant que quand je reviens à la ligne
salut
@cyan iron
ça me retourne ça :
['salut\n@cyan iron']
Pfiou t'en as écris des choses juste pour ça
Pas besoin du premier .array() pour avoir la length elle y est déjà dedans
c'est quoi le splitted message du coup
ah oui désolé
let final_message = msg.content
let splited_message = msg.content.split(" ")
Et du coup le but c'est quoi Si je fais
Salut @1 , et toi @2 salut aussi, ah je t'avais pas @3 ça va ?
ca doit rendre quoi 
Salut 1, et toi 2 salut aussi, ah je t'avais pas 3 ça va ?
en fait leur username en gros
mais ça après j'ai réussi avec ça
msg_mentions[i].user.username
Ahhh sans la mention ? okéééé
oui
en fait je fait un système de communication interserveur et on me demande cet ajout pour éviter les double ping
Dans ton content les mentions il les sort comment en @Pseudo ou en <@....> ?
<@>
Sinon ça aurait été trop simple x)
J'enlève juste tous les @
ça serait si bien
bah split ton content en enlevant tout les autres qui contiennent <@...>
comment ça ?
En gros tu viens boucler sur chaque memtions, et a chaque tour de boucle tu viens regarder si il y a encore un <@...> dans le content, si oui, tu remplaces que le premier trouver par le username
c'est ce que je fais actuellement
et ce que je veux plus faire en fait
parceque j'ai toujours le problème du retour à la ligne
T'as masses de ligne pour rien
yes
Mais enfaite quand quelqu'un va poster un message avec 3 mentions par ex
d'ailleur il a ragé x)
tu vas delete et renvoyer avec le bot sans les mentions ?
non
en fait là c'est de l'inter serveur
je suis sur un serveur ça l'envoie sur un autre
Ah yes okay
ça delete pas
tout fonctionne nickel à part le double ping, en fait si la personne est sur les 2 serveurs, et qu'elle se fait ping bah elle se fait ping deux fois et c'est relou :/
Mais t'as vu que sur la doc tu as un truc exprès je crois justement
t'as un exemple ici: https://stackoverflow.com/questions/53992497/how-do-i-remove-mentioned-users-from-the-command-arguments-array
le USER_PATTERN te permet d'identifier si il s'agit d'un mention ou non si je dis pas de connerie
oui
en fait j'ai tenter
j'ai fait ça
let argsWithoutMentions = splited_message.filter(arg => !Discord.MessageMentions.USERS_PATTERN.test(arg));
mais ça supprime la mention :'(
Oui car c'est le principe du filter
comment je pourrais la remplacer 🤔
ton splited_message, tu vas venir find dessus pour trouver le premier item qui est une mention grace au user_pattern
si tu en trouves un tu le changes dans le tableau de splitted_mentions
et a la fin tu auras juste a pop()
splited_message.map((item, key) => {
if (Discord.MessageMentions.USER_PATTERN.test(item)) {
splited_message[key] = xx // xx = le pseudo en string sans la mention
}
})
un truc comme ça
ah d'accord
en fait je connais pas les map 😅
du coup j'ai pas tout capté
mais key en gros c'est quoi ?
idk car si il la converti en string j'ai des doutes, sinon tu get le member
ok
je tente
TypeError: Cannot read property 'test' of undefined
ça fonctionnait y'a 10 secondes mdr
ah je crois savoir
ça doit parler en même temps que moi x)
ah non pas ça
:'(
Sinon en vrai tu peux juste use la regex que eux utilisent aussi
item.match(/^<@!?(\d+)>$/)
comme le
if (Discord.MessageMentions.USER_PATTERN.test(item))
aaah
tu fais juste
if (item.match(/^<@!?(\d+)>$/))
ok
Bon ça fonctionne :)
Mais
Quand je reviens à la ligne ça fonctionne plus :'(
donc mon code est condensé c'est parfait :)
splited_message.map((item, key) => {
if (item.match(/^<@!?(\d+)>$/)) {
let user_name = client.users.get(item.match(/^<@!?(\d+)>$/)[1]).username
splited_message[key] = user_name
}
})
on a réduit de bcp koumeme
oui mdr
de énormément
Mais j'ai toujours le meme problème avec ce foutu retour à la ligne
🤯
Du coup le pb c'est quand le message contient un retour à la ligne ?
alors oui et non
en fait quand le retour à la ligne commence par une mention
ca ping
je sais pourquoi
en fait quand y'a un retour à la ligne ça met \n
yes le \n = retour a la ligne
oui
donc si je fais
salut
@cyan iron
et bah ça fait
['salut\n@cyan iron']
et j'aimerais que ça fasse
['salut', '\n', '@cyan iron']
ok :)
split('\n') ?
My bad, le split récupère juste l'args en question
t'as juste à insérer '\n' après
