#javascript-typescript

1 messages · Page 90 of 1

slim anvil
#

Hello, le refresh toutes les (x) minutes ce n'est pas dingue, car si il y a pas de nouveautés c'est useless
Tu peux passer par un système de socket (socket.io) qui va te permettre d'envoyer des events à ta partie front pour lui dire "hey j'ai des nouveautés, tu peux l'envoyer à tous les users" (par exemple)

ebon shard
#

Oui j'y est penser j'ai vue que php le propose aussi ça peut passer à voir si sur symfony ça passer

slim anvil
#

Oui bien sur, les sockets fonctionnent avec bcp de langage, tu as juste a emit des events et à les listen d'un autre côté

worldly plank
#

Yep c'est l'exemple que je m'étais fait pour bien comprendre. C'est con mais de ce que j'ai vu c'est pas ultra connu

weak grove
#

Bonsoir, savez vous comment je pourrais récupérer le nombre de messages total d'un utilisateur sur le guild ?

#

Ce nombre (par exemple):

oak root
summer tiger
#

🆙

flat sandal
#

MySQL a autant de risques d’SQL injection que Sequelize 💀

#

Et je suis sûr que d’autres ORM ont aussi fait face à des failles dans les dernières années

#

Utiliser un ORM ne veut pas dire que tu n’auras pas de risques d’SQL injection (.i.e. ce n’est pas parce que tu ne vois pas de requêtes SQL dans ton code qu’il n’y en a pas et même au contraire. Toutes les méthodes que tu utilises via un ORM sont compilées pour être des requêtes SQL mais tu ne le vois pas.)

#

Après, utiliser un ORM facilite vraiment la sécurité de tes failles étant donné que c’est aux mainteneurs du module d’assurer qu’il n’y a pas de risques et de vulnérabilité. Mais c’est toujours ton rôle de valider les inputs et sécuriser ton code

heavy path
#

Bonjour est-ce possible de modifier la class d'un élément HTMl grâce à du JS (function déclenchée par un onclick="") ?

slim anvil
#

oui bien sur

heavy path
#

Ok top

#

Par contre question

#

Pourquoi je peux rien faire avec le .getElementsByClassName ?

#

Je suis obligé de passer par .getElementById, sinon les style et classList (et surement beaucoup d'autres propriétés) ne marchent pas

keen narwhal
#

Tu mets une id a ta div ça revient au même

#

Sinon j’ai pas la réponse à ta question x)

heavy path
keen narwhal
heavy path
#

Bon bah Enzo svp x)

slim anvil
#

parce que le getElementsByClassName te renvoie un tableau d'élément

#

donc tu peux pas faire .classList

#

sur ton tableau, il faudrait boucler sur tes éléments par exemple

heavy path
#

Pas tout compris 😅

slim anvil
#

le getElementsByClassName te renvoie ça

#

Un array d'HTMLElement

heavy path
#

Hhm ok

slim anvil
#

je sais pas exactement ce que tu veux faire, mais dans le cas ou tu veux que chaque élément avec une class précise change, tu peux boucler sur tous ces éléments et leur faire un .classList.add

heavy path
#

Je crois voir

#

Mais enft je viens de me dire que c'était inutile

slim anvil
#

ah ça après je sais pas ca dépend de ce que tu cherches à faire surtout

heavy path
#

Oui

#

Mais merci quand même

summer tiger
heavy path
#

Etrange j'arrive toujours pas même avec l'ID

#

Je dois pas avoir compris les classList

#

Quelqu'un qui connaît la library fontawesome pourrait-il m'éclairer en JS svp ?

#

Je souhaiterais qu'avec un onclick l'icone change

#

