#javascript-typescript

1 messages · Page 51 of 1

keen narwhal
#

Un bail de ce genre ?

#

Mais aussi, le message se delete même si mes mp’s ne sont pas bloqué ;-;

#

;-;

timid loom
#

@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

keen narwhal
#

Kk et si ses mps sont débloqué, je fais { mon code } else { le code qui dit que ses mp's sont bloqué }

timid loom
#

en gros ouais

#

tu peux utiliser un try catch par exemple pour ça

#

ça fonctionne également

keen narwhal
#

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

hazy mirage
#

@timid loom pourquoi sur la v12 devoir rajouter .cache a tout bout de champs?

timid loom
#

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

keen narwhal
#

Mmmh d'accord j'essaie

timid loom
#

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

keen narwhal
#

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...

timid loom
#

à 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

keen narwhal
#

Bah du coup le > je devrais le remplacer par quoi ?

timid loom
#

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

keen narwhal
#

Yep ça à marcher, mais la ça me dit que length est undefined ;-;

#

depuis quand length n'est pas définis ;-;

timid loom
#

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

keen narwhal
#

K je fais ça, je reviens après :3

hazy mirage
#

@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 ?

timid loom
#

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

hazy mirage
#

ouais refaire les bots tout court car là kappa

keen narwhal
#

Ok, Taink. J'ai résolu un problème sauf que enfaite, lorsque je fais >>wiki Naruto Uzumaki ça me donne ...

#

Genre why ????

timid loom
#

bah en gros ouais haha @hazy mirage

hazy mirage
#

Mais du coup la v11 sera plus supporté comme win 7 vs win 10 mais continuera de fonctionner selon toi ?

timid loom
#

@keen narwhal ta requête doit être mal formée

keen narwhal
#

Yep i think so

timid loom
#

@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

hazy mirage
#

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 ^^

crimson fern
#

la v11.5.1 sera deprecated

oak turret
#

J'avais pas see, merci @timid loom (Je te tag pour te remercie ahah ^^) !

crimson fern
timid loom
#

c'est peut-être meilleur mais ça reste bien plus verbeux

crimson fern
#

Je vois pas énormément de changement a part l'utilisation du cache

#

si ils ont fait ca, y'as surement une raison 🤔

timid loom
#

la raison c'est aider à la gestion du cache justement

keen narwhal
#

Est-ce qu'on peut encore fetch des channels dans discord.js ?

#

Parce que là

#

J'ai essayé plusieurs trucs et rien ne marche

crimson fern
#

<Client>.channels.cache.get(id)

keen narwhal
#

Ça me dit cache is not defined

#

...

crimson fern
#

t'es en v12 ?

keen narwhal
#

Surement comment je vois ça ?

#

Oui, je suis en v12.2

crimson fern
#

dans ton package.json

#

Ok

#

T'as mis quoi dans ton code ?

keen narwhal
#

Je te prends un screen ou je te passe le code ?

crimson fern
#

Vasy screen

keen narwhal
crimson fern
#

Dans l'event guildMemberAdd

#

y'as pas 3 parametres

#

y'en a qu'un

keen narwhal
#

comment je fais pour en mettre trois ?

crimson fern
#

T'en met pas 3

keen narwhal
#

Bah il me faut client, message et member xD

crimson fern
#

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

keen narwhal
#

J'essaie

#

Ah bah

crimson fern
#

pareil pour le remove

keen narwhal
#

Ça marche

#

xD

#

Merci :3

crimson fern
#

Np

keen narwhal
#

Encore un débutant ;-; et encore pour longtempppppss

crimson fern
#

Regarde la doc

#

t'aurais pu trouver

keen narwhal
#

Yep, sûrement mais je ne savais pas quoi chercher

crimson fern
#

Regarde tes events

#

La premiere chose

#

des que tu les connaitras par coeur ca sera plus simple

keen narwhal
#

Kk

#

Pavé in coming

timid loom
#

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

keen narwhal
#

xDD

#

J'avais essayé de fetch mais ça me mettais que c'était indéfinis

#

...

crimson fern
#

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 kappa

keen narwhal
#

Surement

keen narwhal
#

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

#

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

keen narwhal
#

non...

timid loom
#

@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

keen narwhal
#

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

timid loom
#

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

keen narwhal
#

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

timid loom
keen narwhal
#

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

#

Ou
File[0]

#

Ou

#

File.first()

#

Kk

timid loom
#

oula tu complique pas mal la chose fireless
@keen narwhal déjà est-ce que tu sais ce que c'est JSON ?

keen narwhal
#

Je donne juste des exemples x)

