#javascript-typescript
1 messages · Page 90 of 1
Oui j'y est penser j'ai vue que php le propose aussi ça peut passer à voir si sur symfony ça passer
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é
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
Bonsoir, savez vous comment je pourrais récupérer le nombre de messages total d'un utilisateur sur le guild ?
Ce nombre (par exemple):
@weak grove Salut 👋
Si ça peut t'aider : https://stackoverflow.com/questions/60609287/discord-js-get-a-list-of-all-users-sent-messages
🆙
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
Merci je vais tester
Bonjour est-ce possible de modifier la class d'un élément HTMl grâce à du JS (function déclenchée par un onclick="") ?
oui bien sur
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
Tu mets une id a ta div ça revient au même
Sinon j’ai pas la réponse à ta question x)
Oui mais ça oblige à mettre des id partout, et en plus les ID sont uniques, donc il doit avoir un autre moyen non ?
Faut demander à @slim anvil c'est lui le pro du JS
Bon bah Enzo svp x)
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
Pas tout compris 😅
Hhm ok
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
ah ça après je sais pas ca dépend de ce que tu cherches à faire surtout
Okay merci je vais essayer pour voir
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
Salut @heavy path
ça pourrait t'aider : https://stackoverflow.com/a/47722619
Yep thx j'irais check apré
sa récupère le content des messages qu'il a envoyé mais pour calculer le nombre total ne le fait pas :/
juste un .length ou un .size à la place du content c’est tout hors du forEach du coup ^^
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;
}
})
mais là tu filtre pas pour un utilisateur en particulier
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;
}
})
Salut j'aimerai pouvoir récupérer les message privée de mon bot discord reçu mais avec messageCreate ça ne fait rien
sa me spam
Il faut préciser l'intent quand tu créer ton Client
C'est DIRECT_MESSAGES
hors du forEach
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
ok mais ducoup a la place de "messages" sa serais le guild ?
const msgs = messages.filter(m => m.author.id === 'L'ID QUE TU VEUX')
console.log(msgs.size)
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)
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
Salut, discord.js V13 utilise l'API V9 et depuis la V8 elle n'émet plus l'évent CHANNEL_CEATE pour les DM. Par conséquent si le channel n'est pas dans le cache il ne peux pas fonctionner avec discord.js sans mettre la partial CHANNEL
Je comprends pas le $
c'est avec jQuery
Ce qui signifie ?
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 :
Et rendre ton code bcp plus lourd alors qu’il suffit de faire .classList.toggle()
Et ça revient au même