et Comme les icones sont détérminés par la balise <i></i> avec une class particulière (la classe donnant l'icone), si je change la classe je peux changer l'icone

#

sauf que ça marche pas

oak root
heavy path
#

Yep thx j'irais check apré

weak grove
oak turret
#

juste un .length ou un .size à la place du content c’est tout hors du forEach du coup ^^

weak grove
#

le problème avec du .size c'est que c'est dans une foreach ducoup sa me spam des nombres

#
client.guilds.cache.get("470897860473389066").channels.cache.forEach(ch => {
            if (ch.type === 'text'){
                ch.messages.fetch({
                    limit: 100
                }).then(messages => {
                    // const msgs = messages.filter(m => m.author.id === '283315291986067457')
                    // msgs.forEach(m => {
                    //     console.log(m.size)
                    // })
                    console.log(messages.size)
                })
            } else {
                return;
            }
        })
oak root
#

et si tu fais ça ? (j'ai pas tester):

client.guilds.cache.get("470897860473389066").channels.cache.forEach(ch => {
  if (ch.type === 'text'){
    ch.messages.fetch({
      limit: 100
    }).then(messages => {
      const msgs = messages.filter(m => m.author.id === 'L\'ID QUE TU VEUX')
      console.log(msgs.size)
    })
  } else {
    return;
  }
})
north flicker
#

Salut j'aimerai pouvoir récupérer les message privée de mon bot discord reçu mais avec messageCreate ça ne fait rien

fading glacier
#

C'est DIRECT_MESSAGES

oak turret
#

là oui logique ça te compte la size de tous les messages

#

hors du forEach ça sera le nombre de messages

#

sois msgs.length ou .size

weak grove
#

const msgs = messages.filter(m => m.author.id === 'L'ID QUE TU VEUX')
console.log(msgs.size)

oak turret
#

yep

#

test

#

je suis pas sur pc je regarderais plus en détail si ça fonctionne pas

north flicker
# fading glacier Il faut préciser l'intent quand tu créer ton Client

je l'avais deja mit voila mon code

const { Client, Intents } = require('discord.js');
const client = new Client({ 
    intents: [
        Intents.FLAGS.DIRECT_MESSAGES,
        Intents.FLAGS.DIRECT_MESSAGE_REACTIONS,
        Intents.FLAGS.DIRECT_MESSAGE_TYPING
    ] 
});

client.on('ready', () => {
    console.log(`log`);
});

client.on('messageCreate', message => {
    console.log(message.channel.type)
});

client.login(token)
oak root
# heavy path Yep thx j'irais check apré

J'ai fais des tests de mon côté et tu peux faire comme ça :

<button id="btn">
  Ouvrir <i class="fa fa-angle-right icon"></i> 
</button>
<script>
  var btn = document.getElementById("btn");
  btn.onclick = function() {
    $(".icon").toggleClass('fa-angle-down').toggleClass('fa-angle-right');
  }
</script>

Tu ajoute une classe à la balise <i></i> que tu viens chercher après et modifier avec toggleClass

neat lintel
oak root
#

c'est avec jQuery

heavy path
#

Ce qui signifie ?

oak root
#

c'est une librairie gratuite

#

c'est libre et multiplateforme sur tous les navigateurs et ça te permet de simplifier ton code

#

tu peux l'importer comme cela :

slim anvil
#

Et rendre ton code bcp plus lourd alors qu’il suffit de faire .classList.toggle()

#

Et ça revient au même KappaRetard KappaRetard KappaRetard

oak root
#

dans ton head

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
heavy path
#

mais du coup sans la library ça donne quoi ?

slim anvil
#

faut que ce soit l'icon dans le button seulement qui se toggle ?

#

ou tous ?

heavy path
#

Seulement celui du button

slim anvil
#
const button = document.getElementById('button')

button.addEventListener('click', function() {
    this.querySelector('.icon')?.classList?.toggle('maClass')
})
heavy path
#

oula oula

#

rien compris

#

sauf la première ligne ptdr

slim anvil
#

En gros je crée un évènement au click sur ton button#button (id: button)
puis le this = ton button, dans notre cas: l'html du button
Dans dans ce button je viens chercher la class icon pour venir lui toggle une class

heavy path
#

mais on peut retirer la 2e ligne et faire plutôt une function qu'on appelle sur un onclick="" en HTML ?

#

Ou c'est différent

inner escarp
#

Oui tu peut faire <button id="button" onclick="mafunction(this)"></button>

weak grove
heavy path
#

Ok je crois voir

heavy path
slim anvil
#

Non juste à l’icon

heavy path
#

Non mais ce que je veux dire c'est que

#

si j'ai <button id="button" class="icon"></button>, ce code JS va faire en sorte que :

  • ça devienne <button id"button" class="icon maClass">
    OU
  • ça devienne <button id"button" class="maClass">
#

?

#

Parce que là ça marche pas ça fait 0 changement

slim anvil
#

Sorry je suis dehors je regarde en rentrant

keen narwhal
#

@heavy path t’as pas une erreur console ?

slim anvil
#

Non ce code va faire en sorte que:

#

<button id=button><span class=icon maclass>hello…

#

si tu veux que ce soit le bouton lui même tu fais le classList.toggle sur le this

heavy path
slim anvil
#

Oui exactement

heavy path
#

Hhm

#

this signifie le dernier élément visé ?

slim anvil
#

Signifie l’élément sur lequel l’événement a eu lieu

#

donc ton button

heavy path
#

Mais donc si j'ai une fonction où il ya d'autres choses qui se passent ça marcherait

#

attend je vous motnre

#
// 0 = activé ; 1 = désactivé
var display
display = 1

function showSummary(this) {
    const summary = document.getElementById('summary');
    const button = document.getElementById('button');

    if (display === 1) {
        summary.style.transition = '0.4s all';
        summary.style.display = 'block';

        this.classList?.toogle('fa-angle-up');

        display = 0;
    }

    else {
        summary.style.transition = '0.4s all';
        summary.style.display = 'none';

        this.classList?.toogle('fa-angle-down');

        display = 1
    }
}```
#

HTML html <h2>Sommaire <button type="button" onclick="showSummary()"><i class="fas fa-angle-down" id="button"></i></button></h2>

#

Il y a forcément un soucis puisque ça marche pas

slim anvil
#

Regarde ici tu auras la réponse

#

tu as ouvlie@quelque chose

#

Oublie *

heavy path
#
<h2>Sommaire <button type="button" onclick="showSummary(this)"><i class="fas fa-angle-down" id="button"></i></button></h2>```
#

Comme ça ?

#

Btw avec les 3 lignes JS concernant ce bouton, la fonction ne marche plus, genre quand je clique ça marque que dans un sens, et après ça se désactive pas

#

J'arrive pas à faire ce que je veux je comprends rien

slim anvil
#

re sorry

mighty fossil
#

Bonjour, j'aurai besoin de quelqu'un pour m'expliquer ce que je veux faire en javascript pour un bot discord svp. Merci beaucoup.

slim anvil
#

'tooogle"

#

c'est toggle

#

il sert à quoi ton display = 1 ?

slim anvil
mighty fossil
#

j'aimerais faire une commance qui donne une phrase parmi d'autres phrases mais sous forme aléatoire et avec des pourcentages de chances de faire cette phrases plus facilement.

#

je débute 😅

keen narwhal
#

Tu fais un array de tes phrases et tu utilises le module math.random

heavy path
mighty fossil
heavy path
#

Mais sinon btw j'ai réussi, tout marche, c'est vrai qu'utiliser l'inspecteur est super pratique, c'était super pas compliqué et le site qu'on m'avait passé m'était amplement suffisant si je réfléchissais x)

slim anvil
keen narwhal
slim anvil
#

il enlève et ajoute quand il faut

heavy path
#

j'ai le code ^pour ceux qui veut

heavy path
keen narwhal
#

Ouais mais tu apprendras pas en restant dans ta zone de confort

heavy path
#

par ailleurs, est-ce que c'est possible de faire des transitions en JS, genre si on a un div.style.borderBottom = "1px solid red; faire que ça s'affiche avec une transition comme en CSS ?

heavy path
keen narwhal
#

Ouais tu vois tu fais sans comprendre t’apprendras pas

heavy path
#

Je pense que dans mon code y a beaucoup de choses peu optimisées parce que je débute

keen narwhal
#

Essaye ton comprendre ton code tu verras ça glissera tout seul après

keen narwhal
#

T’inquiète pas

heavy path
keen narwhal
heavy path
#

Bah je l'ai compris là x)

keen narwhal
#

Parfait

#

L’optimisation c’est pas grave quand tu débutes

#

Ça vient avec le temps quand tu commences à mieux comprendre et que tu apprends de plus en plus de chose

heavy path
#

Yap

heavy path
keen narwhal
#

Mais tu devrais pouvoir le faire depuis le css

ashen rapids
#

Vous connaissez la limite d'upload d'un bot ?

#

J'arrive plus à la trouver

oak turret
#

upload de ?

#

pour un fichier c'est 8mb

ashen rapids
#

Ok 8

heavy path
keen narwhal
heavy path
#

Yap j'ai vu

#

J'en ai profité mon code parce que au lieu de me casser la gueule avec les classes

#

J'aurais pu fairee... button.style.transform = 'rotate(180deg)';

#

Je suis bête

#

En même temps j'avais pas appris les transform

#

M'enfin ça marche, + une transition : transform 0.5s; et le tour est joué

keen narwhal
#

parfait

weak grove
oak turret
#

fais ça genre :

let iSize;
client.guilds.cache.get("470897860473389066").channels.cache.forEach(ch => {
            if (ch.type === 'text'){
                iSize = ch.messages.size;
                ch.messages.fetch({
                    limit: 100
                }).then(messages => {
                    // const msgs = messages.filter(m => m.author.id === '283315291986067457')
                    // msgs.forEach(m => {
                    //     console.log(m.size)
                    // })
                    console.log(messages.size)
                })
            } else {
                return;
            }
        })
console.log(iSize)
#

@weak grove

oak turret
#

.length dans ce cas

weak grove
#

pareil

frail lion
#

les gars j'ai besoin d'aide 😅

#

Je comprend rien, je peut meme pas passé l'etape 1

oak turret
#

ça te return quoi ch.messages ?

frail lion
#

genre... quand je fait "npm i discord.js" sa me dis "Sorry, name can only contain URL-friendly characters."

#

help 👍

weak grove
#

oh non

#

sa me return les info du guild (name, logo etc)

frail lion
#

ok pas ici que je trouverait de l'aide

oak root
#

🤦

queen quiver
#

Hello. J’ai du mal à mettre en situation les booléens, j’ai compris le fonctionnement mais je n’ai pas compris l’utilité. Quelqu’un connait de bon cours sur ce point là s’il vous plaît ?

keen narwhal
#
let soleil = true;

if (soleil == true) {
      console.log("Aujourd'hui il fait beau")
} else {
      console.log("Aujourd'hui il fait moche")
} 
burnt perch
#

Hey les pro du développement de solutions pour le web, je voulais savoir si vous connaissez un bon moyens de partager des sessions entre express et socket io ?

#

actuellement j'ai trouvé redis mais c'est une galère de ouf là donc je cherche un autre truc en deuspi

burnt perch
#

c'est bon j'ai trouvé les bg finalement merci pour toutes les réponses surtout à toi @burnt perch qui a trouvé la solution 😉

#

ducoup pour ceux qui ont la même galère que moi j'ai laisser tomber redis qui nécessite un server et je passe par :

cookie-parser
cookie-session

mais redis et sympas pour tout ce qui est store en cache on peut vraiment gagner en temps d'exec de ce que j'ai compris
la bise 😗

cyan iron
#

Redis c'est trop bien

burnt perch
#

ui je viens de découvrir mais bon j'aurai utiliser 20% du truc donc flemme de me casser la tête pour ça

ashen rapids
#

Oui c'est ça, redis pour stocker / récupérer de la petite données rapidement, généralement temporaire

keen narwhal
sharp grail
#

le tuto sur g-ca ne fonctionne plus pour la version v13 de discord.js

#

il est vieux

keen narwhal
#

d'accord, merci je vais me renseigner ailleurs ducoup

hazy mirage
#

C’est précisé v12.5.1, éventuellement je l’updaterai pour qu’il soit adapté aux nouvelles majs

keen narwhal
#

ça serait cool 🙂

heavy path
#

Hello j'ai un ptit pépin avec ce bout de code :

// 0 = activé ; 1 = désactivé
var display, display_submenu
display = 1
display_submenu = 1

function showSummary() {
    const summary = document.getElementById('summary');
    const button = document.getElementById('button');

    if (display === 1) {
        summary.style.display = 'block';

        button.style.transform = 'rotate(180deg)';
        button.style.color = 'rgb(56, 131, 211)';

        display = 0;
        display_submenu = 1;

        console.log(display)
    }

    else {
        summary.style.display = 'none';

        button.style.transform = 'rotate(0deg)';
        button.style.color = 'rgb(41, 40, 40)';

        display = 1;
        display_submenu = 1;

        console.log(display)
    }
}

function showSubmenu(number) {
    const submenu = document.getElementById('submenu');
    const button_submenu = document.getElementById('button' + number);


    if (display_submenu === 1) {
        submenu.style.display = 'block';

        button_submenu.style.transform = 'rotate(180deg)';
        button_submenu.style.color = 'rgb(56, 131, 211)';

        display_submenu = 0;
    }

    else {
        submenu.style.display = 'none';

        button_submenu.style.transform = 'rotate(0deg)';
        button_submenu.style.color = 'rgb(41, 40, 40)';

        display_submenu = 1;
    }

}
#

En gros c'est censé faire que quand je clique sur le menu principal pour afficher le sous-menu, quoi qu'il en soit le sous menu est pas déroulé

#

sauf que si je clique pour dérouler le sous menu, et qu'après je ferme puis réouvre le menu principal, le sous-menu reste déroulé

#

Sommaire = mon menu principal,
Origines de la musique = sous menu

#

j'ai rajouté des console.log pr check je comprends pas

#

attendez je vais manger

heavy path
#

Donc

#

D'après ma console, quand je ferme mon menu j'ai l'impression que ça inverse les données

dapper salmon
#

Ils restent déroulés parceque rien n'indique qu'il faut fermer les sous menu quand on ferme le menu dans ton code

heavy path
#

bah si dans la première fonction je change aussi la valeur de display

#

enfin jsp ça marche pas comme ça ?

heavy path
#

les changements opérés dans une fonction ne s'appliquent pas dans une autre fonction ?

keen narwhal
#

Bonjour,

Je peux créer un bot discord si vous le souhaité avec plusieurs fonctionnalité : Vérification Captcha DM, Tickets, Création rôle personnalisé pour les membres, Bot Musique et plein d'autre fonctionnalité..

Me DM

Pour le moment et pour me faire connaître je le fais gratuitement pour les 5 premières personne qui le souhaite !

dapper salmon
#

ok tu changes la valeur de ton display mais ta fonction showSubmenu n'est pas appelée. C'est elle qui va ouvrir/fermer en fonction de la valeur de display

heavy path
#

Comment ça elle est pas appelée ?

#

Je l'appelle au onclick du sous menu

dapper salmon
#

Oui mais toi ton probleme c'est que les sous menu ne se replient pas quand tu repli le menu du dessus

#

Donc y'a que la premiere fonction qui est appelée en principe

heavy path
#

Ah ok

#

Donc en théorie il faudrait que

#

J'appelle la fonction dans l'autre fonction ?

dapper salmon
#

par exemple

#

mais il faut que tu recuperes tous les "number" qui correspondent a tes sous menu pour pouvoir les appeller les un a la suite des autres

heavy path
#

Aïe chiant

#

Sinon je fais quoi d'autres ?

dapper salmon
#

fais voir ta structure HTML

#

des menus et submenus

heavy path
#

Yep atta là jsuis pas chez moi

#

dans 20-30 min

heavy path
#
<h2>Sommaire <button type="button" onclick="showSummary('summary')"><i class="fas fa-angle-down" id="button"></i></button></h2>
<ol id="summary">
    <li><a href="#music-origins">Origines de la Musique</a> <button type="button" onclick="showSubmenu('1')" id="button1"><i class="fas fa-angle-down"></i></button>
        <ol id="submenu">
            <li><a href="#prehistory-to-china">De la préhistoire à la Chine, l'apparition de la musique</a></li>
            <li><a href="#">Dans la Grèce antique</a></li>
        </ol>
    </li>
</ol>
#

@dapper salmon

dapper salmon
#

Bon, si on suit ton raisonnement dans ce que tu as fait il faudrait faire un tour de passe passe de ce style la:

      const subMenuButtons = summary.querySelectorAll('button')
      subMenuButtons.forEach((_, index) => {
        display_submenu = 0;
        showSubmenu(index + 1);
      });

#

et ça il faut le mettre a la fin de ton else de ta premiere fonction

heavy path
#

Encore une fois c'est complicado 😂😅

dapper salmon
#

On fait pas d'omelette sans casser des oeufs mon gars

heavy path
#

C'est vrai c'est vrai

#

Mais faut m'expliquer concrètement parce que là je capte pas

dapper salmon
#

bah ce que fait mon code c'est :

  • A partir de ton element id=summary, selectionner tous les <button> qui se trouvent dedans
  • Boucler sur chaque occurence de button
  • mettre display_menu a zéro (sinon showSubmenu va croire que le submenu est deja fermé)
  • appeler showSubmenu en passant le numéro du bouton (index + 1 car les index de tableau commencent a zéro, or toi, ton premier bouton commence par 1)
heavy path
#

Pas tout compris

#

boucler sur chaque occurence c'est daire tiut le code pour chaque Button c'est ça ?

#

comme un for i in range(x, n) en py ?

dapper salmon
#

Oui

heavy path
#

Ok

dapper salmon
#

subMenuButtons c'est un tableau, chaque entrée du tableau contient un bouton HTML

La fonction forEach est une methode de tableau en javascript elle permet d'executer un callback pour chaque element du tableau

#

Et dans les arguments du callback (_, index) => {.... la premiere valeur c'est l'entree du tableau (nous on s'en fout donc on met un underscore pour meubler) et la deuxieme c'est l'index d'iteration

heavy path
#

index d'itération ?

dapper salmon
#

L'indice de l'élément du tableau en cours de traitement.

queen quiver
#

Hello ! J’ai une question concernant les formulaires.
J’ai fais deux formulaires, chacun dans une page html différentes, avec leurs script de vérif dans le même fichier JS.
Je vous savoir comment gérer deux scripts de formulaires dans le même fichier JS ? Il y a une méthode spécifique à ça où faut juste changer les nommages ?

ashen rapids
#

Dans le même fichier JS, t'as juste à récupérer tes inputs en fonction de la class / ID

queen quiver
#

Les vérifications d’un formulaire

#

Mais ca n’interfère pas sur les deux boutons lors du submit ?

ashen rapids
#

Non, t'as juste faire 2 fonctions différentes

queen quiver
#

(comment on met au propre un bout de code sur le Discord ?), je veux montrer un petit truc ? ^^

slim anvil
#

!code

#

:'( marche pu

#

u!code

#

:'((

#

il a supprimé la commande

queen quiver
#

ah mince..

slim anvil
#

tu peux utiliser les backtick

#

`

oak root
#

```language
TON CODE
```

queen quiver
#

mincee je sais pas comment on faire un retour à la ligne xD

queen quiver
#

Oula.. quand je click sur le boutton submit ça me fait ça :

queen quiver
#

mon code :
https://sharemycode.io/c/3442903 => HTML de mes deux formulaire
https://sharemycode.io/c/63ab260 => JS script pour les deux formulaire

Le formulaire atelier fonctionne nickel au niveau des vérifications JS, par contre le formulaire de contact il a toujours ce message d'avertissement lorsque je click sur le bouton "envoyer"

empty field
#
const { Client, Collection, Intents, Interaction } = require('discord.js')
const { token } = require('./config.json');

const client = new Client({ intents: [Intents.FLAGS.GUILDS]})

client.commands = new Collection
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
    const commands = require (`./commands/${file}`);
    client.commands.set(commands.data.name, command);
}

client.once('ready', () => {
    console.log('Bot opértionelle !');
});

client.on('interactionCreate', async Interaction => {

})

client.login(token);
#

le script pour demaré est bon ?

hazy mirage
#

Salut, ouais cela semble bon, maintenant à toi de voir si t'a des erreurs dans ta console quand tu fais node tonfichier.js

empty field
#

C:\Program Files\nodejs\node.exe .\index.js
Uncaught Error: Cannot find module '@discordjs/rest'
Require stack:

  • c:\Users\monblase\Downloads\Bot Kageyama\commands\ping.js
  • c:\Users\monblase\Downloads\Bot Kageyama\index.js
    Process exited with code 1
#

No debugger available, can not send 'variables'
Process exited with code 1

#

ca me met caa

#

@hazy mirage

hazy mirage
#

Hop désolé, tu as fait npm i ? Si c'est le cas, vérifie ta version de node avec la commande node -v peut être qu'elle est trop ancienne mais ça semble pas avoir de rapport

empty field
#

je met npm i discord ?

hazy mirage
#

simplement npm i

#

normalement ça va installer tes dépendances

#

si ça fonctionne toujours pas fait npm i -s discord.js

empty field
#

sa marche tjr pas :/

#

No debugger available, can not send 'variables'
Process exited with code 1

hazy mirage
#

utilise pas le debugger pour lancer ton code

#

utilise la commande node .

empty field
#

fais

#

et apres

hazy mirage
#

ben ça te sort quoi

empty field
#

code: 'MODULE_NOT_FOUND',
requireStack: [
'C:\Users\^^\Downloads\Bot Kageyama\commands\ping.js',
'C:\Users\^^\Downloads\Bot Kageyama\index.js'
]
}

hazy mirage
#

ah comme tout à l'heure

#

alors

empty field
#

en vert

#

oui ?

hazy mirage
#

va dans ton dossier

#

tu supprime

#

package-lock.json

#

le dossier node_modules

#

et tu garde package.json

#

envoie le contenu de ton fichier package.json stp

empty field
#

ok

#

il est ou

hazy mirage
#

ah tu en as pas ?

empty field
#

si

#

{
"dependencies": {
"discord.js": "^13.3.1"
}
}

hazy mirage
#

supprime le package.json aussi

#

fait npm init -y

#

ensuite npm i -s discord.js

#

et ensuite réessaie node .

empty field
#

voila

hazy mirage
#

toujours la même erreur qu'au départ ?

#

ah mais y'a quoi dans ta commande ping.js ?

empty field
#

bah le bot n'est toujours pas en ligne

hazy mirage
#

envoie le debut du fichier du ping.js stp

empty field
#

const { SlashCommandBuilder } = require('@discordjs/builders');
const { CommandInteraction } = require('discord.js');

const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');

const commands = [{
name: 'ping',
description: 'Replies with Pong!'
}];

const rest = new REST({ version: '9' }).setToken('token');

(async () => {
try {
console.log('Started refreshing application (/) commands.');

await rest.put(
  Routes.applicationGuildCommands(CLIENT_ID, GUILD_ID),
  { body: commands },
);

console.log('Successfully reloaded application (/) commands.');

} catch (error) {
console.error(error);
}
})();

hazy mirage
#

bon ben fait npm i -s @discordjs/rest

empty field
#

voila

sharp grail
hazy mirage
#

et du coup refait un node .

#

ça te remet l'erreur ?

empty field
#

Object.<anonymous>

hazy mirage
#

tu sais faire un screen ou pas

empty field
#

oe

hazy mirage
#

ça serait plus pratique stp

sharp grail
empty field
sharp grail
#

ah

#

mais t'as trouvé ce code où alors ?

#

car ça c'est un code du guide

empty field
#

ah

sharp grail
#

et juste le mettre sans explication c'est pas ouf car je suppose que tu comprends pas grand chose

#

vu ta cmd ping je suppose

empty field
#

tu a raison

#

donc je fais quoi dcp ?

sharp grail
#

alors 👀

#

ce que tu peux faire éventuellement

#

déjà les outils à ta disposition :
DiscordJS:
documentation https://discord.js.org/#/
guide : https://discordjs.guide/#before-you-begin
JS Documentation :
mdn : https://developer.mozilla.org/fr/
node : https://nodejs.org/en/docs/

oak turret
#

rien que décrire même en mots clés ton problème en anglais pour avoir + de résultats suffit largement ^^

empty field
#

je vais tous regarder

sharp grail
empty field
#

okay merciii

ashen rapids
#

C'est possible maintenant de récupérer un message avec des boutons ?

Imaginons qu'on envoie un message avec des boutons. Le bot reboot, comment récupérer l'interaction et remettre un collector sur les boutons ?

#

Me semble que c'était pas possible mais ça a peut-être changé !

cedar crest
#

Comment ca envoyer un message avec un bouton ?

sharp grail
#

tu ne peux pas (enfin je ne crois pas) get une interaction une fois qu'elle a été envoyée

#

surtout que son token est valide 15 min

ashen rapids
sharp grail
#

la seule façon serait de stocker le msg dans une db, et si le bot reboot modifier le msg

ashen rapids
#

Ha oui pas con !

#

Tu créés une nouvelle interaction dessus

cedar crest
#

On parle bien des gros boutons qui ressemble à des réactions hn ?

sharp grail
#

yep

cedar crest
#

Mhhh

#

Jamais utilisé perso

ashen rapids
#

Quel homme

#

Qu'on le couvre d'or

sharp grail
#

et useless au final, il pourrait juste retaper la cmd 🤔

ashen rapids
ashen rapids
#

Et arrive que le bot restart pendant

sharp grail
#

ça marchera mieux qu'un collector

sharp grail
ashen rapids
#

C'est quoi la diff ?

sharp grail
#

bah concrètement

#

l'event interactioncreate c'est pour toute les interactions que ton bot reçoit

ashen rapids
#

Oue mais c'est chiant de faire un évent à part, de check l'interaction pour vérifier que c'est bien celle que je veux

sharp grail
#

un collector c'est sur un seul msg

#

et c'est des components seulement

ashen rapids
#

Peut être que interactionCreate ça marche aussi quand tu reboot le bot ?

sharp grail
#

mais durée liité

ashen rapids
#

Faudrait que je fasse des tests

sharp grail
#

recréer*

ashen rapids
#

Oue je vois

sharp grail
#

ce qui me semble plus pratique

ashen rapids
#

Faut que je regarde si c'est pas top chiant niveau vérif

sharp grail
#

un peu, mais en soit c'est ptet mieux qu'un collector temporaire 🤔

ashen rapids
#

Oue je vais voir

sharp grail
#

dacc 👀

ashen rapids
#

Merci !

keen narwhal
#

👋 Hey, hey!

Est-ce qu'il y a des gens qui s'y connaissent en React.
J'essaye de faire un site (Thème Fallout) et ça fait 2 jours que je me bat avec ma navbar en vain pour faire un apparaître deux div à côté de l'onglet actif.

Si vous avez des idées, je suis preneur. (Avant que je mange mon bureau pepecry)

ashen rapids
keen narwhal
#

En gros, j'ai ma nav, avec du coup a côté de chaque <NavLink> react-router-dom des crochet gauche/droite

Et là en gros pour les afficher c'est très sale (querySelector dans le componentDidMount et je prend le previousSibling / nextSibling et je désac la classe colunactive)

#

Et du coup, des que je change de route, react-router-dom met le activeClassName sur le bon truc, mais les barres gauche/droite ne suivent pas et je t'avoue que comment je l'ai fait ça me donne des envie de vomir, mais je vois pas d'autres solutions actuellement 🤔

#

Et je monte pas le reste parce-que y'a ma bouille, et que c'est absolument pas responsive (en soit même ma nav, est pas responsive encore PepeClown)

slim anvil
#

yo Romarin, ton effet d'active est sur chaque élément ? ou c'est un seul élément qui slide entre chaque élément

keen narwhal
slim anvil
#

ce que je veux dire par là c'est :
est-ce que tes [ ] sont dans chaque élément en caché, ou est-ce que tu en as qu'un et il bouge de gauche a droite en fonction de l'élément selectionné

keen narwhal
#

En gros, j'ai mon effet active qui retire la barre en dessous

slim anvil
#

Okay on peut améliorer ça facilement

#

Ce que tu vas commencer à faire pour que ce soit moins redondant pour la suite c'est te créer un tableau de routes sur lequel tu vas boucler pour afficher tes routes

[{
 "path": "/",
 "name": "PROFIL"
}, {
 "path": "/meth",
 "name": "COMP. MÉTIER"
}, //....
]
#

Comme ça dans ta boucle tu ne vas pouvoir venir afficher seulement ça

{{ routes.map((route, i) => {
  <React.Fragment>
    <div></div>
    <NavLink :to={route.path} ....>{{ route.name }}</NavLink>
    </div></div>
  <React.Fragment>
})
#

je sais pas si on utilise encore les React.Fragment pour mettre 2 éléments, ou si tu peux juste faire un <> ou autre

#

les 2 divs = ton code pour les [ ]

#

comme ça ce sera généré automatiquement

keen narwhal
#

Ok, bouge pas je fait ça 👍

slim anvil
#

sorry enlève les : devant to, habitude sur un autre framework

keen narwhal
#

T'inquiète j'avais vu mdrr!

#

Mais du coup ça va pas afficher mes [] partout?

slim anvil
#

Pour l'instant si

#

le but étant de venir récupérer l'activeItem

#

et de venir créer une un

const [activeItem, setActiveItem] = useState(0)
#

et venir afficher seulement les [] ou le i de la boucle est === à activeItem

#

tu vois l'idée ?

keen narwhal
#

Je vois, je vois!

slim anvil
#

donc par exemple tu pourras jouer avec les className pour avoir un effet d'opacité et pas juste un display none, ca rendra mieux

#

essaye de voir si tu peux pas récupérer le activeItem avec react-router-dom

#

tu as un useLocation() qui te renvoie la route actuelle

#

tu peux watch cette value dans ton composant

keen narwhal
#

Tu as un isActive mais genre très chelou a use

slim anvil
#

ah oui

#

essaye de voir si tu peux te servir du isActive de navLink pour venir set ton activeItem justement

#
isActive={(match, location) => {
    if (match) // here
  }}
keen narwhal
#

Écoute, je vais essayer déjà ce que tu ma conseiller, je te tiens au jus!

slim anvil
#

yes bon courage, je sais pas si c'est la bonne manière, mais j'aurai fais un truc comme ça de mon côté

keen narwhal
#

Je pense que c'est mieux que ma manière overkill de faire PepeClown

slim anvil
#

et enfaite je regarde le truc, et je pense que tu peux même le gérer sans ref autre, mais direct avec ton isActive

#

si tes [] sont dans ton NavLink y a moyen

keen narwhal
#

Ouais mais si je fout mes [] dans mon NavLink ça ma niquer l'effet que je veux je pense 🤔

#

Après tout est rattrapable

slim anvil
#

Yes je pense que c'est le mieux, ensuite tu arranges ton css a l'intérieur du navLink

#

mais ça t'évitera de recréer un systeme deja disponible

#

:P

keen narwhal
#

True

#

En gros si j'ai bien compris:

  1. Je fout mes [] dans mes NavLink.
  2. Je joue avec le activeClassName pour enlever la barre en dessous de mon active
  3. avec mon isActive j'active les []
  4. Je dance et je bois un café
slim anvil
#

ezatement, de ce que j'ai vu tu peux return une value qui a l'air d'etre accessible dans ton composant, à voir exactement mais ca a l'air d'etre ça

#

donc tu peux faire un if (math) return true par exemple

keen narwhal
slim anvil
#

et dans tous les cas si tu l'as récupère pas, tu reprend l'idée d'avant en ayant juste une ref et tu appelles une fonction dans le isActive qui va venir set la valeur

#

match* pardon

keen narwhal
#

Ah! x)

slim anvil
#

c'est si la route est la meme que dans ton to

#

mon h se la joue solo

keen narwhal
#

D'acc, bon écoute je vais try merci beaucoup pour l'aide et si jamais j'ai encore besoin où des question je reviens vers toi 👍

#

Et si j'y arrive je viens te faire des poutous

keen narwhal
# slim anvil si tes [] sont dans ton NavLink y a moyen

Hey, désoler du ping (me frappe po)
Le isActive casse tout, une fois mis, le activeClassName ne fonctionne plus 😠

Après j'ai fait comme ta dit, mis mes [] dans mon NavLink, après quelques bidouilles ça reste identique par rapport à avant (même plus bg KappaRetard)

#

En soit je vois pas pourquoi le isActive casse le activeClassName, mais pour autant ne casse pas le className 🤷‍♂️

slim anvil
#

alors est-ce que tu récupères bien une value a afficher via ton isActive ?

keen narwhal
#

Je récup bien le path par contre

slim anvil
#

tu return rien ?

#

montre

keen narwhal
#

Attend, comment ça je return rien

#

x)

slim anvil
#

show me tes navLink

#

je répondrai pas de suite je pars promener le dog

keen narwhal
#

En gros ça donne ca, j'ai pas eu le time de faire comme tu ma dit tous à l'heure (j'ai mes cours en même temps) donc j'essaie déjà comme ça et après je repasserais en clean

J'aimerais déjà bien comprendre comme ça 🙂

keen narwhal
bold sparrow
#

Coucou,

#

Le booléen defaultPermissions pour les slash Commands sert à quoi concrètement ?

ashen rapids
slim anvil
keen narwhal
#

Ça marche bien y'a bien le retour du activeClassName

#

Et du coup là comment je vais pouvoir faire pour récup mes [], sans que ça doit un pâté de sable qui peux s’effondrer à tout moment (sachant que maintenant mes [] sont dans ma NavLink)

slim anvil
#

Okay essaye juste de voir si tu peux faire un {{ isActive }} dans ton navLink stp

#

voir si il le return ou pas

keen narwhal
#

Juste un isActive vide?

#

Ou dans les [] ?

slim anvil
#

{{ isActive }} dans ton <navLink>

keen narwhal
#

Like that? 🤔
Y'a une erreurs donc je pense avoir fait une daube?

slim anvil
#

ah mais tu as enlevé le isActive de tes props ? laisse-le

keen narwhal
#

Toujours une erreur même si je le laisse dans les props

slim anvil
#

du coup je pense pas possible comme je le pensais, fais toi juste une fonction isActive={setActiveItem} et cette function va venir faire ton return true si il y a un match

#

et du coup comme je te disais tout a l'heure avoir un const [activeItem, setActiveItem] ....

#

et dans ta fonction si if (match) { // set active item + return true}

#

et comme ça tu vas venir checker dans ta boucle
si l'index de ta boucle === activeItem

keen narwhal
#

En soit, quand je fout le return true dans mon props mon activeClassName est bien return, je peux pas juste faire une vérif dedans? où c'est pas propre?

slim anvil
#

Sisi bien sur tu peux laisser dedans c'était pour éviter que ce soit trop gros a ce niveau là

#

Mais du coup juste venir set ta value

keen narwhal
#

Et comment je peux get mes [] depuis mon isActive 🤔

slim anvil
#

en gros tu viens déclarer

empty field
#

Bonjour savez vous comment introduire un client ID lors du demarage du bot car moi ca me met ca 🤔 ReferenceError: CLIENT_ID is not defined

slim anvil
#
const [activeItem, setActiveItem] = useState(0)
////

et dans ton isActive tu auras

if (match) {
  setActiveItem(i)
  return true
}
keen narwhal
#

Et du coup, je parie que activeItem === []

slim anvil
#

Presque, activeItem === l'index de ta boucle
Donc tu vas pouvoir faire

{{ activeItem === i &&
<div></div>
}}
#

pour tes 2 brackets

#

du coup elles devraient s'afficher que pour la route actuelle

keen narwhal
#

Ou c'est complètement différent?

slim anvil
#

Ah oui fais une boucle comme je t'avais dis au début, c'est pour ça que je te l'avais dis pour justement arriver à ça maintenant

#

;p

#

t'es pas baised tu peux le faire autrement, mais ca t'évitera de devoir mettre des conditions partout

#

elles seront dynamique

empty field
#

enzo toi tu sais le faire ?

slim anvil
#

dequoi pardon

empty field
#

quand j'essai de le mettre en ligne le terminal me met cela ReferenceError: CLIENT_ID is not defined

keen narwhal
#

envoie ton code

#

sauf le token

empty field
#
const { token } = require('./config.json');

const client = new Client({ intents: [Intents.FLAGS.GUILDS] });

client.once('ready', () => {
    console.log('Ready!');
});

client.login(token);
keen narwhal
keen narwhal
#

ah nan att t'as tes intents

sharp grail
keen narwhal
#

ouais j'pense aussi

keen narwhal
#

parce que là y a pas de raison que sa marche pas

empty field
keen narwhal
sharp grail
#

là c'est que la première partie

#

normalement avec tu as l'endroit où est l'erreur

keen narwhal
# slim anvil Ezatement

En dessous je fait mon:

return routes.map((route, i) => {
  <React.Fragment>
    <div></div>
    <NavLink to={route.path}       activeClassName={'colactive'} 
    isActive={(match => { if (match) return true;})}>
    {{ route.name }}
  </NavLink>
    </div></div>
  <React.Fragment>
})
empty field
keen narwhal
empty field
#
    at C:\Users\prenom\Downloads\Bot Kageyama\commands\ping.js:19:39
    at Object.<anonymous> (C:\Users\prenom\Downloads\Bot Kageyama\commands\ping.js:27:3)
    at Module._compile (node:internal/modules/cjs/loader:1095:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:999:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (C:\Users\prenom\Downloads\Bot Kageyama\index.js:11:22)
    at Module._compile (node:internal/modules/cjs/loader:1095:14)
C:\Users\\Downloads\Bot Kageyama\index.js:12
    client.commands.set(commands.data.name, command);
keen narwhal
#

Mais du coup si je boucle, ça va aussi boucler mes nav-empty non? 🤔

slim anvil
#

qu'est

#

-ce

keen narwhal
#

Ok.

keen narwhal
#

Bouge pas je t'explique x)

#

et surtout met ton bot dans un dossier spécifique pas dans les downloads

empty field
sharp grail
#

ah ok

empty field
#
const { CommandInteraction } = require('discord.js');

const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');

const commands = [{
  name: 'ping',
  description: 'Replies with Pong!'
}]; 

const rest = new REST({ version: '9' }).setToken('token');

(async () => {
  try {
    console.log('Started refreshing application (/) commands.');

    await rest.put(
      Routes.applicationGuildCommands(CLIENT_ID, GUILD_ID),
      { body: commands },
    );

    console.log('Successfully reloaded application (/) commands.');
  } catch (error) {
    console.error(error);
  }
})();```
sharp grail
keen narwhal
#

tu as copier coller ce bout de code ?

empty field
#

nn

#

j'ai tout écrit :/ car j'ai pas trouver a copier coller*

keen narwhal
#

tu comprends ce que ton code fait ?

#

@slim anvil Moyens que je t'envoie en mp ce que je vais t'expliquer ça sera plus "clair"

slim anvil
#

oui

keen narwhal
#

👍

#

Tu me laisse 5 minutes le temps que je fasse les screen x)

empty field
keen narwhal
#

envoie le dossier racine de ton bot j'ai l'impression que tu l'as mis au mauvaise endroit

empty field
#

bah je suis débutant donc je ne peut pas te confirmé :/

keen narwhal
empty field
#

d'accord

keen narwhal
#

déjà créer toi un Dossier que tu appelles comme tu veux qui sera la racine de ton bot

#

mais pas dans les téléchargements

#

fais le dans le disque D: ou C: peu importe

keen narwhal
empty field
#

disque local c ?

keen narwhal
#

tu as que celui là ?

empty field
#

oui

keen narwhal
#

ok bah mets le là dedans oui

empty field
#

ensuite

#

je fais tout comme j'avais fait

#

?

keen narwhal
#

oui tu installe tout ce qu'il faut pour faire tourner ton bot avec npm

#

je te conseille de regarder des tutos youtube pour un début

#

tu comprendras mieux le fonctionnement

empty field
#

dac

#

tu a une vidéo a me conseiller

#

en particulier

#

?

keen narwhal
#

Vous désirez apprendre à coder un bot Discord sans aucune connaissance ? Dans cette vidéo, nous allons créer l'application de notre bot ainsi que la structure du dossier sur la version 13 de discord.js! Visionnez notre vidéo pour en savoir plus!

/!\ Regardez le commentaire épinglé pour la version ou pour tous les changements à venir /!\

Libra...

▶ Play video
#

ce youtubeur je trouve que c'est vidéo sont assez complète

empty field
#

okay merci !!

keen narwhal
#

après si tu as une bonne maîtrise de l'anglais tu peux aller voir des chaînes anglophones mais pour un début ce youtubeur est parfait

cosmic thicket
#

Bonjour quelqu'un maitrise un peu le framework phaser ?

empty field
pale void
#

Comment ça, une mauvaise config ?

empty field
#

bah il y avait un truc a cocher mais je l'ai pas fait

pale void
#

Avec plus de détails, ça sera encore mieux !

empty field
#

les tools

keen narwhal
#

Y a rien a cocher normalement je comprends pas

empty field
#

dans la vidéo il coche mais pas grave

unborn knot
#

hello quelqu'un sais comment mettre des icônes sous ce format ?

red torrent
unborn knot
#

53.308 ?

red torrent
#

C'est un objet JavaScript que tu as dans ton fichier pas du xml

keen narwhal
#

Salut! Je suis encore bloqué, j'ai fais ça

#

J'ai défini mon token dans une variable et quand je run le programme, il me répond "undefined"

#

J'ai fais npm init -y

#

npm i discord.js@12.5.1

#

et voila

ashen rapids
#

C'est qu'elle pas correctement set

keen narwhal
ashen rapids
#

Fais un env et montre nous tes variables

keen narwhal
#

en variable j'ai que mon token

#

dans le .env

ashen rapids
#

Tu es sous Docker ?

keen narwhal
#

euh jsp ce que s'est

slim anvil
#

c'est bien un fichier .env ?

#

pas juste env ?

keen narwhal
#

non s'est .env

ashen rapids
#

Mais tu es sous Windows ?

keen narwhal
#

oui

ashen rapids
#

Ha ok j'avais pas vu que tu utilisais dotenv sorry

#

Ton fichier .env est dans quel dossier ?

keen narwhal
#

dans le fichier src

ashen rapids
#

Il faut qu'il soit au même endroit que ton package.json

keen narwhal
#

donc je mets package.json dedans ?

ashen rapids
#

Non

#

Tu touches pas au package.json

#

Tu mets juste ton .env dans ton root directory

keen narwhal
#

faut que je sorte .env du fichier src donc ?

ashen rapids
#

Ouii

keen narwhal
#

c'est quoi un root directory mdr

#

UwU

ashen rapids
#

Ton dossier racine

#

Le premier

keen narwhal
#

ok merci

ashen rapids
#

La doc de dotenv t'indique bien :

Create a .env file in the root directory of your project. Add environment-specific variables on new lines in the form of NAME=VALUE. For example:

keen narwhal
#

le fichier bot.js aussi?

#

dans src j'ai ça

ashen rapids
#

Non seulement ton fichier env

keen narwhal
#

ok ok d'accord

ashen rapids
#

Tu touches à rien d'autre

keen narwhal
#

Ah ça marche maintenant merci beaucoup

ashen rapids
#

Parfait !

keen narwhal
#

je continue mon aventure

#

Salut euh j'ai encore besoin d'aide x)

#

ça concerne pas spécialement le javascript mais je voulais savoir comment je reviens à l'endroit pour taper des choses dans mon termial

cyan iron
#

CTRL + C

ashen rapids
#

Revenir à l'endroit ?

keen narwhal
#

jsp si c'est clair

ashen rapids
#

T'es sûr VScode ?

keen narwhal
#

non sur mon terminal de commande

cyan iron
#

ça met fin à ton processus et tu peux à nouveau taper des commandes

#

C'est CTRL + C dans ton terminal

keen narwhal
#

ah merci @cyan iron

ashen rapids
#

Haaaa exact

cyan iron
keen narwhal
#

qu'est ce que je ferais sans vous

cyan iron
#

Rien harold

keen narwhal
#

Salut si jamais mon bot est déconnecter comment je le reconnecte ?

#

Je crois qu'il y a un truc avec run

#

mais jsps quoi exactement

#

essaye npm run

#

celui que je suis en train de faire actuellement est pas encore déconnecter

#

ou alors installe nodemon ton bot se relancera à chaque modification mais fait gaffe à ne pas spam l'api discord

#

ah j'ai nodemon

#

du coup ça va le run à chaque fois que je sauvegarderais mon code ?

keen narwhal
#

ok merci

#

oui ça le relance à chaque fois

peak cedar
#

@keen narwhalça peux faire chier les api ?

keen narwhal
peak cedar
#

merci bg

keen narwhal
#

de rien !

keen narwhal
#
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: The module '\\?\C:\Users\noebo\Desktop\SLMDV1\node_modules\canvas\build\Release\canvas.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 83. This version of Node.js requires
NODE_MODULE_VERSION 102. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.Module._extensions..node (node:internal/modules/cjs/loader:1177:18)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:999:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (C:\Users\noebo\Desktop\SLMDV1\node_modules\canvas\lib\bindings.js:3:18)
    at Module._compile (node:internal/modules/cjs/loader:1095:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12) {
  code: 'ERR_DLOPEN_FAILED'
}

Node.js v17.0.1```
**Salut vous pouvez m'aider svp c'est quand je start mon bot**
#

Ton bot est à jour ?

#

Essaye npm rebuild ou npm install

oak turret
keen narwhal
#

Deja fais @oak turret @keen narwhal, rien ne change

#

Envoie ton fichier package_lock.json à la partie où il affiche la version de ton node

keen narwhal
#

c'est trop long

#

T’as version de node est en 16 pas 17 c’est pour ça

#

Mets à jour tes packages

#

comment?

flat sandal
#

supprime ton package-lock et node_modules

#

et fais npm install

keen narwhal
#

@flat sandal J'ai eu cette erreur

flat sandal
keen narwhal
#

Tes packages sont pas à jour

keen narwhal
keen narwhal
hidden cypress
#

salut petit probleme en gros jai un bot discord qui permet de ban et sa veux pas voici le code

const { Command } = require("../../config")
const { MessageEmbed } = require ( 'discord.js' )
const Discord = require('discord.js')
const client = new Discord.Client()
const { ownerID } = "752586212988027023"

module.exports.config = {
name: 'ban',
aliases: ['b'],
description: 'Bannir un utilisateur',
category: Command.Admin,
usage: "[mention | ID] <reason> (optional)",
}
module.exports.execute = async (client, message, args) => {
try {
if (!message.member.hasPermission("BAN_MEMBERS") && !ownerID .includes(message.author.id)) return message.channel.send("Vous n'avez pas les permission.");
if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send("Vous n'avez pas les permission de ban cette personne !");
if (!args[0]) return message.channel.send("> ⚠️ Merci de mentionner une personne")

        let banMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase());
        if (!banMember) return message.channel.send("**User Is Not In The Guild**");
        if (banMember === message.member) return message.channel.send("**> ❌ Désoler, mais vous ne pouvez pas vous ban tout seul**")

        var reason = args.slice(1).join(" ");

        if (!banMember.bannable) return message.channel.send("**> ❌ Désoler, mais je ne peux pas ban cette personne**")
        try {
        message.guild.members.ban(banMember)
        banMember.send(`> :warning: Tu a été ban de ${message.guild.name} pour la raison : ${reason || "Aucune raison."}`).catch(() => null)
        } catch {
            message.guild.members.ban(banMember)
        }
        if (reason) {
        var sembed = new MessageEmbed()
            .setColor("GREEN")
            .setDescription(`**${banMember.user.username}** a été ban pour la raison : ${reason}`)

message.channel.send(sembed)
} else {
var sembed2 = new MessageEmbed()
.setColor("GREEN")
.setDescription(**${banMember.user.username}** Utilisateur banni)
message.channel.send(sembed2)
}
} catch (e) {
return message.channel.send(**${e.message}**)
}
}

keen narwhal
#

Il est où ton banMember.ban() ?

hidden cypress
#

je sais pas j'avais payer un dev pour le faire et apres jai repris le code et j'etais pas au courant pour " ban.member.ban()"

keen narwhal
#

Tu devrais laisser le code de base si tu t’y connais pas

hidden cypress
#

j'ai pas toucher a cette categorie

#

le ban je les laisser comme sa

keen narwhal
#

Je vois où c’est censé ban le mec mais normalement ça devrait être banMember.ban({ reason })

hidden cypress
#

ou es que je dois changer cela ?

keen narwhal
#

Contacte le dev que tu as payer pour qu’il regarde ça parce que là j’suis pas sur mon pc et je sais pas comment il a organiser ça

hidden cypress
#

bas le probleme ses qu'il a arreter le dev et il sais pas nn plus

keen narwhal
#

Essaye dans ton try à la place de message.channel.ban de mettre banMember.ban({ reason })

cyan iron
#

@hidden cypress quand tu partages un code, met dans un code block ( entre ```js ```)

keen narwhal
#

Salut j'aimerais savoir comment faire pour que mon bot envoie un message dans un salon différent de celui ou j'ai fais la commande

cyan iron
#

Tu fais

```js
Ton code
```

hidden cypress
#

okk

cyan iron
#
console.log('ton code est comme ça du coup')
keen narwhal
#

par exemple ici j'aimerais bien que mon bot envoie des messages dans un salon différent de celui ou j'ai fais la commande

#

Ah Att quoi que

hidden cypress
#
const { Command } = require("../../config")
const  { MessageEmbed }  =  require ( 'discord.js' )
const Discord = require('discord.js')
const client = new Discord.Client()
const { ownerID } = "752586212988027023"

module.exports.config = {
    name: 'ban',
    aliases: ['b'],
    description: 'Bannir un utilisateur',
    category: Command.Admin,
    usage: "[mention | ID] <reason> (optional)",
}
module.exports.execute = async (client, message, args) => {
    try {
if (!message.member.hasPermission("BAN_MEMBERS") && !ownerID .includes(message.author.id)) return message.channel.send("**Vous n'avez pas les permission.**");
            if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send("**Vous n'avez pas les permission de ban cette personne !**");
            if (!args[0]) return message.channel.send("**> :warning: Merci de mentionner une personne**")

            let banMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase());
            if (!banMember) return message.channel.send("**User Is Not In The Guild**");
            if (banMember === message.member) return message.channel.send("**> :x: Désoler, mais vous ne pouvez pas vous ban tout seul**")

            var reason = args.slice(1).join(" ");

            if (!banMember.bannable) return message.channel.send("**> :x: Désoler, mais je ne peux pas ban cette personne**")
            try {
            message.guild.members.ban(banMember)
            banMember.send(`> :warning: Tu a été ban de ${message.guild.name} pour la raison : ${reason || "Aucune raison."}`).catch(() => null)
            } catch {
                message.guild.members.ban(banMember)
            }
            if (reason) {
            var sembed = new MessageEmbed()
                .setColor("GREEN")
                .setDescription(`**${banMember.user.username}** a été ban pour la raison : ${reason}`)
message.channel.send(sembed)
            } else {
                var sembed2 = new MessageEmbed()
                .setColor("GREEN")
                .setDescription(`**${banMember.user.username}** Utilisateur banni`)
            message.channel.send(sembed2)
            }
        } catch (e) {
            return message.channel.send(`**${e.message}**`)
        }
    }
keen narwhal
#

Je vérifie un truc

hidden cypress
#

genre sa

keen narwhal
#

comme avec dyno

hidden cypress
keen narwhal
#

ah merci

hidden cypress
#

message.guild.members.ban(banMember)
?

keen narwhal
#

Salut je reviens ici pcq quand je crée une nouvelle commande le bot ne répond plus

#

Il ne répond plus à aucune des commandes, je n'ai rien changé à ses permissions

keen narwhal
#

jsp si c'est normal

#

Envoie ton code

#

const { Client } = require('discord.js');
const client = new Client();
const PREFIX = "."

client.on('ready', () =>{
    console.log(`'${client.user.tag} has logged in'`)
});

client.on('message', (message) =>{
    console.log(message.content);
});

client.on('message', (message) =>{
    if(message.author.bot) return;
    console.log(`[${message.author.tag}] : ${message.content}`);
    if(message.content === '.clan1'){
        message.channel.send('https://link.clashofclans.com/fr?action=OpenClanProfile&tag=2LQVRPGQ9')
    }
    if(message.content === '.clan2'){
        message.channel.send('https://link.clashofclans.com/en?action=OpenClanProfile&tag=VRLLLC9G')
    }
    if(message.content === '.liste'){
        message.channel.send('Liste des commandes :\n\n`.clan1`=>Donne le lien du clan 1\n`.clan2`=> Donne lien du clan 2')
    }
    if(message.content === '.renforts'){
        message.channel.send(`[${user}]`)
    }
    if(message.content.startsWith(PREFIX)){
        const CMD_NAME = message.content.substring()
    }
}); 
client.login(process.env.DISCORDJS_BOT_TOKEN)
// client.channels.cache.get('id').send('message')
#

normalement tout est normal

#

Enlève les deux dernière lignes

hidden cypress
keen narwhal
#

ça marche toujours pas pour moi aussi x)

keen narwhal
#

ah nodemon a crash sur mon terminal

keen narwhal
#

le client login il est obligatoire non ?

#

Pourquoi je devrais l'enlever

hidden cypress
#

sa fait tjr le meme trucs alors que jai rl mon bot

keen narwhal
#

Tu dois préciser quelqu’un à ban

hidden cypress
#

sa marche pas comme meme

#

jai deja essayer

keen narwhal
#

l'erreur nodemon ?

#

Oui

#

Toute l’erreur

hidden cypress
#

orb ses pas l'erreur sa

keen narwhal
#

Euh

#

Ben y'en a pas alors

hidden cypress
#

par exemple sur visual studio code les erreur sont ici

keen narwhal
#

Ah mais moi pour dire au bot de mentionner celui qui fait la commande j'ai fais ça

#

oui mais moi je suis sur mon terminal

hidden cypress
keen narwhal
#

Oui

#

ah ok

#

ça mentionne pas :(

hidden cypress
#

mais deja ton code est sencer faire quoi ?

keen narwhal
#

C'est une commande basique

#

commande réponse

#

Vous devriez apprendre les bases du discord js grâce à des tutos

#

Tu as pas définis ton user

#

c'est un peu trop compliqué pour moi j'vais aller voir des vidéos de tuto je pense

hidden cypress
#

okk

#

es que tu sais pk sa fait sa naltos ?

#

sa c un truc de ticket pv

keen narwhal
#

L’id channel que tu as mis n’existe pas

hidden cypress
#

mais j'la trouve nulpart l'id

keen narwhal
#

l’id correspond à un channel de ton discord

#

tu fais click droit et copier l'identifiant

#

du channel que tu veux

#

Re j'ai une question pour plus tard, si jamais je veux revenir sur le terminal ou il y à bon bot, je fais comment ?

#

ou il y à mon bot*

#

ah c'est bon j'ai trouvé

blazing wadi
#

Bonjour, j'ai une petite question, je suis actuellement en train de faire un bot et je voudrai le connecter à une bdd sauf que je sais pas quelle base prendre? Elle doit me permettre de stocker pas mal de donner et être accesible via le site et le bot

ashen rapids
blazing wadi
#

Il me faut un truc ou je peux stocker sans avoir de soucis

keen narwhal
#

MongoDB

ashen rapids
#

Sur mon bot, j'ai choisi MongoDB
Car je voulais un truc que je savais utiliser et pouvoir dev rapidement

keen narwhal
#

Elle est géniale comme BDD

ashen rapids
#

SQL c'est pas mal, car ultra structuré. Mais naturellement, ça prends plus de temps à mettre en place

keen narwhal
#

Il y a beaucoup de tuto sur YouTube pour la relier à des bots discord en plus

ashen rapids
#

Si ça reste de la petite données, tu peux partir sur du SQlite

blazing wadi
#

en fait j'ai eu beaucoup de mal à installer MySQL sur ma machine

#

après mongodb j'ai jamais réussi vous avez un bon tuto ?

keen narwhal
ancient sonnetBOT
#
Résultats de la recherche: console

console.log()
La méthode console.log() affiche un message dans la console Web. Le message peut être une simple chaine de caractères (avec des valeurs optionnelles de substitution) ou peut être composé d'un ou plusieurs objets JavaScript.

Example:

console.log(obj1 [, obj2, ..., objN]);
console.log(msg [, subst1, ..., substN]);

Console JavaScript
Consulte la page pour voir + de détails :ok_hand:

Console
L'objet console donne accès à la console de débogage du navigateur (par exemple., la Console Web dans Firefox). Les spécificités de fonctionnement varient d'un navigateur à l'autre, mais il y a tout de même un ensemble de fonctionnalités qui sont fournies de base.

pale void
#

Uah, c'est tellement pratique x)

ashen rapids
#

L'avantage de MongoDB c'est que tu peux sortir un truc hyper rapidement

pale void
#

Oops, pardon ! J'ai coupé une conversation avec mon test 😶

ashen rapids
#

Non t'inquiète ya aucun soucis 😂

pale void
#

:D

vivid bramble
#

Yo j'ai un ptit soucis avec mon code de mon bot discord

#
const { ALL } = require("dns");
const { create } = require("domain");
const bot = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION']});
const ytdl = require ("ytdl-core");
const command = require('command');
const { send } = require("process");


const Client = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION']});

const prefix = "!";```
#

VSCode me dit "Uncaught TypeError [CLIENT_MISSING_INTENTS]: Valid intents must be provided for the Client."

keen narwhal
#

tu as pas mis tes intents dans le new discord client

ashen rapids
#

T'as dû suivre un tuto de la v12

#

Maintenant sur la v13, t'es obligé de le préciser

keen narwhal
#

const bot = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION']});

#

ça supprime le

#

sa sert à rien

vivid bramble
#

Ah ok

#

merci bg

#

Donc c'est pas à jour ?

#

Ptn ils font chier Java -_-

keen narwhal
#

bah du moins tu utilises une déclaration de client qui dates de la v12

hidden cypress
#
                    modmails["userPerChannel"][channel.id] = message.author.id;
                                                           ^

TypeError: Cannot set property '905868592518668318' of undefined
    at module.exports (C:\Users\ADMIN\Documents\Hydramc bot\bot\cinebot.zip\events\message\message.js:162:60)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)```

pk sa fait sa svp
keen narwhal
#

faut que tu changes l'id du channel

#

il existe sûrement pas sur ton discord

cyan iron
#

C'est pas ça, c'est juste que son modmails["userPerChannel"] est undefined

#

@hidden cypress

keen narwhal
#

Cannot set property '905868592518668318' of undefined

#

c'est bien l'id d'un channels ça

cyan iron
#

Oui

#

Mais ça veut pas dire que le channel existe pas, au contraire le channel c'est 905868592518668318

keen narwhal
#

je connaissais même pas ce truc modmails

cyan iron
#

c'est un object genre

keen narwhal
#

ahhh oui ok j'pensais c'était un module

#

j'suis bête

sharp grail
#

oui non ça arrive 👀

keen narwhal
keen narwhal
#

@keen narwhal

#

tu connais le JS ?

#

Yes?

#

Oe mais pas trop

#

J'ai utiliser mais sa bug

#

ok bah faut que tu apprennes les bases du js avant de te lancer dans la création d'un bot discord

weak grove
keen narwhal
weak grove
#

J'aimerais récupérer le nombre de message d'une personne sur un discord mais c'est extrement relou..

oak turret
#
iSize = messages.size
#

essaye ça

weak grove
#

exemple sur gca j'ai 1353msg

weak grove
oak turret
#

sinon j'irais tester de mon côté

sharp grail
#

bah le soucis

#

c'est pas que tu es limit à un fetch de 100 msg par channel ?

oak turret
#

si aussi

#

je crois bien

#

donc ça sera faussé fin 100 messages max par channel si je me trompe pas

sharp grail
#

faut tester 🤔

weak grove
#
let iSize;
        client.guilds.cache.get("470897860473389066").channels.cache.forEach(ch => {
            if (ch.type === 'text'){
                iSize = ch.size
            } else {
                return;
            }
        })
        console.log(iSize)

return: undefined

sharp grail
#

bah

#

les channel n'ont pas le type text

#

d'ailleurs

#

use un filter

#

au lieu d'un if

#

c'est GUILD_TEXT je crois

#

et fais un filter

#

avant le foreach

oak turret
#

ah oui aussi, ça a changé ça

sharp grail
#

t'es en v12 ou v13 ?

weak grove
#

v12

desert riverBOT
sharp grail
#

ah

#

attends

#

ah c'est ça alors 🤔

weak grove
#
        let iSize;
        client.guilds.cache.get("470897860473389066").channels.cache.filter(r => r.type == "GUILD_TEXT").forEach(ch => {
                iSize = ch.size
        })
        console.log(iSize)
sharp grail
#

non c'est bien text du coup tu es en v12 my bad là dessus

oak turret
#

non mais t'es en v12 c'est toujours text

sharp grail
#

bah

#

c'est logique en fait

#

mdr x)

#

un channel c'est un object

#

tu vas pas avoir une size dessus

oak turret
#

ah bah non, mais il faisait un get des messages par channel anciennement

sharp grail
#
let iSize;
client.guilds.cache.get("470897860473389066").channels.cache.filter(r => r.type == "text").forEach(async ch => {
  let msgs = await ch.messages.fetch(),
  iSize += msgs.filter(m => m.author.id == 'ton id').size;
})
console.log(iSize);
#

ça ça devrait mieux marcher à mon avis

keen narwhal
#

bonjour

#

ton soucis ainsi que ton code

ashen rapids
#

L'erreur te dit déjà tout 😏

keen narwhal
#

trop un génie toi harold

weak grove
sharp grail
#

yep attends logik

#

je pense qu'il dit qu'il peut pas faire un filter sur une promise

#

et il est pas content

weak grove
#

🤔

sharp grail
#

normalement là ça devrait être bon

weak grove
#

undefined

#

par contre msgs me return bien tout les messages

sharp grail
#

t'as edit ton id ?

weak grove
#

yep

sharp grail
#

étrange

#

attends

#

moi ça marche

#

après bon le soucis

#

c'est que t'es limit à 100 msg

#

le mieux ça serait de faire pour une recherche avec l'outil de discord

#

et je suppose que doit y avoir moyen mais ça doit pas être ouf

quasi mauve
#

j'ai un petit problème

#

c'est marquer sur le tuto quoi je dois marquer node. dans la console sauf que je peux pas écrire dans la console

sharp grail
#

essaye de ctrl + c ?

quasi mauve
#

ok

#

sa me fait rien

sharp grail
#

ah attends

#

tu essayes d'écrire où ?

quasi mauve
#

nul part

sharp grail
#

dans la console de débogage ?

sharp grail
quasi mauve
#

ouais

#

dans la console

sharp grail
#

bah effectivement ici tu ne pourras jamais rien écrire

#

la console c'est le terminal 👀

quasi mauve
#

ha

#

bah j'avais écris la-bas aussi

#

mais rien

sharp grail
#

tu as quoi comme éditeur de code ?

quasi mauve
#

sa me marque que c'est pas reconnu dans les fichier jsp quoi

sharp grail
quasi mauve
#

ah

#

mais le bot se met pas en ligne

#

"node. : Le terme «node.» n'est pas reconnu comme nom d'applet de commande, fonction, fichier
de script ou programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès
existe, vérifiez que le chemin d'accès est correct et réessayez.
Au caractère Ligne:1 : 1"

#

voilà ce que sa me marque

sharp grail
#

tu as installé node ?

quasi mauve
#

oui

#

ah je l'ai pas allumer c'est peut être sa xD

#

toujours pas

oak turret
#

node . ou node tonfichier.js

quasi mauve
#

sa marche pas

oak turret
#

fais un coup de node --version

quasi mauve
#

v17.0.1

oak turret
#

montre ton dossier avec ton bot

quasi mauve
oak turret
#

donc là si dans ton terminal tu fais node index.js ça fait quoi ?

quasi mauve
oak turret
#

montre toute ton erreur

quasi mauve
#

y'en nas pas

idle ice
#

L'erreur est assez claire, il n'a pas spécifié les INTENTS

oak turret
#

c'est une erreur ça

idle ice
#

"CLIENT_MISSING_INTENTS"

oak turret
#

donc comme je disais, c'est une erreur de code

#

pas de la commande

#

^^

quasi mauve
#
const { Client } = require('discord.js')
const config = require('./config.json')

const client = new Client({
    partials: ['GUILD_MEMBER', 'CHANNEL', 'USER', 'REACTION']
})

client.on('ready', () => {
    console.log('Le bot est connecté !')

    client.user.setActivity('Tuto GCA', {
        type: 'STREAMING'
    })
})

client.on('guildMemberAdd', (member) => {
    console.log(`${member.user.tag} a rejoint le discord !`)
})

client.login(config.token)```
idle ice
#

Ton code n'est plus valable pour Discord.JS V13, le voilà ton soucis

oak turret
#
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
idle ice
#

Les Partials ne se déclarent plus ainsi

oak turret
quasi mauve
#

thx

oak turret
#

👌

sharp grail
idle ice
sharp grail
#

Si si

#

Va check la doc mdr

#

Intent != partial

#

Juste que les partials c'est pas utile pour tout et pas pour un "premier" bot

idle ice
#

Sauf que là je te parle bien des intents, sauf que pour rester compréhensible que dans son code c'est encore indiqué partials, j'utilise toujours "partials", sinon ça va finir en "C'est quoi les Intents" ?

#

Comprendo ainsi? xD

sharp grail
#

Ah x)

