#javascript-typescript

1 messages · Page 52 of 1

cyan iron
#

oui

timid loom
#

qu'est-ce que tu veux faire avec ton tableau après?

cyan iron
#

Tout fonctionne yes !

#

qu'est-ce que tu veux faire avec ton tableau après?
@timid loom En fait c'est pour éviter les mentions

timid loom
#

Ouais

#

mais pourquoi tu veux les \n

cyan iron
#

En fait j'ai fait ça

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

            for (let pas = 0; pas < splited_message.length; pas++) {
                if (splited_message[pas].includes("\n")) {
                    let withoutn = splited_message[pas].split("\n")
                    splited_message[pas] = withoutn[0] + " \n " + withoutn[1]
                }
            }
            splited_message = splited_message.join(" ").split(" ")

            splited_message.map((item, key) => {
                if (item.match(/^<@!?(\d+)>$/)) {
                    let user_name = client.users.get(item.match(/^<@!?(\d+)>$/)[1]).username
                    splited_message[key] = user_name
                }

            })

            final_message = splited_message.join(" ")
#

mais pourquoi tu veux les \n
@timid loom Parceque quand on retourne à la ligne, on a le \n

#

Sur discord

#

donc si je fais

salut
@cyan iron

et bah ça fait

['salut\n@cyan iron']

@cyan iron

#

C'est ce que je disais plus haut

#

Pour analyser la mention j'ai besoin que le \n ne soit pas collé au reste

#

Mais de toute façon ça fonctionne là je suis trop content :)

timid loom
#

Je sais, mais tu peux faire ça par exemple

let strArray = myString.split('\n');
// tu fais tes manips
let resStr = strArray.join('\n');
#

t'as juste à utiliser .join

#

je vois pas pourquoi tu veux absolument récup le \n

slim anvil
#

Oui mais là du coup ca va lui ajouter un /n devant chaque mot

#

En gros il veut recréer le meme message que celui envoyé

timid loom
#

nan

slim anvil
#

mais sans les mentions

cyan iron
#

oui voilà enzo a raison

timid loom
#

le join met des \n qu'entre les éléments de l'array

cyan iron
#

oui mais je veux pas faire ça

slim anvil
#

Bah yes

timid loom
#

ok alors j'ai mal compris

slim anvil
#

c'est bien ce que je dis

#

En gros il va split toute sa phrase mot par mot

#

et vérifier chaque mot si c'est une mention ou pas avec la regex

#

si s'en est une, il remplace le mention juste par le pseudo de la personne pour éviter de double mention

cyan iron
#

et vérifier chaque mot si c'est une mention ou pas avec la regex
@slim anvil d'abord je vérifie si y'a un retour à la ligne et je remplace

slim anvil
#

Oui

timid loom
#

j'ai l'impression qu'il s'est compliqué la vie alors

#

une regex peut faire ça toute seule

slim anvil
#

Yes c'est ce qu'il a fait dans sa boucle du coup

#

Ah ouais un replace

timid loom
#

ouais

slim anvil
#

mais comment il récupère le user

#

du coup

timid loom
#

tu peux utiliser une fonction

slim anvil
#

c'est ce que je me posais comme question

#

Ouais pas faux, et quand ça find tu passes dans la fonction

#

ouais pas con mék

#

On va passer des 52 lignes

#

à 6

timid loom
#

yup

#

pour ça je comprenais pas :(

slim anvil
#

déjà on etait passer de 52 à 20

#

alors la soif

cyan iron
#

oui mdr

slim anvil
#

Du coup ouais @cyan iron

#

tu peux faire un truc comme ça

cyan iron
#

j'ai un peu la flemme de refaire :lul:

#

mais si c'est pas long

#

why not :)

slim anvil
#

là ici tu as un exemple

#

pas compliqué

timid loom
#

je vais te passer un code si tu veux, ça va me changer les idées

cyan iron
#

je veux bien

#

j'en ai ma claque j'y suis depuis 14h sur ce truc x)

timid loom
#

je fais du vb depuis 4 heures j'ai besoin d'une pause avec un langage bien

slim anvil
cyan iron
#

x)

slim anvil
#

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

cyan iron
#

ui

#

"tinque"

#

x)

slim anvil
cyan iron
#

Si on me demande le code je le vend 500€ et je te file 300 x)

#

4h pour faire cette m***

#

x)

slim anvil
#

Par contre @timid loom la regex sera plus bonne dans le cas où ça analyse toute là string et pas juste un mot

#

au cas où

timid loom
#
msg.content.replace(/<@(\d+)>/g, (match, p1) => {
    return client.users.get(p1).username;
});```
Essaye avec ça ?
slim anvil
#

Faudrait la changer un peu

timid loom
#

avec le tag g ça devrait fonctionner 🤔

slim anvil
#

je suis pas sûr enfaite faut qu’il test ça se trouve c’est ok mais je suis pas sûr

timid loom
#

ah wait

#

mon truc return un user

#

attends

#

là c'est bon

#

il faut stocker le resultat mais normalement ça fonctionne

cyan iron
#

Non mais t'embête pas ça marche bien comme ça ;)

timid loom
#

ok, je suis sûr que ça fonctionne je viens de tester

client.on('message', (msg) => {
    let resStr = msg.content.replace(/<@!(\d+)>/g, (_, id) => {
        return client.users.get(id).username;
    });

    console.log(resStr);
});```
#

tu fais de resStr ce que tu veux

#

mais ça fonctionne

#

@cyan iron en vrai prends ce code parce que au moins il prend moins de ligne et il est facile à lire

cyan iron
#

ok

cyan iron
#

@timid loom ça marche nickel merci beaucoup <3

#

Et si je veux mettre un @ devant x)

#

j'ai trouvé lul

cyan iron
#

c'est le seul bug sinon x)

#
            let final_message = msg.content.replace(/<@!(\d+)>/g, (_, id) => {
                return client.users.get(id).username;
            });
#

Le code :)

#

Y'a moyen de le patch ou pas du tout ?

timid loom
#

hmm je vois pas trop la raison
c'est quoi le message que t'obtiens quand tu fais ta manip ? je veux dire le contenu pour discord

cyan iron
#

le même

#

Comme si ça avait pas eu d'effet 🤔

#

Je reviens dans 5-10 min

timid loom
#

le console log ça rend quoi en fait? c'est ça ma question

cyan iron
#

ça c'est le message de la vidéo

#
**@deep torrent** **@vagrant sorrel** **@cyan iron**
**@deep torrent** **@vagrant sorrel** **WailroneFirelion**
#

La première ligne c'est le msg.content

#

et la seconde ligne c'est le final_message

#

Je ne suis pas sur le serveur de la vidéo

#

Donc c'est normal qu'il soit écrit WailroneFirelion

timid loom
#
            let final_message = msg.content.replace(/<@!?(\d+)>/g, (_, id) => {
                return client.users.get(id).username;
            });

Est-ce que ça ça fonctionne?

cyan iron
#

ce serait formidable :)

#

Oooh oui merci Taink

timid loom
#

😎

oak turret
hazy mirage
#

Si tu scroll vers le haut tu monte pas tu descend harold

oak turret
#

tro for

weak grove
#

salut ! vous pensez comment faire pour genre sa envois un message.channel.send aléatoire genre j'ai deux message.channel.send et j'aimerais faire un random sur les deux

timid loom
#

T'as pleins de possibilités

#

Le plus simple reste de faire un Array qui contient toutes les phrases que tu veux utiliser

weak grove
#

et ducoup sa feras un random sur les messages l'array?

timid loom
#

Ça c'est toi qui doit le faire

#

Mais c'est pas compliqué

keen narwhal
#

Sinon, il peut faire un math random ?

#

Non ?

weak grove
#

okay sinon ya un truc sur le wiki qui explique?

timid loom
keen narwhal
#