dans ton head
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
mais du coup sans la library ça donne quoi ?
Seulement celui du button
yes ok tu peux faire ça
const button = document.getElementById('button')
button.addEventListener('click', function() {
this.querySelector('.icon')?.classList?.toggle('maClass')
})
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
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
Oui tu peut faire <button id="button" onclick="mafunction(this)"></button>
nop sa ne fonctionne pas
Ok je crois voir
Mais donc en faisant ça ça va rajouter "maClass" en class au boutton, EN PLUS de la classe icon ?
Non juste à l’icon
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
Sorry je suis dehors je regarde en rentrant
@heavy path t’as pas une erreur console ?
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
donc j'enlève le query selector ?
Oui exactement
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
^
Regarde ici tu auras la réponse
tu as ouvlie@quelque chose
Oublie *
<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
re sorry
Bonjour, j'aurai besoin de quelqu'un pour m'expliquer ce que je veux faire en javascript pour un bot discord svp. Merci beaucoup.
Pose directement ta question ce sera + simple
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 😅
Tu fais un array de tes phrases et tu utilises le module math.random
c'est une variable pour que le bouton marche et pour afficher et pour faire disparaître un menu
pas tout compris dsl
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)
pas besoin de ça du coup si tu utilises toggle tu as pas besoin
Regarde sur internet la fonction math pour js et à côté tu fais un tableau [] avec tes phrases
il enlève et ajoute quand il faut
j'ai le code ^pour ceux qui veut
ok merci
oe mais comme jsais pas utiliser et que ça ça marche..
Ouais mais tu apprendras pas en restant dans ta zone de confort
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 ?
C'est vrai mais j'ai pas compris concrétement à quoi il servait x)
Ouais tu vois tu fais sans comprendre t’apprendras pas
Je pense que dans mon code y a beaucoup de choses peu optimisées parce que je débute
Essaye ton comprendre ton code tu verras ça glissera tout seul après
Totalement normal
T’inquiète pas
Non justement je le fais pas, je fais pas des trucs que je comprends pas, c'est pour ça que mon code est très simple de compréhension, mais très peu optimisé là
Essaye de comprendre ton code alors
Bah je l'ai compris là x)
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
Yap
et sinon par rapport à ça ?
Renseigne toi sur Google j’ai pas la réponse
Mais tu devrais pouvoir le faire depuis le css
Ok 8
C'est à dire ?
mettre la class de ta div que tu crée dans ton css
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é
parfait
salut, une idée ?
ch.messages.size
ou .length
oui mais vu que c'est dans une forEach sa me spam
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
undefined
.length dans ce cas
pareil
ça te return quoi ch.messages ?
genre... quand je fait "npm i discord.js" sa me dis "Sorry, name can only contain URL-friendly characters."
help 👍
undefined
oh non
sa me return les info du guild (name, logo etc)
ok pas ici que je trouverait de l'aide
svp quoi !!
🤦
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 ?
tu peux t'aider en illustrant avec des situations de la vie quotidienne
let soleil = true;
if (soleil == true) {
console.log("Aujourd'hui il fait beau")
} else {
console.log("Aujourd'hui il fait moche")
}
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
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 😗
Redis c'est trop bien
ui je viens de découvrir mais bon j'aurai utiliser 20% du truc donc flemme de me casser la tête pour ça
Oui c'est ça, redis pour stocker / récupérer de la petite données rapidement, généralement temporaire
Bonjour, petit problème en suivant le tuto dispo sur le site https://g-ca.fr/tutoriels/tutoriel/creer-un-bot-discord-le-code
hey !
le tuto sur g-ca ne fonctionne plus pour la version v13 de discord.js
il est vieux
d'accord, merci je vais me renseigner ailleurs ducoup
je te remercie