#

Sait-tu c'est quoi un Object, un array ?

#

Bah c’est une extension du js non ?

#

Non

timid loom
#

JSON ? nan

#

c'est juste un format de fichier texte
comme HTML

keen narwhal
#

Ça sert un peu de stockage

#

Ah k

#

Si tu veux le nom entier c'est JavaScript Object Notation

#

Je connais tellement rien xD

timid loom
#

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

keen narwhal
#

Ahhh !

timid loom
#

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

keen narwhal
#

Kk. Je suis vraiment fatigué xD et je regarde un truc en même temps, donc je regarderais ça demain

timid loom
#

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

keen narwhal
#

Kk :3

#

Merci, vraiment de prendre votre temps pour un débutant comme moi :3

timid loom
#

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
oak turret
#

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

timid loom
#

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.

keen narwhal
#

Bonne nuit à tous et encore merci Taink et Fireless :3

timid loom
#

yes bonne nuit

keen narwhal
#

Perso, je use json sur des petits bots et MySQL sur les plus gros

#

Good night alex

slim anvil
#

@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

slim anvil
#

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

oak turret
#

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

crimson fern
#

🤔 Ton problème était vraiment bizarre

#

J'ai jamais eu de problème avec Enmap moi

slim anvil
#

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

cyan iron
#

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

hazy mirage
#

Hey 👋

#

Console.log hook stp et renvoie le resultat

#

Et tu es sur la v12 ou la v11

cyan iron
#

v11

#

Je fais ça

keen narwhal
#

@keen narwhal Ouais, mais c’est un p’tit bot perso donc je pense que le JSON peut faire l’affaire

cyan iron
#

@hazy mirage Ca me donne une liste de tout

#

Tout les webhooks du channel

hazy mirage
#

euh

#

tu as log quoi

cyan iron
#

hook

hazy mirage
#

euhhhh

cyan iron
#

Pourtant ça devrait pas faire ça mdr

hazy mirage
#

aaaaah

cyan iron
#

ah mais si

hazy mirage
#

mais si$

cyan iron
#

ça log un par un

hazy mirage
#

ta log dans la boucle x)

cyan iron
#

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

hazy mirage
#

nan nan c bon

#

log directement webhooks stp

cyan iron
#

ok

#

là ppur le coup ça log tous les webhooks du channel

#

ce qui est logique

hazy mirage
#

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

cyan iron
#

déjà essayé avec le foreach

#

ça me met que c'est pas une fonction

hazy mirage
#

aaaaah attend