Ah bah xD

timid loom
#

et tu la ceil ou tu la floor, comme tu veux

#

donc par exemple

let mes_phrases = ['Salut', 'Wow', 'Dingo', 'Haha j\'adore écrire omg'];
let ma_phrase_random = mes_phrases[Math.floor(Math.random() * Math.floor(mes_phrases.length)];
message.channel.send(ma_phrase_random);
#

wait

keen narwhal
#

sinon tu peux faire aussi mes_phrase * mes_phrases.length non ?

#

Ah bah xD

timid loom
#

voilà

#

le max j'ai juste recopié du wiki vu que je suis sur autre chose là

keen narwhal
#

Trop fort UwU ( pas vrai j’ai tous appris a cause de vous xD )

timid loom
#

mais bon voilà quoi

keen narwhal
#

A vrais dire un math.floor ne sert pas trop ici

#

Yep

#

Car ton chiffre est forcément un entier

#

J'allais le dire

#

A moi que Math.random() * Math.floor(mes_phrases.length) retour pas un entier

#

Je vais tcheck

timid loom
#

Math.random() c'est pas un entier

keen narwhal
#

My bad

timid loom
#

c'est un float qui va de 0 à 1

#

tu dois confondre avec le java

keen narwhal
#

Surement

weak grove
#

ah nice

#

j'ai juste une erreur

#

let ma_phrase_random = mes_phrases[Math.floor(Math.random() * Math.floor(mes_phrases.length)];

#

ici

keen narwhal
#

L'erreur ?

weak grove
#

ah

#

missing )

#

mais j'ai trouvé

keen narwhal
#

tout est dis ...

oak turret
#

Sinon je l’ai fais avec des liens d’images

timid loom
#

ouep je l'ai fait rapidement j'ai pas vraiment vérifié la syntaxe

weak grove
#

yep

timid loom
#

c'est facile à repérer dans un éditeur de texte cela dit

oak turret
#

je te donnerais ça si tu y arrives pas

keen narwhal
#

Sinon je l’ai fais avec des liens d’images
@oak turret ?

weak grove
#

c'est à dire @oak turret

oak turret
#

Un random

keen narwhal
#

Ah

oak turret
#

pareil que tu voudrais

#

mais avec des liens à la place de message

weak grove
#

ah oui effectivement

oak turret
#

bref la même chose quoi

weak grove
#

c'est sa que je cherche mais sa après c'est pas complexe a modif

oak turret
#

yep c’est simple

weak grove
#

mhhh

#

sa reste sur la même phrase

oak turret
#

essaye ça

#

const phrases = [« phrase1 », « phrase2 »];

const idx = Math.floor(Math.random() * 3);

const rep = phrases[idx];

const reply = message.channel.send(rep);

#

j’s sur tel donc les «  change les

#

pas sur du * 3 mais test

#

mets 2 si ça fonctionne pas

keen narwhal
#

Un peux useless

#

Surtout que tu fais des const

#

Le mieux aurais été des var

weak grove
#

nop sa marche pas

oak turret
#

j’ai mis des var sur mon truc de base en plus

#

erreur?

weak grove
#

aucune

oak turret
#
  • 2 ?
keen narwhal
#

Mais pourquoi * 3

#

?

#
var phrases = ["Test", "lol", "mdr"];

var idx = Math.floor(Math.random() * phrases.length);

var rep = phrases[idx];

console.log(rep)```
#

Et puis sa revient a faire ça dans tous les cas

var phrases = ["Test", "lol", "mdr"];

var rep = phrases[Math.floor(Math.random() * phrases.length)];

console.log(rep)```
oak turret
#

oui c’est sur

weak grove
#

ah ca fonctionne

oak turret
#

bon bah super

weak grove
#

merci 👍

keen narwhal
#

U're welcome

weak grove
#

dernière petite question, quel est la "function" pour mettre du texte à droite dans un embed ?

keen narwhal
#

Je crois que c'est un thumnail

#

Donc .setThumbnail

#

Si je dis pas de bétise

weak grove
#

thumbnail c'est pour l'image

keen narwhal
#

Après tu peux faire des tests

#

Non, image, c'est .setImage

#

Non @weak grove

#

LA DOC

#

x)

#

Quoi que, je crois avec set, author ça marche non ?

#

@weak grove

weak grove
#

yep je sais la doc mais quel est l'option a utiliser 👀?

keen narwhal
#

Inline

weak grove
#

ahhh

keen narwhal
#

Dans ton field

#

Mais tu peux pas mettre de text a côté des fields

weak grove
#

ah ok

keen narwhal
#

Il y a que la description mais elle n'est pas a droite

#

Fireless pour edit un role on est d'accord je dois faire role.edit({ color : dsgnklfd})?

#

Yep

#

Rolemanager

#

Doc

#

Du coup why ça me met role.edit est indéfinis ;-;

#
#

Quel version ?

#

12

#

Role undefined ?

#

role.edit is not a function bruh

#

Viens vocal

#

J'peux pas vraiment

#

Sorry

#

Mute toi au pire

#

Ton role

#

Toi être get avant

#

Donc tu a une erreur quand tu le get

oak turret
#

Author fire c’est au-dessus du title je crois

keen narwhal
#
const Discord = require('discord.js')

module.exports.run = async(client, message, args) => {
    message.delete();

    var Embed = new Discord.MessageEmbed()
    .setDescription(`:x: | Vous n'avez pas la permission d'exécuter cette commande !`)
    .setColor(`#edeb58`)
    .setTimestamp()
    .setFooter("A!ex Bot RoleColor", message.author.displayAvatarURL({format: "png", dynamic: true}))

    if(!message.guild.member(message.author).hasPermission("MANAGE_ROLES")) {
        return message.channel.send(Embed) 
        
    } else {
        var color = args.join(' ').split('##')[1]
        var roles = args.join(' ').split('##')[0]

        var role = message.guild.roles.cache.some(role => role.name === roles);

        role.edit({
            color: color
        })

        Embed = new Discord.MessageEmbed()
        .setDescription(`✔️| La couleur du rôle à bien été édité !`)
        .setColor(`#edeb58`)
        .setTimestamp()
        .setFooter("A!ex Bot RoleColor", message.author.displayAvatarURL({format: "png", dynamic: true}))

    }
}

module.exports.help = {
    name: "rolecolor"
}
#

Oui

#

Console.log(role)

#

@oak turret Oui

#

Tu as ta réponse

#

Mais olalaaa

#

message.guild.roles.cache.some(role => role.name === roles);
Return soit true ou soit faut s'il fais partis d'une list

#

.some

#

Toi c'est un fetch

#

Que tu veux

#

Je dois faire .get au lieu de .some ?

#

Non fetch

#

Non

#

Find

#

My bad

#
find("name", "Your_role_name")```
#

Je sait plus c'est quoi fetch

#

Bordel je suis perdu

#

xDD

#

Va dormir

#

Try find

#

I do

#

Console.log

#

role

#

et

message.author.displayAvatarURL({format: "png", dynamic: true})```
#

Useless