#

Après c'est ptet pas plus mal d'expliquer ce que sont les intents meme si c'est chiant je te l'accorde

cyan iron
idle ice
#

Il a demandé à faire fonctionner son code, pas à lui expliquer 😉
S'il voulait savoir, il l'aurait demandé à Lartaxx au lieu de lâcher un "thx" avec la solution et fin 😛

sharp grail
#

Je te donne le point x)

cyan iron
#

J'ai pas suivi l'entièreté de la conversation mais les partials et les intents se définissent dans les options du client

sharp grail
#

Mais du coup au final ça aurait quand même été mieux de dire intent car il ne comprenait déjà pas ce qu'était les partials

wraith wren
#

Ou est-ce que je peux apprendre les bases du javascript svp ?

cyan iron
#

C'est pas mal

#

C'est cadeau :)

wraith wren
sharp grail
#

hey

#

petite question concernant les slash commands

#

j'ai vu sur la doc de discord js qu'on pouvait entrer des types de channels où la commande pourrait être exécutée

#

mais on ne peut manifestement pas set cette option dans @discordjs/builders, donc le meilleur moyen de l'ajouter serait de l'add "manuellement" ?

#

ah

#

je viens de voir un truc mdr

#

fin

#

on est pas obligé de passer par ce qui est décrit dans le guide pour les slash commands