#
async function deletewh(channel) {
        const webhooks = await channel.fetchWebhooks()

        for (let [id, hook] of webhooks) {
            await hook.delete()
        }
}```
cyan iron
#

ok je tente

#

ça peut marcher

#

je crois que c'est ça

#

YES

#

ENFIN

#

Merci Pilot

#

<3

hazy mirage
#

derien ^^

keen narwhal
#

Taink, du coup pour l'url que j'utilise je dois utiliser toute les options ?

timid loom
#

pas nécessairement

keen narwhal
#

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 ;-;

timid loom
#

il me semble que tu récupère les résultats dans une variable appelée list, nan ?

keen narwhal
#

Bah j’ai essayé console.log(list) mais ça me dit que c’est indéfinis

timid loom
#

hmm étrange

keen narwhal
#

Tu veux que je te montre le code ?

timid loom
#

yes

keen narwhal
#

Screen ou en bloc ?

timid loom
#

va pour un screen

keen narwhal
timid loom
#

oula ok t'as grandement changé le corps de ta fonction

#

bon là tu as ans qui contient la réponse de l'api

keen narwhal
#

Ah ok

timid loom
#

ce que tu dois faire c'est récupérer l'interprétation en json de cette réponse

keen narwhal
#

Du coup un JSON.parse() ?

timid loom
#

ah et en soi utiliser node-fetch c'était pas une mauvaise idée

#

ouais en gros

keen narwhal
#

Du coup après mon console.log je met .JSON.parse() ?

timid loom
#

nan

#

tu peux par exemple faire console.log(JSON.parse(ans));

keen narwhal
#

Ok okay

#

undefined:1
[object Object]
^

SyntaxError: Unexpected token o in JSON at position 1

timid loom
#

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

keen narwhal
#

Je vais repartir sur node-fetch alors xD

hazy mirage
#

non mais visiblement tu avais déjà un object, alors pas besoin de le parse info_player_think

keen narwhal
#

;-;

timid loom
#

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

keen narwhal
#

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..

timid loom
#

t'as juste à faire fetch

#

c'est pour ça que c'est pratique

keen narwhal
#

Et ensuite envoyé le message?

timid loom
#

? comment ça

keen narwhal
#

Besoin de le log pour faire items[0]

#

Bah genre, faire le embed de la commande

timid loom
#

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

keen narwhal
#

Kk

cyan iron
#

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)
keen narwhal
#

Mais du coup, je fais Var x = items[0] ?

timid loom
#

@cyan iron c'est impossible d'éditer un message envoyé par un webhook

cyan iron
#

Ok merci

#

:)

keen narwhal
#

Ou, je peux faire genre .setTitle(items[0].title)

#

?

timid loom
#

ouais ça ça fonctionne bien

keen narwhal
#

Kk

#

Bah je vais faire ça merci :3

timid loom
#

de manière générale utilise plutôt let que var

keen narwhal
#

Ouais, c’est ce que je fais j’utilise const seulement au début pour require certain truc

#

Rien de plus

cyan iron
#

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

timid loom
#

msg.attachments c'est une collection

#

tu dois envoyer chaque MessageAttachment un par un

cyan iron
#

càd ?

#

Si je veux envoyer que l'attachments du message je fais comment ?

timid loom
#

si tu vois pas ce que c'est une collection il faut que tu lise la doc, je peux pas t'aider davantage

cyan iron
#

( je suis un noob en collection j'ai appris la notion y'a 3 jours lol )

timid loom
cyan iron
#

ok merci

timid loom
#

y a toutes les infos ici

keen narwhal
#

Taink ça parait qu'il débute pas dans la matière xD

cyan iron
#

Les collections oui

#

Bah c'est à dire que je dev que depuis janvier donc bon

#

Je suis pas ultra bon non plus

keen narwhal
#

Collection = map

#
.addField(            
{ name: 'Description', value: items[0].snippet, inline: true }
)
cyan iron
#

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

timid loom
#

@keen narwhal pourquoi tu mets des accolades ?

keen narwhal
#

C'est comme ça que j'ai appris à le faire xD

#

C'est pas un addfields

timid loom
#

enlève tes accolades et c'est bon

keen narwhal
#

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

timid loom
#
.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

keen narwhal
#

Merci Taink et Fireless mais du coup xD, j'ai du codes HTML qui gâche un peu le tous

#

xDD

timid loom
#

yes ça c'est normal

#

je t'ai dit que snippet c'était un extrait de la page en format html

keen narwhal
#

Yep

timid loom
#

rien de surprenant à ce que tu obtienne un extrait en html du coup

keen narwhal
#

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

timid loom
#

tu peux utiliser ça ```js
items[0].snippet.replace(/</?[^>]+(>|$)/g, "");

keen narwhal
#

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

timid loom
#

probablement pas non

#

c'est ce que te donne l'api

keen narwhal
#

MMh d'accord

timid loom
#

tu peux mettre des points de suspension après si tu veux mais c'est tout

keen narwhal
#

J’essaie ça

#

C’est bon merci :3

#

Vous êtes grave gentil :3

cyan iron
#

@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)
    }
timid loom
#

à la limite tu peux vérifier dans ton if si la longueur de messageattachments est supérieure ou égale à 1

keen narwhal
#

messageattachments[0].url return quoi ?

cyan iron
#

rien

#

ça fait crash mon bot

keen narwhal
#

Super mais ça crash pourquoi ?

cyan iron
#

alors

#
    console.log(messageattachments[0].url)
                                      ^