#
message.author.AvatarURL()```
#

Undefined

#

Umhh

#

liveshare stp

#

Je t'ai invité

#

Pas très intelligent

#

Le wiki le montrait

#

Effectivement

#

Pas vue

#

try

#

Le bot est lent

#

30 sec

#

Ouah

#

xDD

#

Ta full erreur dans ton bot

oak turret
#

faut dodo

keen narwhal
#

bah la oui

#

Car oof

oak turret
#

.displayAvatarURL c’est mieux je crois

keen narwhal
#

Yep

oak turret
#

att je look

keen narwhal
#

Marche mieux

oak turret
#

xD

keen narwhal
#

Mais bon

#

Non il y a pas besoin

#

Il veut essayé sans donc je le laisse essayé sans

#

Tu peux use directement avatarURL()

#

Et dans tous le cas ta une erreur discord dans ton bot

#

fn.bind

#

C'est quoi s'te merde x')))

#

Jamais eu cette error

oak turret
#

yep je fais avatarURL() perso je viens de vérif

#

member.user.avatarURL()

#

sûrement un autre truc qui merde Alex

keen narwhal
#

Fireless

#

Regarde

#

C'tait bien ce que la doc montrait

oak turret
#

Donc sur ton roles t’as une couille

#

au pire

keen narwhal
#

Bah le role existe donc ..

oak turret
#

tu veux pas get l’id du role que le mec mentionne?

keen narwhal
#

Ouais, je pourrais faire ça, mais copier l'id d'un rôle sur tablette..

oak turret
#

xD

#

bah

#

@tonrole

#

« @tonrole »

#

oohh

keen narwhal
#

Non il veux par le nom

#

• Hachibi @keen narwhal

#

Oui

#

C'est le nom du role ?

#

I see

#

Oui

oak turret
#

depuis l’id d’un rôle on peut pas display le name?

keen narwhal
#

Bruh

#

Ta combiens de tole

#

Bcp trop

#

Plus de 150

oak turret
keen narwhal
#

Mais ouah

#

xDD

oak turret
#

d’où les 30 secondes mdr

keen narwhal
#

Non, le bot prenait déjà du temps à ce lancer

oak turret
#

mh

keen narwhal
#

Car il a un pc de merde

#

Fireless je peux essayé un truc ?

oak turret
#

mdrrr

keen narwhal
#

;-;

#

Moi jfais tourné mes bots sur des FX8300

#

MDR

#

Un peu trop pour des bots discord

oak turret
#

en effet mdrr

keen narwhal
#

Fais ta commande @keen narwhal

oak turret
#

bref gl les gars, good night

keen narwhal
#

Il faut attendre le dernier truc, c'est lui qui prend du temps

#

Je veux bien être sympa et t'aider mais si tu modif a chaque fois que je debug ça ne va pas le faire

#

kk

#

Tu as aucun role avec le nom que tu lui donne

#

Pff

#

Si

#

Je l'ai copier dans les rôles du serveur donc..

#

Bah moi il me dis que non

#

La preuve

#

Tous est en false

#

Le premier

#

Aucun le correspond avec un role

#

Non

#

Il doit mettre true s'il correspond avec celui que tu as spécifié

#

Je l'ai dans ma list de rôle

#

Put u're serveau on

#

Je vais en essayé un autre

#

All false

#

Donc

#

C'est le point

#

Mec

#

C'est pas par se que je suis la que voilà

#

Entre le point et le nom du role ta un espace

#

Donc ça crée un nouveau args[]

#

Enlève l'espace

#

Ou c'est le point qui le remet en Unicode

#

Bah du coup, je vais seulement retirer la commande.. comme ça plus de problème

#

C'était seulement pour me facilité la tache

cyan iron
#

Hey ! Je fais ça depuis tout à l'heure, mais ça ne fonctionne pas

if(msg.member.roles.has(muteid)) return msg.channel.send("> :warning: **Cette personne est déjà mute**")

muteid est une variable contenant un id du rôle mute

#

Et je ne comprends pas

crimson fern
#

utilise le cache

cyan iron
#

Je suis en v11

timid loom
#

qu'est-ce qui ne fonctionne pas?

keen narwhal
#

@cyan iron muteid doit être le rôle et non un id

#

Const muteid = msg.guild.roles.get(id)

cyan iron
#

Oui j'ai essayé aussi

#

Mais pareil :/

keen narwhal
#

Mais pourquoi msg.member ?

#

msg.author ?

cyan iron
#

Parce-qu'on peut pas get les rôles d'un user

#

C'est member

keen narwhal
#

Bah si

cyan iron
#

Bah j'ai eu une erreur quand j'ai essayé 😂

keen narwhal
#

My bad nope

cyan iron
#

🙂

keen narwhal
cyan iron
#

J'ai tout tenté

keen narwhal
#

Bonne lecture

cyan iron
#

😆

keen narwhal
cyan iron
#

if(message.member.roles.has(role.id))

#

C'est exactement ce que je fait et pourtant....

keen narwhal
#

Oui et c'est quoi le problème

#

Car tu nous l'a pas dis

cyan iron
#

Bah ça ne réagis pas

#

Ça rentre pas dans la condition

keen narwhal
#

Bah débug

#

Console.log('debug') avant ta condition

cyan iron
#

Fait

#

Je console log le muteid

#

Qui est bien défini

keen narwhal
#

Tu as liveshare ?

cyan iron
#

Non je connais pas

#

C'est quoi

keen narwhal
#

Tu est sous vscode ?

cyan iron
#

Nope

keen narwhal
#

Bruh

cyan iron
#

Phpstorm

keen narwhal
#

Heonnnn

#

Pour du js

cyan iron
#

C'est mieux

#

Oui oui

oak turret
#

vscode > all

cyan iron
#

Js, SQL, php

keen narwhal
#

C'est pour du web phpstorm

#

Pas pour use des modules comme discord.js

#

Tu n'auras pas forcément tout

cyan iron
#

@oak turret j'ai dev longtemps sur vscode
Et c'est mieux

#

Si @keen narwhal

#

Att

keen narwhal
#

Tu la mal exploité

#

Envoie ton code

oak turret
#

Depuis mes débuts j'suis sous vscode et sublime text et c'plus général donc c'est des préférences là ^^

cyan iron
keen narwhal
#

Envoie ton code

cyan iron
#

J'ai pas

#

Je suis sûr tel

#

Et le code je l'ai déjà envoyé 🆙

keen narwhal
#

C'est pas avec ton petit bout que j'irai loin

cyan iron
#

C'est juste un return à l'interieur d'un dbquery

#

Je sais placer mes returns ça vient pas de ça 🙂

#

J'ai vérifié

#

J'ai mis un return sans conditions et il fonctionne

slim anvil
#

Log juste avant ta condition et dans ta condition

keen narwhal
#

@slim anvil je lui ait dit

cyan iron
#

Le muteid je le prends dans la base de donnée

#

Oui mais Enzo je peux pas là je suis sûr mobile :/

slim anvil
#

Si il passe avant et dedans log le msg.member

#

Puis le .roles etc

#

Yes quand tu seras sur pc

cyan iron
#

Ok je tente ça demain

#

Merci :)

slim anvil
#

Du debug quoi

cyan iron
#

Je comprends juste pas

#

Oui voilà mais j'ai déjà tenté plusieurs trucs mais sans effet

slim anvil
#

on pourra pas bcp t’aider on voit pas le avant donc c’est compliqué

#

je vais dormir on peut check demain !! Good night

cyan iron
#

J'ai remplacé membre par user, j'ai bougé la condition j'ai tenté d'autre mméthodes, j'ai get le rôle our le mettre à la place de l'ID et toujours rien

#

Ok bonne nuit

oak turret
#

yo, je fais une configuration d'un de mes bots, fonctionnant avec bdd pour gérer les serveurs (pour l'instant quelques trucs restent en json pour test), et j'aimerais faire patienter les autres "prompt" en attendant la réponse de celui-avant lui, je dois obligatoirement use une lib ou je peux le faire en dur ?

#

sinon je fais avec discordjs prompt, mais je voulais savoir si le faire en dur c'est better ?

slim anvil
#

Sinon tu te fais un tableau ou tu stock les infos pour vérifier si c'est lui ou non et tu check dans ton tableau si c'est ok tu delete l'élément du tableau et au suivant

#

Après meme problème si tu restart il existera plus ce tableau

oak turret
#

ouais c'est sur, autant use une lib alors j'ai moins à me faire chier, merci du conseil ^^

oak turret
#

Hello, vous sauriez pourquoi après le changement de prefix, plus aucune commande ne veut se lancer, aucun message d'erreur donc je ne comprends pas trop :x


    if(command === "setup") {
            prompter
                .message(message.channel, {
                    question: `Choisissez un préfixe ( de base ${config.prefix} )`,
                    userId: message.author.id,
                    max: 1,
                    timeout: 300000,
                })
                .then(reponse => {
                    if(!reponse) { return message.channel.send("Vous n'avez pas répondu, vous devez donc reprendre la procédure à zéro."); }
                    else {
                    const rep = reponse.first();
                    config.prefix = rep;
                    message.channel.send(`${rep} est définit comme préfixe pour le serveur ${guild}`);
                    }
                })
        }

J'avais fais avant une commande setprefix sans le prompter, et ça marchait bien, mais avec le prompter ça bloque après le changement de préfix, et idk d'où ça vient

slim anvil
#

Il vient d’où le config.prefix d’ailleurs

#

D’un json ?

oak turret
#

ui

slim anvil
#

Mais du coup tu l’édit à quel moment

#

Car là tu édites juste la variable qui contient ta config

#

Pas la config elle même

oak turret
#

ah

#

mais j'avais fais ça sans le prompter et ça fonctionnait quoi

slim anvil
#

Donc si tu restart tu perds les modifs

oak turret
#

oui ça je sais

#

mais j'allais le mettre en base après fin tout harmonisé

#

mais là je testais juste

slim anvil
#

Ah yes si tu restart pas ça devrait fonctionner par contre

oak turret
#

yep

#

mais là du coup no

slim anvil
#

Tu as log un peu voir ce que tu récup dans rep?

oak turret
#

bah du coup ça me l'affiche

#

c'est le préfix que l'user mets

#

le send marche

slim anvil
#

Ah yes

oak turret
#

mais après faire les commandes avec le new prefix ça marche po

#

et du coup j'ai aucune info pour savoir si ça fonctionne, ni si il y a une erreur

#

problématique :x

slim anvil
#

Est ce que les commandes suivantes sont placés au même endroit que où tu edit le prefix ?

#

Car si c’est une scope ou fichier différent ce sera pas bon

oak turret
#

no les commandes sont toutes dans le même event

slim anvil
#

Log config après ton send voir si il est bien edit et pareille à l’appel d’une autre commande log le aussi

oak turret
#

j'ai log mon config.prefix

slim anvil
#

Voir si ça l’édit bien déjà

oak turret
#

ah bag voilà

#

yep je look

#

alors eu il m'affiche juste le "devise" c'est un truc qui y est dans mon config

#

mais les autres je les vois po

slim anvil
#

Tu fais pas un édit de config quelque part ?

#

ou tu remplaces son contenu par un autre par hasard

oak turret
#

bah du coup si la réponse est bonne je modif config.prefix par la réponse de l'user

#

config.prefix = rep;

slim anvil
#

Oui mais tu as que ça ? Au démarrage tu fais pas autre chose ou même après ? Dans ta config de base tu as bien un préfix dedans ? Car du coup mets 1 log avant l’appel de ta commande, 1 après l’édit et 1 dans une autre commande que tu appelles après l’édit pour vérifier

#

Mais log que config

#

et vérifie ce que tu as de base, après l’édit, et à l’appel après l’édit

oak turret
#

C'est ce que je viens de faire

#

et avant tout est good

#

et après l'édit mon config part en vrille

#

il me sort on dirait mon rep + une partie de mon config

slim anvil
#

log juste rep pour voir

oak turret
#

okay

slim anvil
#

log un peu tout et regarde ou ça coince

oak turret
#

c'est le rep je crois

#

j'ai pas tout screen

#

mais rep

slim anvil
#

Oui bah du coup si tu fais config.prefix = rep tu mets tout cet objet dans prefix là 🤣

#

Récupère juste le content

oak turret
#

donc rep.content

keen narwhal
#

Oui

slim anvil
#

vérifie que content existe mais normalement oui

oak turret
#

tout de façon si rep n'existe pas rep.content non plus donc

keen narwhal
#

Logique

slim anvil
#

oui mais tu auras une erreur

#

Donc vérifie

#

C’est important de toujours vérifier on sait jamais

oak turret
#

ça marche nickel

#

je comprends mieux

slim anvil
#

même si la proba est faible c’est toujours mieux

keen narwhal
#

Sinon tu va te retrouvé avec de la purée de pommes de terre

slim anvil
#

encore une fois suffit juste dd tout log

oak turret
#

oauip

slim anvil
#

Du debugging

keen narwhal
#

Tu met des CATCH PARTOUTT

oak turret
#

mais j'avais pas capté qu'il me remplaçait mon prefix par mon objet

keen narwhal
#

xD

oak turret
#

xDD

#

merci les gars !

keen narwhal
#

U're welcome

#

Je viens tous juste de venir mais bon xD

slim anvil
#

Bah le try catch il va arrêter l’exécution du reste du code si il y en a donc a use que si la suite ne doit pas arriver sans résultat

oak turret
#

C'est po grave !

#

yep

#

mais maintenant je vérif tout, je suis tes conseils xD

slim anvil
#

Oui mieux de prendre l’habitude car sur discord ça va mais en web c’est important

oak turret
#

yep

#

beaucoup plus important

cyan iron
#

Hey ! Vous savez comment on fait pour faire une action quand le bot rejoins un serveur ?

#
client.on("guildMemberAdd", (member) => {
    if (member.id === client.user.id) member.guild.owner.send("Hey ! J'ai rejoins ton serveur !")
});

J'ai tenté ça mais ça n'a pas fonctionné

slim anvil
#

c'est le bon event, log juste ce que tu recois et ce que tu compares pour voir si tout est ok ^^

#

et la ta condition =
Si l'id du nouvel arrivant est égale à l'id du bot

#

si je dis pas de connerie

cyan iron
#

oui

#

C'est ça

slim anvil
#

Bah donc ta condition est tjrs fausse

cyan iron
#

Ah

slim anvil
#

il rentrera jamais dedans

cyan iron
#

Il a pas le temps ?

#

Ah mais il se teste pas lui même !

slim anvil
#

Je ne pense pas non

cyan iron
#

c'est le bon event, log juste ce que tu recois et ce que tu compares pour voir si tout est ok ^^
@slim anvil J'utilise déjà cet event pour des messages de bienvenue et tout est ok :)

#

J'ai juste pas montré le code

slim anvil
#

Aucun rapport je te dis de log pour voir si justement tu recois bien la data a ce moment là

cyan iron
#

Du coup tu as une solution 🤔

#

Ah

#

Oui !

#

Je vais tenter

slim anvil
#

Voir si déjà le problème vient du fait qu'il se "log" pas lui même

cyan iron
#

Voir si déjà le problème vient du fait qu'il se "log" pas lui même
@slim anvil Effectivement il ne se log pas lui même

#

Je vais tester avec un ami si il log les autres je reviens

slim anvil
#

Tu as un event GuildCreate sinon je crois

keen narwhal
#

Oui

#

Guildmemberadd c'est quand une personne rejoint un serveur

#

GuildCreate c'est quand une Guild est ajouté au client

cyan iron
#

Ok c'esy bon

#

Merci :)

#

Je vais essayer

keen narwhal
#
client.on('GuildCreate', guild => {
    guild.owner.send("Hey j'ai rejoint ton serveur !")
})```
#