#

juste avec l'applicationcommandmanager 🤔

#

ou guildapp

quasi mauve
#

Du coup enft le problème d’hier c’est que comme un con j’avais mis "instal discord.js" (c’est pas exactement sa la commande mais voilà) dans le VScode et pas dans node

#

Je l’ai résolue hier déjà

keen narwhal
#

Bonjour, j'ai une erreur que je n'arrive pas à résoudre pouvez vous m'aidez voici mon erreur :

C:\Users\Administrateur\Desktop\BOT SLMD COMMU\node_modules\discord.js\src\rest\RequestHandler.js:349
      throw new DiscordAPIError(data, res.status, request);
neat lintel
#

envois l'erreur complète stp avec le code

keen narwhal
#

Voici le code :

const Discord = require("discord.js")
const Command = require("../Structure/Command")
const { Module } = require('module');
module.exports = new Command({

    name: "giveway",
    description: "Permet de faire gagner quelque chose",
    utilisation: "utilisation",
    alias: ["giveway"],
    permission: Discord.Permissions.FLAGS.MANAGE_MESSAGES,
    category: "Fun",
    cooldown: 0,

    async run(bot, message, args, db) {
        message.delete()
        const patreonEmbed = new Discord.MessageEmbed()
            .setTitle('🎁・Pour lancer un giveaway :')
            .setColor(bot.color)
            .setURL()
          .setDescription('')
            .addFields(
            { name: '€start #chanel 250s 1 Cadeaux', value: 'Bon giveaway !' },
          )
            .setTimestamp()
        
          message.channel.send(patreonEmbed);
    }
})
#