TypeError: Cannot read property 'url' of undefined
#

Pour ça @keen narwhal

#

:/

keen narwhal
#

console log juste messageattachments[0]

cyan iron
#

OK

#

OUF

#

Ca me rend ça x)

keen narwhal
#

Logique

cyan iron
#

ah je sais

#

si je fais .message.url

keen narwhal
#

msg.attachments.url

#

Je vois pas pourquoi tu le transforme en array ?

cyan iron
#

je tente

#

ca fonctionne pas

#

ça me met undefined

keen narwhal
#
msg.attachments.forEach(attachements => {
  console.log(attachements)
});```
#

Essaie

cyan iron
#

ok

#

ça log ça

#

bah comme la dernière fois en fait

#

La meme

keen narwhal
#
console.log(attachements.url)
cyan iron
#

ça marche

#

yes merci :)

keen narwhal
#

dans le foreach

cyan iron
#

oui

cyan iron
#

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)

cyan iron
#

Personne ne sait ?

cyan iron
#

:'(

keen narwhal
#

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 ?

red snow
#

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
#

@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 ?

red snow
#

Le pfff il est beau

keen narwhal
#

Ah 2 QI

#

Mdr

#

Il ne m'a jamais parlé de toi lolwhatthink

#

;-;

#

Mais pourtant America/New_York existe ;-;

red snow
#

Oui mais t'habite pas à New York ;-;

keen narwhal
#

Je suis sur le même fuseau horaire

#

Il y en a pas au QC

#

;-;

red snow
#

Aaaa

#

OK

hazy mirage
#

;-;

keen narwhal
#

;-;

red snow
#

;-;

keen narwhal
#

;-;

#

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

#

;-;

#

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

cyan iron
keen narwhal
#

Nop

cyan iron
#

😢

keen narwhal
cyan iron
#

Je comprends pasn

keen narwhal
#

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

cyan iron
mint oasis
#

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

crimson fern
#

Tu regardes les roles de tous les membres et tu find si il a le role

timid loom
#

@mint oasis tout est dans la doc

mint oasis
#

okok merchiii

keen narwhal
#

@keen narwhal Hier tu n'as pas joué au Piano je suis dessus

woeful grove
#

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 °^°

slim anvil
#

webp c'est le format de google chrome

#

il met chaque image en webp pour l'opti

keen narwhal
#

Mais il n'y a pas de moyen de l'afficher en gif ?

west plover
#

si

slim anvil
#

Tu dois pouvoir si

west plover
#

qu'est-ce que vous utilisez aussi?

keen narwhal
#

Demande ça à Vasco je posais seulement la question moi xD

slim anvil
#

tu dois use le "displayAvatarUrl"

woeful grove
#

Oui, c'est comme ça que j'ai fait

slim anvil
#

du coup il te récupère le webp je pense

#

faudrait que tu récupères une autre url i think

west plover
#

y a des params dans la fonction

#

le format également

slim anvil
#

ayes bienvu

west plover
#

donc format en png et dynamic en true

woeful grove
#

Ow !

#

J'essaye °^°

keen narwhal
#

Ça marche pas mais ça fait mal à son égo donc il vous le dit pas

slim anvil
#

Si tu es pas là pour aider les commentaires HS c'est #general

woeful grove
#

Mais il a un peu raison ^^'

slim anvil
#

montre comment tu as passés tes params

woeful grove
#

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"
}```
slim anvil
#

Ok

keen narwhal
#

Un objet c'est genre ["png",
true,
1024] ?

slim anvil
#

Non ça c'est un tableau du coup

keen narwhal
#

Je mélange plein de truc

woeful grove
#

Ow

slim anvil
#

Ouais, ce serait bien de connaitre les différents types quand même

keen narwhal
#

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

slim anvil
#

Good vasco ?

keen narwhal
#

Non, ça ne marche toujours pas :/

woeful grove
#

Si si

keen narwhal
#

Ah si

#

Le dernier à marcher

#

GG

woeful grove
#

J'avais juste pas enregistré enfaite ^^'

keen narwhal
#

ah xD

woeful grove
#

Et j'avais codé la version "avatar" et pas "pp"

slim anvil
#

Top

woeful grove
#