Fast

cyan iron
#

Ouiiiii ça fonctionne merci

keen narwhal
#

en 40s

cyan iron
#

Ah déso

#

J'avais déjà fait le code x)

keen narwhal
#

pg

cyan iron
#

client.on("guildCreate", guild => {

    guild.owner.send("Hey ! J'ai rejoins ton serv !")

});
#

Le même en plus x)

cyan iron
#
if(msg.guild.members.cache.get(player.id).roles.has(muteid)) return msg.channel.send("> :warning: **Cette personne est déjà mute**")

Hey ! Je suis passé en v12 donc j'aurais besoin d'aide sur cette commande qui ne fonctionne pas

#

TypeError: msg.guild.members.cache.get(...).roles.has is not a function

#

Je ne comprends pas

timid loom
#

roles.cache.has

#

eh oui

#

les managers sont partout

cyan iron
#

ah merci :)

#

relou ce cache x)

timid loom
#

ça permet d'avoir un code plus uniforme au final

#

mais c'est vrai que c'est un bon bordel de passer de la v11 à la v12

cyan iron
#

Oui x)

keen narwhal
#

Kado

cyan iron
#

Surtout avec 65 commandes x)

#

Je l'ai déjà ;)

#

J'avais juste pas capté le cache

timid loom
#