C’est précisé v12.5.1, éventuellement je l’updaterai pour qu’il soit adapté aux nouvelles majs
ça serait cool 🙂
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
Donc
D'après ma console, quand je ferme mon menu j'ai l'impression que ça inverse les données
Ils restent déroulés parceque rien n'indique qu'il faut fermer les sous menu quand on ferme le menu dans ton code
bah si dans la première fonction je change aussi la valeur de display
enfin jsp ça marche pas comme ça ?
les changements opérés dans une fonction ne s'appliquent pas dans une autre fonction ?
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 !
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
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
Ah ok
Donc en théorie il faudrait que
J'appelle la fonction dans l'autre fonction ?
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
<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
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
Encore une fois c'est complicado 😂😅
On fait pas d'omelette sans casser des oeufs mon gars
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)
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 ?
Oui
Ok
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
index d'itération ?
L'indice de l'élément du tableau en cours de traitement.
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 ?
Quand tu dis script de verif, c'est quoi ?
Dans le même fichier JS, t'as juste à récupérer tes inputs en fonction de la class / ID
Les vérifications d’un formulaire
Mais ca n’interfère pas sur les deux boutons lors du submit ?
Non, t'as juste faire 2 fonctions différentes
(comment on met au propre un bout de code sur le Discord ?), je veux montrer un petit truc ? ^^
ah mince..
```language
TON CODE
```
mincee je sais pas comment on faire un retour à la ligne xD
SHIFT+ENTREE
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"
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 ?
Salut, ouais cela semble bon, maintenant à toi de voir si t'a des erreurs dans ta console quand tu fais node tonfichier.js
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
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
je met npm i discord ?
simplement npm i
normalement ça va installer tes dépendances
si ça fonctionne toujours pas fait npm i -s discord.js
sa marche tjr pas :/
No debugger available, can not send 'variables'
Process exited with code 1
ben ça te sort quoi
code: 'MODULE_NOT_FOUND',
requireStack: [
'C:\Users\^^\Downloads\Bot Kageyama\commands\ping.js',
'C:\Users\^^\Downloads\Bot Kageyama\index.js'
]
}
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
ah tu en as pas ?
supprime le package.json aussi
fait npm init -y
ensuite npm i -s discord.js
et ensuite réessaie node .
voila
bah le bot n'est toujours pas en ligne
envoie le debut du fichier du ping.js stp
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);
}
})();
bon ben fait npm i -s @discordjs/rest
voila
je me permets par contre mais oulah ça marchera pas ton truc là
tu met quoi ?
Object.<anonymous>
tu sais faire un screen ou pas
oe
ça serait plus pratique stp
t'as suivi le guide de discordjs ?
no
ah
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
effectivement
tu a raison
donc je fais quoi dcp ?
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/
Discord.js is a powerful node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend.
rien que décrire même en mots clés ton problème en anglais pour avoir + de résultats suffit largement ^^
je vais tous regarder
tu peux essayer de suivre le guide de discord js pour concevoir ton bot par exemple, il est là pour ça 👀
okay merciii
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é !
Bah en fait
Comment ca envoyer un message avec un bouton ?
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
Une interaction sur un message. Ici, des boutons
Oue je me disais bien
la seule façon serait de stocker le msg dans une db, et si le bot reboot modifier le msg
On parle bien des gros boutons qui ressemble à des réactions hn ?
yep
yes, après c'est globalement assez galère mdr
et useless au final, il pourrait juste retaper la cmd 🤔
Bah pas forcément ?
Je stocke l'ID
Je fetch le message à chaque reboot
J'edite le message en rajoutant les boutons
Oue mais dans une situation, j'ai besoin que les boutons restent pendant une certaine période, genre 1h - 2h
Et arrive que le bot restart pendant
event interaction create ?
ça marchera mieux qu'un collector
ah ouais
C'est quoi la diff ?
bah concrètement
l'event interactioncreate c'est pour toute les interactions que ton bot reçoit
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
Peut être que interactionCreate ça marche aussi quand tu reboot le bot ?
mais durée liité
Faudrait que je fasse des tests
bah tu n'as pas besoin de créer un collector
recréer*
Oue je vois
ce qui me semble plus pratique
Faut que je regarde si c'est pas top chiant niveau vérif
un peu, mais en soit c'est ptet mieux qu'un collector temporaire 🤔
Oue je vais voir
dacc 👀
Merci !
👋 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
)
Montre ce que t'as déjà fait ? 😁
Bouge pas, je lance mon projet (sur mon petit pc de boulot en sueur 🥵)
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
)
yo Romarin, ton effet d'active est sur chaque élément ? ou c'est un seul élément qui slide entre chaque élément
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é
En gros, j'ai mon effet active qui retire la barre en dessous
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
Ok, bouge pas je fait ça 👍
sorry enlève les : devant to, habitude sur un autre framework
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 ?
Je vois, je vois!
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
Tu as un isActive mais genre très chelou a use
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
}}
Écoute, je vais essayer déjà ce que tu ma conseiller, je te tiens au jus!
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é
Je pense que c'est mieux que ma manière overkill de faire 
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
Ouais mais si je fout mes [] dans mon NavLink ça ma niquer l'effet que je veux je pense 🤔
Après tout est rattrapable
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
True
En gros si j'ai bien compris:
- Je fout mes [] dans mes NavLink.
- Je joue avec le activeClassName pour enlever la barre en dessous de mon active
- avec mon isActive j'active les []
- Je dance et je bois un café
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
Alors là j'ai pas compris 😕
A quoi sert le if (math) return true ?
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
Ah! x)
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
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
)
En soit je vois pas pourquoi le isActive casse le activeClassName, mais pour autant ne casse pas le className 🤷♂️
alors est-ce que tu récupères bien une value a afficher via ton isActive ?
Mon isActive pour le moment resemble à mon cerveau c'est à dire: LE VIDE
Je récup bien le path par contre
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 🙂
Bonne promenade du dog!
Coucou,
Le booléen defaultPermissions pour les slash Commands sert à quoi concrètement ?
Si tu mets à true, la commande se par défaut inaccessible à tout le monde
Merci caly :)
fais un if (match) return true pour voir
Mon cerveau fume, t'es magicien? 🤔
Ç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)
Car tu return rien, c'est ce isActive qui trigger le activeClassName ;D
Okay essaye juste de voir si tu peux faire un {{ isActive }} dans ton navLink stp
voir si il le return ou pas
{{ isActive }} dans ton <navLink>
Like that? 🤔
Y'a une erreurs donc je pense avoir fait une daube?
ah mais tu as enlevé le isActive de tes props ? laisse-le
Toujours une erreur même si je le laisse dans les props
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
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?
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
Et comment je peux get mes [] depuis mon isActive 🤔
en gros tu viens déclarer
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
const [activeItem, setActiveItem] = useState(0)
////
et dans ton isActive tu auras
if (match) {
setActiveItem(i)
return true
}
Et du coup, je parie que activeItem === []
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
Mais vu que actuellement j'ai pas de boucle, chui baised?
Ou c'est complètement différent?
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
enzo toi tu sais le faire ?
dequoi pardon
quand j'essai de le mettre en ligne le terminal me met cela ReferenceError: CLIENT_ID is not defined
const { token } = require('./config.json');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
client.once('ready', () => {
console.log('Ready!');
});
client.login(token);
Bon alors attend, revenons au base en gros: J'ai mon tableau avec mes routes comme tu ma dit tout à l'heure
essaye de rajouter : const client = new Discord.Client();
ah nan att t'as tes intents
ton erreur vient d'un autre fichier 🤔
ouais j'pense aussi
Ezatement
parce que là y a pas de raison que sa marche pas
mon config json ?
tu as quoi comme fichier relier à ton bot
regarde ton erreur
là c'est que la première partie
normalement avec tu as l'endroit où est l'erreur
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>
})
il n'y a pas de point ou l'on me marque l'erreur c'est etrange
envoie toute ton erreur
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);
Oui
Mais du coup si je boucle, ça va aussi boucler mes nav-empty non? 🤔
Ok.
envoie ton ping.js
Bouge pas je t'explique x)
et surtout met ton bot dans un dossier spécifique pas dans les downloads
je l'ai sup
Alors tu montres pas tout ton index là
ah ok
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);
}
})();```
enregistre
tu as copier coller ce bout de code ?
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"
oui
je pense que oui
faut être sur si c'est toi qui l'a écrit de 0
envoie le dossier racine de ton bot j'ai l'impression que tu l'as mis au mauvaise endroit
bah je suis débutant donc je ne peut pas te confirmé :/
ok donc recommence ton bot parce que à ton niveau c'est inutile de faire tout ça tu vas rien comprendre
d'accord
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
ma racine c'est un dossier
oui je sais mais tu dois le mettre ailleurs que dans tes téléchargements
disque local c ?
tu as que celui là ?
oui
ok bah mets le là dedans oui
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
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...
ce youtubeur je trouve que c'est vidéo sont assez complète
okay merci !!
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
Bonjour quelqu'un maitrise un peu le framework phaser ?
j'ai fait une mauvaise config pour node js comment on peut le reprogrammer
Comment ça, une mauvaise config ?
bah il y avait un truc a cocher mais je l'ai pas fait
Avec plus de détails, ça sera encore mieux !
les tools
Y a rien a cocher normalement je comprends pas
dans la vidéo il coche mais pas grave
hello quelqu'un sais comment mettre des icônes sous ce format ?
Ouais c'est du svg déstructuré, les deux premiers arguments c'est la viewbox, le troisième je sais pas et le reste c'est la liste des paths
Ok ok mercii !! dcp les deux premiers arguments en viewbox je dois mettre se qui y'a marquer ici ?
53.308 ?
Non
C'est un objet JavaScript que tu as dans ton fichier pas du xml
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
C'est qu'elle pas correctement set
Fais un env et montre nous tes variables
Tu es sous Docker ?
euh jsp ce que s'est
non s'est .env
Mais tu es sous Windows ?
oui
Ha ok j'avais pas vu que tu utilisais dotenv sorry
Ton fichier .env est dans quel dossier ?
Il faut qu'il soit au même endroit que ton package.json
donc je mets package.json dedans ?
Non
Tu touches pas au package.json
Tu mets juste ton .env dans ton root directory
faut que je sorte .env du fichier src donc ?
Ouii
ok merci
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:
Non seulement ton fichier env
ok ok d'accord
Tu touches à rien d'autre
Ah ça marche maintenant merci beaucoup
Parfait !
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
CTRL + C
Revenir à l'endroit ?
jsp si c'est clair
T'es sûr VScode ?
non sur mon terminal de commande
ça met fin à ton processus et tu peux à nouveau taper des commandes
C'est CTRL + C dans ton terminal
ah merci @cyan iron
Haaaa exact
De rien :)
qu'est ce que je ferais sans vous
Rien 
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 ?
logiquement oui
🙂
@keen narwhalça peux faire chier les api ?
si tu spam oui
de rien !
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
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
En copier coller stp
c'est trop long
T’as version de node est en 16 pas 17 c’est pour ça
Mets à jour tes packages
comment?
Tes packages sont pas à jour
comment je les mes à jour ?
npm rebuild ou npm install
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}**)
}
}
Il est où ton banMember.ban() ?
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()"
Tu devrais laisser le code de base si tu t’y connais pas
Je vois où c’est censé ban le mec mais normalement ça devrait être banMember.ban({ reason })
ou es que je dois changer cela ?
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
bas le probleme ses qu'il a arreter le dev et il sais pas nn plus
Essaye dans ton try à la place de message.channel.ban de mettre banMember.ban({ reason })
@hidden cypress quand tu partages un code, met dans un code block ( entre ```js ```)
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
comment sa ?
Tu fais
```js
Ton code
```
okk
console.log('ton code est comme ça du coup')
Tu définis le channel grâce à l’id et après tu précise à ton code qu’il envoie ton message dans ce channel grâce à ta variable
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
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}**`)
}
}
Je vérifie un truc
genre sa
comme avec dyno
je trouve pas le message.channel.ban
client.channels.cache.get('CHANNEL ID').send('Hello here!')
ah merci
message.guild.members.ban(banMember)
?
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
Oui
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
sa marche tjr pas
ça marche toujours pas pour moi aussi x)
T’as relancer ton bot ?
ah nodemon a crash sur mon terminal
Refais là de zéro en t’aidant d’un tuto alors parce que là je vois pas
le client login il est obligatoire non ?
Pourquoi je devrais l'enlever
sa fait tjr le meme trucs alors que jai rl mon bot
Tu dois préciser quelqu’un à ban
Envoie l’erreur
l'erreur nodemon ?
Oui
Toute l’erreur
orb ses pas l'erreur sa
par exemple sur visual studio code les erreur sont ici
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
je crois que les [] sont en trop
mais deja ton code est sencer faire quoi ?
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
L’id channel que tu as mis n’existe pas
mais j'la trouve nulpart l'id
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é
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
Ça dépend un peu de ton besoin en vrai
Il me faut un truc ou je peux stocker sans avoir de soucis
MongoDB
Sur mon bot, j'ai choisi MongoDB
Car je voulais un truc que je savais utiliser et pouvoir dev rapidement
Elle est géniale comme BDD
SQL c'est pas mal, car ultra structuré. Mais naturellement, ça prends plus de temps à mettre en place
Il y a beaucoup de tuto sur YouTube pour la relier à des bots discord en plus
Si ça reste de la petite données, tu peux partir sur du SQlite
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 ?
Vous désirez apprendre à coder un bot Discord sans aucune connaissance ? Dans cette vidéo, nous allons simplement voir comment créer un cluster sur mongoDB atlas! Visionnez notre vidéo pour en savoir plus!
mongoDB atlas: https://www.mongodb.com/cloud/atlas
Discordjs: https://discord.js.org/#/
[28/??] Comment créer un cluster su...
➜ 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.
Uah, c'est tellement pratique x)
L'avantage de MongoDB c'est que tu peux sortir un truc hyper rapidement
Oops, pardon ! J'ai coupé une conversation avec mon test 😶
Non t'inquiète ya aucun soucis 😂
:D
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."
tu as pas mis tes intents dans le new discord client
const bot = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION']});
ça supprime le
sa sert à rien
bah du moins tu utilises une déclaration de client qui dates de la v12
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
C'est pas ça, c'est juste que son modmails["userPerChannel"] est undefined
@hidden cypress
Cannot set property '905868592518668318' of undefined
c'est bien l'id d'un channels ça
Oui
Mais ça veut pas dire que le channel existe pas, au contraire le channel c'est 905868592518668318
je connaissais même pas ce truc modmails
c'est un object genre
oui non ça arrive 👀