Merci ! :0

keen narwhal
#

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;
    }
}

}

red snow
#

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

keen narwhal
#

kk

#

Je vais regarder ça après mon cours merci

keen narwhal
#

@red snow Tu aurais pas un lien parce que je voulais prendre lui dans Debuter en web sauf que ça marche pas erreur 504

cyan iron
#

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

keen narwhal
#

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
#

xDD

#

Mon subconscient à pris le dessus

#

Merci Enzo, j'avais pas vue xDDD

timid loom
keen narwhal
#

Merci Taink :3

cyan iron
#

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

keen narwhal
#

bah en gros, si je veux que ça s'envoit dans un channel précis, je fais client.channel.cache.get('id du channel')

cyan iron
#

ok je tente

keen narwhal
#

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 !`);
}

})

oak turret
#

client.channels.cache.get('id du channel').send("ton message") @cyan iron

cyan iron
#

nan mais c'est bon ça marche :/

#

Je comprends pas pk ça a crash mdr

oak turret
#

np

keen narwhal
#

:3

keen narwhal
#

Personne ne sait ?

keen narwhal
#

@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 ;-;

timid loom
#

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)

keen narwhal
#

D'accord, je ferais attention. Mais du coup genre, ça pourrait empêcher le code de se lancer ?

timid loom
#

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

keen narwhal
#

Ça ne change rien effectivement. Parce que genre le console log qui est juste après ne s’exécute pas ...

timid loom
#

attends

#

tu fais un client.login à un moment?

keen narwhal
#

En dessous, du code il y a un client.login..

timid loom
#

ok tu me rassure

keen narwhal
#

xD

red snow
#

Et si t'enlève les arguments de trop ?

timid loom
#

alors je te confirme qu'il y a PLEIN d'erreurs

keen narwhal
#

Ma console doit encore deconner ;-;

red snow
#

Parce que la ça devrait générer des erreurs oe

timid loom
#

et le console.log s'exécute bien quand j'ajoute une réaction

keen narwhal
#

Elle log rien, att relance VSC

timid loom
#

je vois pas d'où viens ton soucis

red snow
#

T'as bien sélectionné la bonne console ? kappa

#

Parce que t'as le debug et le terminal où un truc comme ça

keen narwhal
#

Je test voir si c’est à cause de mon vsc

timid loom
#

nan mais

keen narwhal
#

;-;

timid loom
#

j'espère que tu t'attends pas à ce que ça s'exécute tant que t'as pas fait ta réaction

keen narwhal
#

Non tk

#

xD

#

J’suis con, mais pas à ce point xD

red snow
#

A parce que la tu te serais fais tape

timid loom
#

nan mais je les connais les ptits malins là

keen narwhal
#

Genre, il y a plein de truc stupide comme ça que je ne penserais pas mais ça j’y pense xD

red snow
#

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)

keen narwhal
#

Bah j’ai l’impression que la console marche la...

#

;-;

#

Sauf que genre ça me dit ID is not defined

#

;-;

timid loom
#

normal

keen narwhal
#

Sauf que normalement j’ai pas besoin de définir id dans user.id

timid loom
#

t'as une quantité de variables non définies là dedans

#

c'est au delà du réel

red snow
#

Déjà lors de l'évent tu dois avoir seulement réaction et message ou user je sais plus

keen narwhal
#

User

#

Bah je dois avoir messageReaction aussi parce que sinon il y a plein de truc qui ne marche plus

timid loom
#

t'as besoin que de deux trucs

#

reaction, et user

#

autrement tu les sors de nulle part

red snow
#

Tu dois les redéfinir ensuite

timid loom
#

et crois moi, tu peux obtenir tout ce que tu veux avec reaction et user

keen narwhal
#

Kk :3

umbral marsh
#

Voici mon code pour un clear sauf que ca me donne cela quand j'exécute la commande

#

pouvez vous m'aider

keen narwhal
#

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

umbral marsh
#

je ne comprends pas ce que tu as ecris, tu peux reformuler stp

keen narwhal
#

Oh, shit il est pire que moi XD

red snow
#

Il y'a une condition qui se nomme isNaN, donc avant de clear, tu dois mettre if(isNaN(x)) return;

keen narwhal
#

Ca marche aussi

umbral marsh
#

je la mets ou ?

red snow
#

avant le let x

#

tu mets if(isNaN(parseInt(msg[0]))

umbral marsh
keen narwhal
#

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 ?

red snow
#

bah tu dois metter quelque chose dans ta condition ^^ C'est une condition comme une autre

umbral marsh
#

oue je vois

#

a let ca me mets avec une vague rouge

red snow
#

On ne fait pas d'opération avec un String

#

c'est normal t'as rien mis dans ta condition

umbral marsh
#

?

#

je comprends pas tout

red snow
#

oskour

#

if() {}

umbral marsh
#

😅

red snow
#

c'est la syntaxe

#

ou if() ...;

keen narwhal
#

Burger tu penses qu’il est pire que moi ?

umbral marsh
#

je suis débutant...

keen narwhal
#

Je suis un débutant aussi XD

umbral marsh
#

bah tu es plus avancé que moi à ce que je vois

keen narwhal
#

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

red snow
#

guild n'est pas définit

keen narwhal
#

Bah je mets quoi alors pour le définir ? Genre...

#

Const guild = Discord.Guild non ?

red snow
#

oof

keen narwhal
#

Ça marche pas ;-;

red snow
#

Tu mets const guild = client.guilds.cache.get('id')

keen narwhal
#

Ah ouais pas con, je ferais ça quand je passerais pc xD merci :3

slim anvil
#

Il y'a une condition qui se nomme isNaN

#

le js en sueur kappa

red snow
#

bah c'est vrai

#

moi j'utilise ça

slim anvil
#

condition

#

?

red snow
#

fonction

slim anvil
#

c'est bon le js plus en sueur harold

red snow
#

mdrr

keen narwhal
#

@umbral marsh Ça marche ?

#

@red snow même quand tu l'as définis ça met que c'est indéfinis

red snow
#

j'ai pas la ligne kappa

keen narwhal
red snow
#

C'est quoi que t'as mis dans ton event ?

keen narwhal
red snow
#

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

keen narwhal
#

;-;

red snow
#

Pour initialiser message tu dois juste faire const message = reaction.message

#

et tout marchera

keen narwhal
#

J'te dis ça

#

Name is undefined ;-; Du coup, je dois le définir mais avec quoi ? Aucune idée ;-;

red snow
#

Quand undefined c'est pas forcément que tu dois le définir

#

c'est peut être un paramètre inexistant aussi

#

Pas messageReaction

keen narwhal
red snow
#

pourquoi mettre .message ^^

keen narwhal
#

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

red snow
#

reaction.message.partial

keen narwhal
#

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 ;-;

oak turret
#

L'expérience Alex

red snow
#

mdrr

oak turret
#

car à force d'avoir l'erreur

red snow
#

Ui c'est l'expérience

oak turret
#

forcément tu la mémorise

#

^^

red snow
#

Justement ça veut dire que j'étais con aussi si je connais ce genre d'erreur kappa

keen narwhal
#

xDD

#

On est tous con sur les côtes mais moi ça déborde sur les côtés

oak turret
#

On apprend en faisant des erreurs ^^

red snow
#

Comme a l'école

keen narwhal
red snow
#

é_é

#

il sert a quoi le await reaction.message.partial() ?

keen narwhal
#

Je crois rien xDD

red snow
#

Enlève le alors 🤷‍♂️

keen narwhal
#

Fait

oak turret
#

il est async ton event ?

keen narwhal
#

Bref je dois re

#

Oui

keen narwhal
#

Ça marche @red snow Merci

red snow
#

👌 pas de soucis

keen narwhal
#

C'est quoi la fonction pour log la personne qui se verif genre quand il ajoute la reaction ça envoit un message ?

hazy mirage
#

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é 😉

keen narwhal
#

Ok, donc ça envoit le message sauf que ça met pas le pseudo ;-;

#

Ça met undefined

keen narwhal
#

C'est bon

keen narwhal
#

Salut wavey 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)```

slim anvil
#

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 ?

keen narwhal
#

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

slim anvil
#

log ton guild

#

il doit etre undefined

keen narwhal
#

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

crimson fern
#

t'es en v12 ?

#

si oui :

guild.members.cache.forEach(user => {
  ...
})```sinon :
```js
guild.members.forEach(user => {
  ...
})```
keen narwhal
#

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

red snow
#

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

keen narwhal
#

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

crimson fern
#

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

keen narwhal
#

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

red snow
#

Bah oé Samuel, y'a ptet des trucs a rajouter, mais y'a plein de trucs utiles

slim anvil
#

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

keen narwhal
#

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

burnt junco
#

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);
});```
keen narwhal
#

Dans la structure de ta table, tu as mis quoi comme type pour le row "name"

#

@burnt junco

burnt junco
#

````name` varchar(255) NOT NULL,```

#

c'est sa que tu demande ?

keen narwhal
#

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

burnt junco
#

varchar(255)

keen narwhal
#
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

burnt junco
#

ok

hazy mirage
#

Le probleme ne viens pas de la

keen narwhal
#

Bah sans l'erreur je serait pas l'aider mdr

hazy mirage
#

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

burnt junco
#

ha bah oui

hazy mirage
#

Sorry 😂

keen narwhal
#