oh t'en fais pas, j'ai fait du similaire sur le bot de gca

#

je suis même pas sûr que le truc est stable

cyan iron
#

Normalement j'ai tout passé en v12, j'ai rajouté les cache, les embes, les roles, etc

#

AH !

timid loom
#

c'est pas encore en prod

#

mais pour différentes raisons il fallait que ce soit fait

cyan iron
#

Oui nottement le 7 octobre

#

:/

timid loom
#

bref Le Grand Refactor™ ne saurait tarder

#

va falloir tout refaire dessus

cyan iron
#

x)

#

le fameux cache

#

Je l'ai oublié partout x)

timid loom
#

haha

#

il faut faire des rechercher/remplacer

#

c'est le seul moyen de pas en oublier

#

et les faux positifs tu les remet comme avant

cyan iron
#

oui

#

là ce que je fais actuellement c'est que je test les commandes 1 à un :'(

#

C'est long mais j'ai pas le choix

cyan iron
#
const player = client.users.cache.get(msg.mentions.members.first().id)


if(msg.author.roles.cache.highest.position <= player.roles.cache.highest.position) return msg.channel.send("> :warning: **Vous ne pouvez pas mute une personne qui a un rôle égal, où au dessus de vous**")

Hey c'est encore moi avec encore un problème que je n'arrive pas à résoudre :/

#

TypeError: Cannot read property 'cache' of undefined

#

:(

#

Problème réglé ☑️

#

j'ai get le player autrement :)

#

il fallait un member ...

#

pas un user

cyan iron
#
function statistiques_minecraftia(client) {
        const statsguild = client.guilds.cache.get("715552266479992842")
        if (statsguild === undefined) return
        const statschannel = client.channels.cache.get("715552267574575113")
        statschannel.messages.fetch()
            .then((msgCollection) => {
                msgCollection.forEach(msg => {
                    if (msg.id === "715556725780119553") {
                        const embed = new Discord.MessageEmbed()
                            .setColor("#2f3136")
                            .setDescription("> 🔄 **Voici les stats du serveur :**\n\n**📌 Nombre de personnes présentes :** `" + statsguild.memberCount + "`\n**📌 Nombre de salons présents :** `" + statsguild.channels.cache.size + "`\n**📌 Nombre de rôles présents :** `" + statsguild.roles.cache.size + "`")
                        msg.edit(embed)
                    }
                });
            })
    }
#

Hey ! j'ai fait ce code mais ma console est spam par ceci :

#

(node:24) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 55)
(node:24) UnhandledPromiseRejectionWarning: TypeError: fields.flat is not a function
at Function.normalizeFields (/home/container/node_modules/discord.js/src/structures/MessageEmbed.js:443:8)
at MessageEmbed.setup (/home/container/node_modules/discord.js/src/structures/MessageEmbed.js:77:91)
at new MessageEmbed (/home/container/node_modules/discord.js/src/structures/MessageEmbed.js:18:10)
at embedLikes.map.e (/home/container/node_modules/discord.js/src/structures/APIMessage.js:164:40)
at Array.map (<anonymous>)
at APIMessage.resolveData (/home/container/node_modules/discord.js/src/structures/APIMessage.js:164:31)
at Message.edit (/home/container/node_modules/discord.js/src/structures/Message.js:421:105)
at msgCollection.forEach.msg (/home/container/index.js:304:29)
at Map.forEach (<anonymous>)
at statschannel.messages.fetch.then (/home/container/index.js:299:31)
(node:24) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 56)

hazy mirage
#

D'accord, ils ont l'air de dire que cela est lié a la version de node. Vérifie bien si ton node est en v12+ 😉

spring dock
#

Faut que tu rajoute un catch aussi

function statistiques_minecraftia(client) {
    const statsguild = client.guilds.cache.get("715552266479992842")
    if (statsguild === undefined) return
    const statschannel = client.channels.cache.get("715552267574575113")
    statschannel.messages.fetch()
        .then((msgCollection) => {
            msgCollection.forEach(msg => {
                if (msg.id === "715556725780119553") {
                    const embed = new Discord.MessageEmbed()
                        .setColor("#2f3136")
                        .setDescription("> 🔄 **Voici les stats du serveur :**\n\n**📌 Nombre de personnes présentes :** `" + statsguild.memberCount + "`\n**📌 Nombre de salons présents :** `" + statsguild.channels.cache.size + "`\n**📌 Nombre de rôles présents :** `" + statsguild.roles.cache.size + "`")
                    msg.edit(embed)
                }
            });
        }).catch((error) => {
            console.log( error );
        })
}
oak turret
#

pourquoi t’utilises pas game-server-query ?

slim anvil
#

Car c'est les stats du serveur discord

#

Si t'as l'id du message pourquoi tu get pas direct le message ? au lieu de get son channel puis de boucler sur chaque message

oak turret
#

j’ai vu statistiques minecraft mais okay

#

ah ui my bad

hazy mirage
#

ça doit etre le nom du discord

#

¯_(ツ)_/¯

oak turret
#

xD

#

j’ai mal vu

cyan iron
#

D'accord, ils ont l'air de dire que cela est lié a la version de node. Vérifie bien si ton node est en v12+ 😉
@hazy mirage Merci pour tes conseils mais ça vient de mon hébergeur, il vont me régler ça vite fait ;)

plain crystal
#

Coucou, des gens peuvent m'aider à faire un classement ?
Je m'explique j'ai un fichier JSON qui stock une valeur pour chaque utilisateurs et j'aimerais pouvoir savoir comment faire pour savoir qui en a le plus et tout...

Merci

#
{
    "709064224252624936": {
        "totalXP": 914,
        "xp": 14,
        "level": 3
    },
    "176740082340986880": {
        "totalXP": 420,
        "xp": 114,
        "level": 2
    },
    "499535881800122401": {
        "totalXP": 23,
        "xp": 23,
        "level": 1
    },
    "721022134469787708": {
        "totalXP": 13,
        "xp": 13,
        "level": 1
    }
}

Pour le coup la valeur totalXP

slim anvil
#

tu peux utiliser reduce

#

ou faire un sort tout bêtement

#

Si je dis pas de connerie tu feras un

array.reduce((a, a) => (a.totalXP > b.totalXP) ? a : b)

#

Ça va te sortir un objet et du coup normalement celui où totalXP est le plus grand

#

Donc évidemment le « array » c’est ton tableau

plain crystal
#

mon tableau en json ?

slim anvil
#

Oui tu vas venir le récupérer le stocker et tu viendras reduce dessus

#

Si tu l’appelles toto ce sera toto.reduce(...)

plain crystal
#
const levels = require('./level.js')

levels.reduce((a, a) => (a.totalXP > b.totalXP) ? a : b)
#

comme ça ?

slim anvil
#

et donc tu feras un const bestXP = levels.reduce(..)

#

log ton levels voir si tu récupères bien ton tableau déjà

plain crystal
#

ah oui mince

slim anvil
#

levels.js c’est pas ton fichier json

plain crystal
#

j'ai mon tableau ^^

#