@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
Hello une idée ducoup pour mon problème ?
c'était quoi ton problème ?
J'aimerais récupérer le nombre de message d'une personne sur un discord mais c'est extrement relou..
ok j'essaye ça
sinon j'irais tester de mon côté
si aussi
je crois bien
donc ça sera faussé fin 100 messages max par channel si je me trompe pas
faut tester 🤔
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
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
ah oui aussi, ça a changé ça
t'es en v12 ou v13 ?
v12
:_: ChannelType
All available channel types: (more...)
let iSize;
client.guilds.cache.get("470897860473389066").channels.cache.filter(r => r.type == "GUILD_TEXT").forEach(ch => {
iSize = ch.size
})
console.log(iSize)
non c'est bien text du coup tu es en v12 my bad là dessus
non mais t'es en v12 c'est toujours text
bah
c'est logique en fait
mdr x)
un channel c'est un object
tu vas pas avoir une size dessus
ah bah non, mais il faisait un get des messages par channel anciennement
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
trop un génie toi 
iSize += await ch.messages.fetch().filter(m => m.author.id == '283315291986067457').size;
^
TypeError: ch.messages.fetch(...).filter is not a function
yep attends logik
je pense qu'il dit qu'il peut pas faire un filter sur une promise
et il est pas content
🤔
normalement là ça devrait être bon
t'as edit ton id ?
yep
é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
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
essaye de ctrl + c ?
nul part
dans la console de débogage ?
alors x)
bah effectivement ici tu ne pourras jamais rien écrire
la console c'est le terminal 👀
tu as quoi comme éditeur de code ?
sa me marque que c'est pas reconnu dans les fichier jsp quoi
ah bah ça marche alors x)
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
tu as installé node ?
node . ou node tonfichier.js
sa marche pas
fais un coup de node --version
v17.0.1
montre ton dossier avec ton bot
donc là si dans ton terminal tu fais node index.js ça fait quoi ?
montre toute ton erreur
y'en nas pas
L'erreur est assez claire, il n'a pas spécifié les INTENTS
c'est une erreur ça
"CLIENT_MISSING_INTENTS"
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)```
Ton code n'est plus valable pour Discord.JS V13, le voilà ton soucis
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
Les Partials ne se déclarent plus ainsi
thx
👌
Si toujours 🤔
Non, plus depuis Discord JS V13, la preuve, ça a été donné par Lartax 😉
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
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
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
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 😛
Je te donne le point x)
J'ai pas suivi l'entièreté de la conversation mais les partials et les intents se définissent dans les options du client
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
Yep
Ou est-ce que je peux apprendre les bases du javascript svp ?
Sur openclassroom
C'est pas mal
C'est cadeau :)
niquel merci beaucoup :D
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
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à
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);
envois l'erreur complète stp avec le code
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: []
}
}
tu utilises djs V13 ou V12 ?
v13
- 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 });
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 ?
tu ajoutes une key components a la suite de l'embed