Pourquoi avoir mis '${}'

#

Surtout

#

Alors que tu peux mettre ta variable directement

burnt junco
#

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

keen narwhal
#

Mais

#

Omg

burnt junco
#
            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`
        }```
#

?

keen narwhal
#

bah oui

burnt junco
#

Error: ER_BAD_FIELD_ERROR: Unknown column 'message.author.id' in 'where clause'

timid loom
#

@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}`
        }
burnt junco
#

mrc

#

bon bah décidément sa veut vraiment pas marcher

#

TypeError: message.author.tag.replaceAll is not a function

hazy mirage
#

rajoute ça a la fin du fichier String.prototype.replaceAll = function(search, replacement) { var target = this; return target.replace(new RegExp(search, 'g'), replacement); };

timid loom
#

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 🤔

hazy mirage
#

je vois pas de replaceAll sur les wiki js 🤔

#

Enfin trouvé 🥵

keen narwhal
#

C'est plutôt replace

slim anvil
#

Ouais ta fonction elle sert a rien Pilot

#

Tu fais juste un replace avec ta regard dedans direct

#

en /g

#

et ce sera bon

hazy mirage
#

bah j'en sais rien moi

#

c'est taink qui a lancé la dessus

slim anvil
#

Regex* correcteur naze

hazy mirage
#

Je lui cherchais juste son truc

timid loom
#

Bizarre je suis sûr de l'avoir vu quelque part

slim anvil
#

Yes mais je sais pas si elle est déjà passé cette proposition

timid loom
#

la voilà

#

elle est ptêt juste pas dispo

keen narwhal
#

Mais sa sert a quoi un replaceall alors que raplace fais pareil

#

Genre dans le replace il va déjà tous remplacé ...

timid loom
#

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

keen narwhal
#

Bah dans tous les cas tu use un regex

timid loom
#

nan

keen narwhal
#

Bah

#

Dans l'exemple il le fait

timid loom
#

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é ¯_(ツ)_/¯

keen narwhal
#

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

timid loom
#

Ç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

keen narwhal
#

Effectivement, mais la je pense qu’il est complet..

#

:3

cyan iron
#

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 :)

slim anvil
#

précises dequoi tu as besoin déjà

#

que quelqu'un de compétant et dispo puisse en savoir +

cyan iron
#

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)

slim anvil
#

Tu veux les afficher 1 pseudo à chaque ligne c'est ça ?

cyan iron
#

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']
slim anvil
#

Pfiou t'en as écris des choses juste pour ça

cyan iron
#

oui

#

pour ça que j'aimerais refaire

#

ça va faire plus d'une heure que je galère

slim anvil
#

Pas besoin du premier .array() pour avoir la length elle y est déjà dedans

cyan iron
#

et au final c'est du bidouillage

#

en fait j'aimerais faire sans aucun array

slim anvil
#

c'est quoi le splitted message du coup

cyan iron
#

ah oui désolé

#
 let final_message = msg.content
            let splited_message = msg.content.split(" ")
slim anvil
#

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 kappathinking

cyan iron
#

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

slim anvil
#

Ahhh sans la mention ? okéééé

cyan iron
#

oui

#

en fait je fait un système de communication interserveur et on me demande cet ajout pour éviter les double ping

slim anvil
#

Dans ton content les mentions il les sort comment en @Pseudo ou en <@....> ?

cyan iron
#

<@>

#

Sinon ça aurait été trop simple x)

#

J'enlève juste tous les @

#

ça serait si bien

slim anvil
#

bah split ton content en enlevant tout les autres qui contiennent <@...>

cyan iron
#

comment ça ?

slim anvil
#

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

cyan iron
#

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

slim anvil
#

T'as masses de ligne pour rien

cyan iron
#

pour l'instant ça fonctionne

slim anvil
#

yes

cyan iron
#

Mais le problème c'est quand je fait ça

#

et là il a été double ping :/

slim anvil
#

Mais enfaite quand quelqu'un va poster un message avec 3 mentions par ex

cyan iron
#

d'ailleur il a ragé x)

slim anvil
#

tu vas delete et renvoyer avec le bot sans les mentions ?

cyan iron
#

non

#

en fait là c'est de l'inter serveur

#

je suis sur un serveur ça l'envoie sur un autre

slim anvil
#

Ah yes okay

cyan iron
#

ç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 :/

slim anvil
#

Mais t'as vu que sur la doc tu as un truc exprès je crois justement

cyan iron
#

mais non

#

Omg

#

j'ai pas compris :(

slim anvil
#

le USER_PATTERN te permet d'identifier si il s'agit d'un mention ou non si je dis pas de connerie

cyan iron
#

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 :'(

slim anvil
#

Oui car c'est le principe du filter

cyan iron
#

comment je pourrais la remplacer 🤔

slim anvil
#

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()

cyan iron
#

euh

#

j'ai pas compris 😅

slim anvil
#
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

cyan iron
#

ah d'accord

#

en fait je connais pas les map 😅

#

du coup j'ai pas tout capté

#

mais key en gros c'est quoi ?

slim anvil
#

c'est l'index de l'élément

#

0, 1, 2.....

cyan iron
#

ah ok

#

j'ai capté

#

comme avec une boucle i

slim anvil
#

pour venir le remplacer si c'est une mention

#

oui voilà

cyan iron
#

ok :)

#

et du coup si je fais item.user.username ça fonctionne normalement non 🤔

slim anvil
#

idk car si il la converti en string j'ai des doutes, sinon tu get le member

cyan iron
#

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

#

:'(

slim anvil
#

Sinon en vrai tu peux juste use la regex que eux utilisent aussi

#

item.match(/^<@!?(\d+)>$/)

cyan iron
#

oula

#

et ça ca fait quoi ?

slim anvil
#

comme le

if (Discord.MessageMentions.USER_PATTERN.test(item))
cyan iron
#

aaah

slim anvil
#

tu fais juste

if (item.match(/^<@!?(\d+)>$/))
cyan iron
#

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
                }

            })
slim anvil
#

on a réduit de bcp koumeme

cyan iron
#

oui mdr

#

de énormément

#

Mais j'ai toujours le meme problème avec ce foutu retour à la ligne

#

🤯

slim anvil
#

Du coup le pb c'est quand le message contient un retour à la ligne ?

cyan iron
#

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

slim anvil
#

yes le \n = retour a la ligne

cyan iron
#

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']
slim anvil
#

Ah yesssss

#

je finis un truc et je suis là

cyan iron
#

ok :)

cyan iron
#

En fait j'aimerais juste isoler ce \n

#

J'ai cherché j'y arrive pas :'(

keen narwhal
#

split('\n') ?

cyan iron
#

Oui mais ça suppr le \n 🤔

#

Ah mais oui en fait c'est si simple x)

keen narwhal
#

My bad, le split récupère juste l'args en question

timid loom
#

t'as juste à insérer '\n' après

cyan iron
#

non le split va me donner salut @393378313663676427>

#

enfin voilà quoi

timid loom
#

Ouais ça va te retourner ça :

['salut', '@cyan iron']

Mais t'as juste à insérer un '\n' entre deux éléments

#

ça reste un tableau, rien ne t'empêche de le manipuler

#

cela dit je vois pas pourquoi tu veux isoler le \n