(oui j'me suis trompé)

slim anvil
#

yes good donc try maintrnant

#

ah mais c’est pas un tableau d’objet mais juste un objet qui contient des objets

plain crystal
#

Comment ça ?

slim anvil
#

bah c’est un objet pas un tableau c’est écrit 🤨

plain crystal
#

.array du coup

slim anvil
#

Et regarde ton json c’est {} pas []

#

Test quand même le .reduce

#

Mais sur un objet je suis pas sûr

plain crystal
#

malheureusement ça ne marche pas :/

slim anvil
#

Tu peux enlever le reduce (commente le) et fais juste un
console.log(Object.values(levels))

#

Regarde ce que ça te donne

#

Mais sinon de base ça aurait été mieux de faire un tableau d’objet que un objet avec pleins d’objet dedans 🤨

plain crystal
#

perfect

#

(je crois)

#

yes

#
    const bestXP = Object.values(levels).reduce((a, b) => (a.totalXP > b.totalXP) ? a : b)
    console.log(bestXP)
slim anvil
#

Voilà j’allais l’écrire donc good

#

logiquement ça passe sue sue

plain crystal
#

et pour récup le deuxième et le troisième ?

slim anvil
#

Ahhh tu veux pas que le premier t’es sur kappo

plain crystal
#

donc faut sort ?

slim anvil
#

en vrai oui tu changes juste le reduce en sort

#

Ça va te renvoyer un tableau

#

Mais du plus grand au plus petit

#

Tu auras qu’à garder les 3 premiers

plain crystal
#

ok mais du coup je fais une boucle for k, v ?

slim anvil
#

Wuhan

#

Euh le correcteur

#

Why *

#

tu changes juste le .reduce en .sort

plain crystal
#

Oui mais après

#
for k, v in pairs(bestXP) do
end
slim anvil
#

Ahh pour afficher les 3 premiers oui

plain crystal
#

(mais pas en mode glua j'ai capté)

slim anvil
#

yes pour ensuite les afficher tu boucles dessus

plain crystal
#

Oui merci

slim anvil
#

ça fonctionne le sort ?

#

t’as bien un tableau DESC ?

plain crystal
#

DESC ?

slim anvil
#

Plus grand au plus petit

plain crystal
#

nan j'ai plus rien

#
Object.values(levels).sort((a, b) => (a.totalXP > b.totalXP) ? a : b)
slim anvil
#

ahhh my bad

#

Trop bête attend

#
Object.values(levels).sort((a, b) => a.totalXP - b.totalXP)
#

Si je dis pas de connerie

#

si c’est pas bon att juste je sois sur pc car tel c’est relou

plain crystal
#

c'est l'inverse

#

mais perfect

#

voilà

#

j'ai juste changé ici : ```js
const bestXP = Object.values(levels).sort((a, b) => b.totalXP - a.totalXP)

#

inversé a et b

#

Merci de ton aide en tout cas pocebleu

slim anvil
#

Ah yes bon bah good !

#

good luck pour la suite

plain crystal
#

Merci ^^

plain crystal
#

Merci Enzo, (si y'a que moi c'est pour pas faire d'erreurs et crash le bot j'ai vérif la taille de la table)

slim anvil
#

Top!

plain crystal
#

Bonjour,

Désormais je souhaite savoir la position actuelle du joueur (son classement), j'ai essayé avec des boucles for...
Mais je n'ai pas réussi

Merci

slim anvil
#

Tu fais juste un .findIndex

#

Sur ton tableau

plain crystal
#

Comment ça ?

slim anvil
#

Ou tu cherches l’id de la personne dans le tableau

#

C’est la personne qui fait la commande pour voir tout ça ?

#

Pour voir où elle apparaît ?

plain crystal
#

Oui

#

dans le dernier field

slim anvil
#

Yes bah du coup tu peux me remontrer ce que donne le Object.values(levels)

plain crystal
#
const bestXP = Object.values(levels).sort((a, b) => b.totalXP - a.totalXP)
slim anvil
#

Ah oui on a plus l'id kappalul

plain crystal
#

je peut l'ajouter

#

c'est bon j'lai

slim anvil
#

si tu l'as tu fais juste comme pour le sort mais ce sera

plain crystal
#

et j'le met où ce code ?

slim anvil
#

ca va te renvoyer juste l'index (0, 1, 2 etc etc, du coup tu fais + 1)

#
const classment = Object.values(levels).findIndex(e => e.id === message.author.id)
plain crystal
#

Merci

#

ça me retourne -1 c'est normal ?

slim anvil
#

C'est qu'il ne le trouve pas

#

Ton bot est encore en creation ? a ta place je changerai dès maintenant ton json, et le mettrait sous forme de tableau

#

ce sera + simple et + propre

#

tu auras plus besoin des Object.values etc

plain crystal
#

Mais je sais pas comment mis prendre

slim anvil
#

avoir un rendu comme ça:

[
  {
    "id": "xxxx",
    "totalXP": 1000
  }
]
#

et pas mettre l'id du user en clé

plain crystal
#

j'ai ça pour le moment

slim anvil
#

ça te donnerait un truc comme ça du coup

if (!xp.find(e => e.id === message.author.id)) {
  const newUser = {
    totalXP: 0,
    username: message.author.useranme,
    id: message.author.id,
    xp: 0,
    level: 1
  }
  
  xp.push(newUser)
}
#

ça c'est si tu veux passer sous tableau

#

Sinon tu peux garder ton objet et oui ajoute juste l'id dedans ce sera good

plain crystal
#

Oui, j'ai ajouté l'id

slim anvil
#

Okep bah du coup tu peux refaire avec le findIndex ca devrait etre good

#

édite ton json du coup et ajoute ton id à ton user

crimson fern
#

pourquoi stocker le username 🤔

slim anvil
#

Oui il peut le get avec l'id, après il a peut etre pas envie kappa

crimson fern
#

C'est surtout qu'il peux changer de username entre temps

slim anvil
#

Yes

oak turret
#

juste l'id ça suffit ouais

keen narwhal
#

Je me demandais, pour la commande Wiki que j'ai fait.. Si je pouvais vérif si la recherche que j'ai fait genre Pikatchu apparait dans le titre de l'article trouvé afin de pas avoir des réponses random

slim anvil
#

bah si tu récupères le titre tu fais juste un .includes(‘Pickachu’)

#

Mauvaise quote mais je suis sur tel

keen narwhal
#

En gros si je fais >>wiki Pikachu.. dans le code je fais items[0].title.include(string)

slim anvil
#

voila

#

vérifie avant que tu es un items[0] etc...

keen narwhal
#

Justement, c'est si il en a pas que je veux pas que ça donne un truc random parce que là genre si je >>wiki Naruto Uzumaki et que ça me sors un pokémon de type dragon...

#

Franchement...

slim anvil
#

Je te dis juste de checker que le items[0] existe etc

#

Pour pas avoir de canot read property xxx of undefined

keen narwhal
#

Console.log(items[0])

#

Me sort un truc complètement random

slim anvil
#

non mais ça j’ai bien compris 🤣 je te dis juste de faire des vérifications

#

il te renvoie des résultats random si il en trouve pas

keen narwhal
#

if(items[0] == string)

#

else..

slim anvil
#

Non tu fais juste un
If (items[0] && items[0].title && items[0].title.includes(string)){}

fringe wyvern
#

autant utiliser items[ string ] dans ces cas la nan ?

#

bah non

#

suis je sot

slim anvil
#

Juste pour vérifier que le items0 existe

#

si il existe pas tu vas venir faire un include sur rien

#

donc tu vas avoir une erreur

fringe wyvern
#

items[ string ] c est si string est un index

slim anvil
#

bah tu vas venir regarder la si items.pikachu existe

#

donc pas bon

keen narwhal
#

Ok

slim anvil
#

Bah args[1] ?

#

Est égale aux nombres de message supprimé non ?

#

bah du coup voilà 🤨

keen narwhal
#

Att

oak turret
#

moi j'avais fais comme ça

keen narwhal
#

Tu veux faire un clear ?

oak turret
#
 if ( command === "clear" ) {
        if(!message.member.hasPermission("MANAGE_MESSAGES")) return message.reply("Vous n'avez pas la permission");
        if(!args[0]) return message.channel.send("Veuillez enter un montant !");
        message.channel.bulkDelete(args[0]).then(() => {
        message.channel.send(`**__${args[0]} messages supprimés.__**`).then(msg => msg.delete({timeout: 2000})).catch(error =>{console.error(error)});

    })};
slim anvil
#

Ah je vois

#

Bah non du coup

#

Le truc de Lartaxx te donne le nombre que toi tu as envoyés

#

Toi tu veux savoir le vrai nombre qu’il en supprime ?

#

. then(messages => console.log(Bulk deleted ${messages.size} messages))

oak turret
#

yep genre /clear 90 supprime les 90 derniers messages

slim anvil
#

oui mais lui veut savoir combien il en supprime vraiment

#

Car si tu mets 90

oak turret
#

ahh d'accord

keen narwhal
#

Sauf s'ils datent de plus de 14 jours

slim anvil
#

mais qu’il y a que 50

oak turret
#

ouais je vois

brave coral
#

Salut depuis qu'el que temps jsuis entrain de créer mon bot discord mais j'utilise que des commandes

bot.on('message', message => {
    if (message.content === '!test') {
      message.reply('test')
      message.reply('test') 
    }
  })

Donc ce serait pour savoir comment puis-je amener mon bot a aller chercher les commandes dans mon dossier commandes car j'ai déja regardez des tuto ou sur des forum ou sur la documentation j'aimerais savoir comment le faire exactement si c'est possible :)
Meric d'avance

oak turret
#

tu pourrais tout simplement faire des const

#

je te fais ça

#
  const args = message.content.slice(process.env.PREFIX.length).trim().split(/ +/g);
  const command = args.shift();
#

et maintenant

#
if (  command === "!test" ) {
  message.reply("test ok");
}
brave coral
#

Humm Ok

slim anvil
#

Il faut que tu fasses un handler @brave coral

brave coral
#

Mais j'ai pas compris totalement

#

J'ai pas appris ce qu'est était un handler je viens juste de commencer le js

slim anvil
#

sois tu uses celui de discord commando sois tu te fais le tiens

#

Y a pas mal de tuto youtube

brave coral
#

Oui mais il explique pas vraiment en quoi consiste certaine choses

#

Il nous donne juste le codes et puis il explique pas en détail tout ce qu'on peut faire avec je trouve

crimson fern
#

Tu peux aussi utiliser les classes

steel maple
#

Bonsoir à tous, quelqu'un a t'il déjà utilisé MongoDB avec Node.js ? J'aurai quelques questions à ce sujet...
Merci d'avance.

polar canopy
#

Poses-les et quelqu'un y répondra 🙂

slim anvil
#

@steel maple yes ?

west plover
#

#announcements

oak turret
#

ouf mes bots

#

sympa

slim anvil
#

discord en PLS

oak turret
#

3000 pour moi 😭

#

omg

timid loom
steel maple
#

Merci messieurs, alors j'envoie :
Je souhaite faire communiquer mon bot avec plusieurs collections d'une BDD MongoDB.
Grâce aux documentations, je suis arrivé à me connecter et récupérer mes collections dans des variables.
Par contre, j'ai vite compris qu'il ne fallait pas réutilisé la fonction connect à chaque fois car cela génère des erreurs malgré le fait que je ferme la connexion ou pas après utilisation...
Mais du coup, comment mettre à jour mes const lorsque ma BDD est modifié ?

timid loom
#

à priori d'après mes habitudes sur des SGBD divers, tu devrais récup tes données non dans des const mais directement quant tu en as besoin, non pas via des connect mais via des requête de type fetch

#

je sais pas si ça fait sens, je vais essayer de m'informer + sur mongo pour t'aider un peu mieux

slim anvil
#

yes exactly

#

tu vas .find directement dans ta collection

#

pour venir récupérer les datas dont tu as besoin

#
Collection.find({}, async (err, items) => {
  if (err) return err
  if (items && items.length) {
    console.log({items})
  }
})
#

par ex

steel maple
#

Effectivement, j'utilise la fonction .find pour récupérer les données dans mes collections.
Vous voulez dire que la fonction connect n'est pas nécessaire ?

slim anvil
#

Non tu te connectes qu'une fois

timid loom
#

elle est nécessaire mais pour établir la connexion à la base de données

slim anvil
#

au chargement de ton app

#

donc au lancement de ton bot

timid loom
#

pas pour récupérer les données qui sont dedans

steel maple
#

Effectivement j'y ai pensé et j'ai placé ma connection dans le fichier principal sans succès et je suis bloqué à ce niveau...
Comment partager le client MongoDBB (qui est connecté du coup) sur mes fichiers annexes ?

slim anvil
#

tu uses mongoose ?

steel maple
#

Non j'utilise le pack Mongodb

slim anvil
#

j'ai un exemple de ce que j'avais fais y a un petit moment

mongoose
.connect(uri, {
    useNewUrlParser: true,
    useUnifiedTopology: true
}).then( () => {
    console.log('✅ MongoDB')
}).catch(err => {
    console.log(err)
})
steel maple
#

Yes merci, ça c'est ok pour moi.
Mais maintenant comment utiliser cette connexion sur un fichier command annexe par exemple ?

slim anvil
#

Rien de particulier 🤔

#

tu vas juste require mongoose dans ce fichier

#

require aussi ton Model

#

tu vas venir faire un

const item = new Collection({
  _id: mongoose.Types.ObjectId(),
// etc
})
#

Collection = le nom de ton model j'ai juste mis un truc random

#

et ensuite faire un

#
item.save()
#

Après j'use mongo atlas (mongodb dans le cloud) c'est peut etre légèrement différent avec une bdd en local 🤔

keen narwhal
#

Ça vient pas de moi content de le savoir :3

steel maple
#

J'utilise également mongo sur le cloud

#

Celle proposée en Add-on par Heroku

#

Qu'est ce que tu appelles le Model stp ?

#

Le nom de ma collection à priori, dsl je débute...

slim anvil
#

Un model c'est ça en gros:

#
const exampleSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    userId: String,
    fileUrl: String,
    roleId: String
})
steel maple
#