et l'erreur :

#
C:\Users\Administrateur\Desktop\BOT SLMD COMMU\node_modules\discord.js\src\rest\RequestHandler.js:349
      throw new DiscordAPIError(data, res.status, request);
            ^

DiscordAPIError: Cannot send an empty message
    at RequestHandler.execute (C:\Users\Administrateur\Desktop\BOT SLMD COMMU\node_modules\discord.js\src\rest\RequestHandler.js:349:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async RequestHandler.push (C:\Users\Administrateur\Desktop\BOT SLMD COMMU\node_modules\discord.js\src\rest\RequestHandler.js:50:14)
    at async TextChannel.send (C:\Users\Administrateur\Desktop\BOT SLMD COMMU\node_modules\discord.js\src\structures\interfaces\TextBasedChannel.js:172:15) {
  method: 'post',
  path: '/channels/905075494964318232/messages',
  code: 50006,
  httpStatus: 400,
  requestData: {
    json: {
      content: undefined,
      tts: false,
      nonce: undefined,
      embeds: undefined,
      components: undefined,
      username: undefined,
      avatar_url: undefined,
      allowed_mentions: undefined,
      flags: undefined,
      message_reference: undefined,
      attachments: undefined,
      sticker_ids: undefined
    },
    files: []
  }
}
neat lintel
#

tu utilises djs V13 ou V12 ?

keen narwhal
#

v13

neat lintel
#
- channel.send(embed);
+ channel.send({ embeds: [embed, embed2] });

- channel.send('Hello!', { embed });
+ channel.send({ content: 'Hello!', embeds: [embed, embed2] });

- interaction.reply('Hello!', { ephemeral: true });
+ interaction.reply({ content: 'Hello!', ephemeral: true });
keen narwhal
#

il te dit que tu ne peux pas envoyer une string vide

#

ah bah voilà merci

neat lintel
#

la fonction send a changer en V13

#

tu as le changelog juste au dessus

keen narwhal
#

ha mince

#

donc je change de code ?

#

juste la manière d'envoyer ton embed

neat lintel
#

tu mets un objet a la place

#

comme dans l'exemple au dessus

keen narwhal
#

message.channel.send({ embeds: [patreonEmbed] })

#

comme ça

#

super sa à marcher et dernière question

#

yes ?

#

vous voyer je voudrais placer des bouton en dessous

#

plutôt un seul de bouton

#

genre en mode pour dire qui participe vous s'avez comment faire ?

neat lintel
#

tu ajoutes une key components a la suite de l'embed

keen narwhal
#

des emojis ?

#

ou vraiment des buttons