Ok je vois, cela est pour stocker un utlisateur qui vient de faire un "report" par exemple.

#

En fait, je prévois de rendre ma BDD accessible et modifiable via des formulaires sur un site Web par des tiers et que cela se répercute du coup sur le bot (exemple message de bienvenue Auto, ...).

#

"Je prévois", enfin j'essaie 😄

#

Pratique lorsque tu ne veux pas que tes administrateurs Discord accèdent à ton code

#

Pour l'instant je suis côté Bot et je cherche à récupérer les données pour les utiliser dans mes fonctions discord

slim anvil
#

Dans ce cas là, si tu comptes l'utiliser a gauche et a droite

#

crées toi une petite api

#

que tu appeleras dans tes bots et sur ton site 👍

steel maple
#

Tu met le doigt sur un truc nouveau pour moi ^^

#

Cela est impossible sans cette api ou juste compliqué/absurde ?

slim anvil
#

Je pense que tu vas avoir des trucs redondants entre les 2 projets ce sera, je pense, plus simple d'avoir un seul endroit ou tu te crées des routes / controllers / models

steel maple
#

Un nouveau challenge pour moi lol.
Quel language me conseil tu pour cette API avec node.js côté bot et PHP côté site internet.

slim anvil
#

nodejs coté back du coup au moins tu sais ou tu mets les pieds

#

après tu peux aussi le faire en php du coup a toi de voir ! 😄

steel maple
#

Lorsque j'ai conçu le site en PHP, il n'était pas prévu de réaliser cette fonction ^^

#

Je présume que Node.js peut remplacer mon PHP côté back site internet ?

#

(c'est un tout petit site)

spring dock
#

pk tu fait pas ton api sur le même projet que le site ?

#

puis si ta déjà commencé ton site en php autant le continuer en php au lieu de recommencer

steel maple
#

Ok je vais suivre ton conseil.
En gros, mon PHP va lire et écrire dans la base et mon Bot envoyer des requêtes pour récupérer les valeurs lues par PHP.
Cela évite en effet que node lise de son côté alors que PHP le fait déjà.

spring dock
#

Yes puis ça reste surtout plus maintenable d'avoir que un endroit qui fait "tout" au lieu de devoir modif ton code à 15 endroits différents à chaque fois ^^

steel maple
#

Yes je comprends tout à fait ^^

#

Le nouveau challenge et une première pour moi sera de faire communiquer les deux ensembles ^^

#

Je n'ai aucune idée du niveau de difficulté ou de la charge de travail nécessaire...

spring dock
#

C'est vraiment pas compliqué ^^

steel maple
#

Ok dans tous les cas je vas tatter le terrain, je ne suis pas pressé car je réalise cela à titre perso.
Mais d'une simple création de bot à une autre je me retrouve propulsé à rajouter des trucs où j'apprends de nouvelles choses et j'adore ça 😄

#

Merci pour votre aide et vos retours 👍 🙂

plain crystal
#

Salut, il existe un event onBotCrash (ou un truc similaire)? Merci

timid loom
#

par définition si le bot crash c'est que le processus a rencontré un problème... le fait qu'il y ait un log du crash est déjà un truc assez incroyable en soi

hazy mirage
#

Un try catch sur tout le projet ferait l’affaire kappo

timid loom
#

cela dit tu peux configurer l'environnement d'exécution du bot pour qu'un code s'exécute au moment du crash du processus

#

tu peux également juste bien gérer les erreurs sur le bot

plain crystal
#

Un try catch sur tout le projet ferait l’affaire kappo
@hazy mirage C'est ce que je veux pas x)

timid loom
#

enfin, si tu veux juste réaliser certaines actions lorsque le bot se déconnecte tu peux le faire via l'event 'disconnect' ou 'shardDisconnect' (je crois) sur la v12

#

mais c'est très rare de pouvoir faire un truc avec ça et je doute que ce soit ce que tu recherches

plain crystal
#

Non, j'aimerais quelque chose qui envoie l'erreur en cas de crash mais sans faire l'astuce de Pilot2 si c'est possible ^^

timid loom
#

hmm, globalement son idée est pas complètement mauvaise

hazy mirage
#

Y’avait un kappa goddamn

timid loom
#

si tu lances ton bot dans un script d'initialisation (du genre ton fichier index.js va appeler des fonctions pour lancer ton bot) tu peux faire de la gestion d'erreur à partir de là

#

mais c'est pas possible en général parce que les erreurs sont trop variées

plain crystal
#

Merci, je vais écouter Pilot je pense alors harold

timid loom
#

bah je viens de te dire que c'est pas une bonne idée

plain crystal
timid loom
#

complètement

spring dock
#

mauvaise

plain crystal
#

🤏

timid loom
#

je veux dire dans le fond ça fonctionne, c'est juste pas une bonne idée

slim anvil
#

Sinon si tu utilises un pm2 ou autre, tu peux aussi intercepter les erreurs

#

Donc dans l'interceptor tu peux ajouter un webhook pour te notifier que ca a crash

plain crystal
#

Ouais j'ai PM2 mais il m'énerve à reste on h24

timid loom
#

je t'ai donné 66546645 autres alternatives, tu peux ou pas les considérer c'est ton problème pas le mien

slim anvil
#

Bah c'est que ton instance node ne crash pas

#

Donc les erreurs sont gérables dans le bot directement

timid loom
#

et je vois pas pourquoi tu voudrais pas que pm2 reste on en fait 🤔

slim anvil
#

mdr c'est clair "trop chiant ca reste ON" harold

timid loom
#

le principe c'est que pm2 héberge ton instance node, si tu veux pas que ton instance soit on tu veux pas que ton bot soit on tout le temps, donc t'as juste à l'arrêter 🤔

#

je comprends clairement pas le soucis

flint eagle
#

salut j'ai trouvé un prob pour remplir ça

#

pour créer un bot

#

pouvez vous m'aider svp

oak turret
#

dans client.login tu dois mettre le token de ton bot

flint eagle
#

ça ?

oak turret
#

yep

flint eagle
#

ok

crimson fern
#

essaye d'espacer ton code 😉

oak turret
#

ton bot fera rien mais il se lancera

#

si il est sur ton serveur

flint eagle
#

oui il est sur mon serv

#

mais hors ligne

oak turret
#

faut le lancer

flint eagle
#

comment ?

#

pour l'instant j'ai collé mon token

#

mais j'ai pas compris le discord.js je sais pas le remplace avec quoi

oak turret
#

node index.js dans ton terminal

#

quel discord.js ?

flint eagle
oak turret
#

touche pas à ça

#

c’est pour use la lib discord.js

flint eagle
#

ah! d'acc

oak turret
#

c’est écris sinon pdr

#

en commentaire

flint eagle
#

mais j'ai pas compris ta phrase

#

index.js

oak turret
#

tu es sur vscode?

#

tu fais clic droit sur ton fichier js

flint eagle
#

oui

oak turret
#

ouvrir dans terminal

#

et node nomdetonfichierjs.js

flint eagle
#

comme ça ?

#

y a le terminal en bas

oak turret
#

oui et tu écris node index.js

flint eagle
#

deja ecrit

oak turret
#

fin si ton fichier s’appelle index

flint eagle
#

automatiquement

oak turret
#

si tu le dis

#

bah fais entrer

#

et look si ton bot s’allume

flint eagle
#

ok

keen narwhal
#

node . Lance tout les fichiers

flint eagle
#

non il est pas allumé

oak turret
#

node fichier.js

flint eagle
#

et j'ai reçu ça

oak turret
#

allume le fichier

flint eagle
#

oui

oak turret
#

ouais je vois ça me le fais pas avec les bots mais sur les ftp

#

fais ok

#

et écris dans le terminal

#

juste ça

#

node index.js

#

attend

#

t’as installé node.js ?

#

et t’as npm i discord.js

#

?

keen narwhal
#

Waw

oak turret
#

mdrr

flint eagle
#

oui je l'ai installé

oak turret
#

t’as npm i ?

keen narwhal
#

Je peux lui passé des tutos ?

oak turret
#

ui

keen narwhal
#

Jamais eux cette erreur xzd

oak turret
#

moi je l’ai des fois en ftp

flint eagle
#

t’as npm i ?
@oak turret non

oak turret
#

mais rien à voir avec les bots

#

t’as fais npm i ou install discord.js ?

keen narwhal
#

pour apprendre à coder, il y a une multitude de tuto sur internet. Voici quelque lien qui pourrait t'être utile ! https://www.grafikart.fr/formations/debuter-javascript -> Apprendre les bases du JavaScript :langage_nodejs:

https://www.npmjs.com/ -> La documentation NPM :npm:

https://nodejs.org/en/download/ -> Pour télécharger Node.JS :langage_nodejs:

https://nodejs.org/en/docs/ -> La documentation Node.js :langage_nodejs:

https://discord.js.org/#/docs/main/stable/general/welcome -> La documentation discord.js :discordjs:

https://www.youtube.com/playlist?list=PLssd99LQmGUekT80WRpyZo2GWO9U5wKWq -> Une série de tuto orientée discord.js en création de bot :emoji_2: