#javascript-typescript
1 messages · Page 82 of 1
full pas que au début mdrrrrrrr
Ah ouais ? Apparement les gens apprécient très souvent quand ils testent et je crois qu'au StateOfJS il était genre à 97% de satisfaction
cc sur ma commande help quand je fais .help j'ai cette erreur ``` if (!value) throw new RangeError('EMBED_FIELD_VALUE');
^
RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values may not be empty.
at Function.normalizeField (D:\Dafaba\CODAGE\hpbot\node_modules\discord.js\src\structures\MessageEmbed.js:432:23)
at D:\Dafaba\CODAGE\hpbot\node_modules\discord.js\src\structures\MessageEmbed.js:452:14
at Array.map (<anonymous>)
at Function.normalizeFields (D:\Dafaba\CODAGE\hpbot\node_modules\discord.js\src\structures\MessageEmbed.js:451:8)
at MessageEmbed.addFields (D:\Dafaba\CODAGE\hpbot\node_modules\discord.js\src\structures\MessageEmbed.js:266:42)
at MessageEmbed.addField (D:\Dafaba\CODAGE\hpbot\node_modules\discord.js\src\structures\MessageEmbed.js:257:17)
at Object.module.exports.run (D:\Dafaba\CODAGE\hpbot\commands\📍・Utile\help.js:16:19)
at Client.<anonymous> (D:\Dafaba\CODAGE\hpbot\index.js:44:13)
at Client.emit (events.js:315:20)
at MessageCreateAction.handle (D:\Dafaba\CODAGE\hpbot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14) {
[Symbol(code)]: 'EMBED_FIELD_VALUE'``` j'ai lu sur internet que ct soit que un de mes sous dossiers de commandes etait vide ou que un des mes category: sur le module.exports.help de mes commandes etait vide. pourtant ce n'est pas le cas.
code du help ```const { MessageEmbed } = require('discord.js')
const config = require('../../config.json')
const { readdirSync } = require('fs')
const categoryList = readdirSync('./commands');
module.exports.run = (client, message, args) => {
if (!args.length) {
const embed = new MessageEmbed()
.setColor('#42ecf5')
.addField('Liste des commandes', Une liste de toutes les sous-catégories disponibles et leurs commmandes.\nPour plus d'informations tapez ${config.prefix}help <command_name>)
for (const category of categoryList) {
embed.addField(
`${category}`,
`${client.commands.filter(cat => cat.help.category === category.toLocaleLowerCase()).map(cmd => cmd.help.name).join(', ')}`
);
};
}
};
module.exports.help = {
name: 'help',
description: 'Affiche le menu d'aide.',
aliases: ['h', 'aled'],
category: '📍・Utile',
usage: '<command_name>',
args: false
}
après le problème c’est pas ça
ah ui 😅
ta un field ou ta rien mis en valeur
je pense c’est ton trux avec le .filter la, log le
`${bot.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ')}`
A la place de ta ligne 🙂
@keen narwhal
ok merci
plutot client.commands *
et j'ai toujours l'erreur 🙂
Fais ce qu'à dit Bob, log le afin de voir si tu n'as pas une valeur où il y a rien. Car l'erreur c'est que tu as une ligne de ton embed qui est vide
je mets console.log(filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ')) ?
non
nop
quoi ?
console.log(client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', '))
(Voilà, Bob est plus rapide que moi xD)
xD
Et tu regardes si tu n'as pas une valeur qui est nul
quand je lance le bot j'ai rien dans la console
C'est quand tu fais ta commande help du coup 😅
Tu l'as mis où ce console.log
embed.addField(
`${category}`,
`${client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ')}`
);
console.log(client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', '))
};```
bah oui bah nn
où ça ?
Fais ça :
for (const category of categoryList) {
console.log(client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', '))
/*embed.addField(
`${category}`,
`${client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ')}`
);*/
};
rien dans la console
for (const category of categoryList) {
return console.log(client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', '))
/*embed.addField(
`${category}`,
`${client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ')}`
);*/
};
Il me semble
Np
Voir même :
console.log(client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', '))
/*for (const category of categoryList) {
embed.addField(
`${category}`,
`${client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ')}`
);
};*/
Clique sur [📝](#javascript-typescript message) pour accéder au message
Fais ça :
for (const category of categoryList) {
console.log(client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', '))
/*embed.addField(
`${category}`,
`${client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ')}`
);*/
};
```
Ah normal, j'utilise l'embed 😂
ça te sort quoi le miens @keen narwhal
J'ai modifié
j'ai rien dans la console avec le tien
Si ça ne fonctionne pas, je t'invite à aller checker ce qu'est categoryList ou alors à regarder si il n'y a rien qui "obstruerai" la continuité du code
A++ 😉
for (const category of categoryList) {
return console.log(client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', '))
/*embed.addField(
`${category}`,
`${client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ')}`
);*/
};
Essaye comme ça 🤔
Non ce n'est pas un problème de doc mais de JS
ah ok
C'est un problème au niveau de ton code JS
toujours pas tien dans la console
je vais sur la doc mozilla ?
Comme ceci
Tu as fais ta commande trop vite 🙂
Le bot étais pas encore allumé donc tu n'as pas de message de log
@keen narwhal
ok
Et il est ou ton message de log vide 🤔
?
comment on resout l'erreur ?
Tu as quoi comme erreur ?
Ton truc est vide
Félicitations @keen narwhal !! 👏
J'ai pas lu ton problème mais je vais voir là
C'est toujours la même erreur ou ?
L'erreur de départ était de trouver ce qui était vide et tu as donc trouvé. Tu sais maintenant que client.commands.filter(cat => cat.help.category === category.toLowerCase()).map(cmd => cmd.help.name).join(', ') est vide et donc que c'est pour ça que ça te faisait l'erreur
👏
et donc comment je pourrais resoudre ?
ui
Ah ça maintenant faut rentrer plus en détail dans ton problème en étudiant les variables que tu utilises etc...
ok
Je sens que category a un problème mental je sais pas pourquoi
Sûrement dans ton message.js 🙂
En fait
Car c'est ici que tu définis les commandes
si
Et que du coup c'est normal que ça soit vide
j'ai verifie toutes les cmds en ont un
fait du coup stp
Tu as quoi dans ton message.js ? @keen narwhal
Et remplace mon truc par return console.log(category)
j'ai ⛏・Moderation dans ma console
fait
wtf
🤔
Pourquoi tu met un émoji
bah c'est une category nan
pas fou du coup
c le nom de mon dossier
ui c pour le help
ui
En gros CategoryList contient que Modération là
ui
Dans son message.js nan ?
Regarde dans ton message.js
console.log(client.commands.filter(cat => cat.help.category.toLowerCase() === category.toLowerCase()).map(cmd => cmd.help.name).join(', '))
Déjà fais sa 🙂
Mais même
donc c'est vide
Dans son message.js aussi
même du coup c'est vide c'est tout
Il doit modifié
-__-
if(message.author.bot || !message.content.startsWith(config.prefix) || message.type !== 'DEFAULT') return;
const args = message.content.slice(config.prefix.length).split(/ +/);
const commandName = args.shift().toLowerCase();
const command = client.commands.get(commandName) || client.commands.find(cmd => cmd.help.aliases && cmd.help.aliases.includes(commandName));
if (!command) return;
if (command.help.args && !args.length) {
let noArgsReply = `Il faut des arguments pour cette commande, ${message.author} ! `;
if (command.help.usage) noArgsReply += `\nVoici comment utiliser la commande: \`${config.prefix}${command.help.name} ${command.help.usage}\` *Note: Les <> sont des arguments obligatoires. Les [] sont des arguments optionnels`
return message.channel.send(noArgsReply);
}
command.run(client, message, args);
});```
voila l'event message
Nan, c'est good enfaite
T'as essayé ce que je t'ai dit @keen narwhal
non att
Bah alors 
gg
j'ai ça dans la console ban, clear, kick, mute, tempmute, unban, unmute help, ping dice
@cyan iron
C'est good ducoups ?
-_-
att j'essaye
et autre chose qui n'a pas de rapport avec le js mais plutot avec vsc, comment on relance le bot quand on ets là ?
car je peux pas taper node index
CTRL + C
ctrl+c
merci
merci
Dr
nan mais moi je supprimais le termina et j'en recréeais un 
AH
mdr zebi
Bonjour ! 🙂 je voulais s'avoir comment faire en sorte que ma commande "rapel" fonctionne même quand mon bot redémarre
hello, si ton bot redémarre il prendra pas en compte les commandes que tu mets, donc à moins que je zappe quelque chose c'est pas possible
Pourtant j'ai vue des bots avoir ça ....
un sytème de rapel
donc jsp comment ils ont fait
un système de rappel ?
ouiii 🙂
explique toi
je vois pas ce que tu veux dire par "système de rappel" ?
rappeler quoi ?
bah en gros : je dis exemple dans 1 heures un message m'ai envoyer en ping pour ( je dois allez prendre un café)
mais entre temps
le bot redémare
bah ça plante tous ..
donc comment faire si le bot redémarre et que le système de rappelle s'effectue
bah de ce point de vu là c'est logique
tu dois le stocker ce truc là du coup
et du coup si le bot redémarre, bah quand il est de nouveau ON il re-check et remets son programme en marche
donc tu le stockes en db, ou dans un fichier puis tu check avec fs, tu peux le faire de plusieurs manières
Okey merci ^^'
réglé ?
Ah ouais, tes en retard 🤔
Mdr
Des fois c’est à se demander si c’est mieux xD
Salut a tous
J'aurais besoin de votre aide pour un Bot Discord que je re développe
J'utilise la base du bot open source Alcatraz et j'en modifie les design et j'en ajoute les fonctionnalité comme un système de Tickets en utilisant les Buttons de discord
Je n'arrive pas a localiser le fichier qui utilise les emojis dans le Help.js
Avec les balises, sa aurait été mieux 😅
Pardon ^^
Il utilise comme source un emojis.json
Mais quand je le modifie rien n'a faire les modification reste dans le .json mais en tapant la commande *help les emojis ne ce sont pas update
Car tu as pas sauvegarder
Si si
Ou sois, tu n'as pas restart le bot
Les 2 sont fait ^^
Screen ton émojis.json
Pour le reste les emojis je ne les ai pas changer car cela ne sert a rien pour l'instant vue que quand je les change cela ne change rien
Voila aussi le résulat du Help
Bizarre 🤔
Je commence a perdre espoir 😦
Je viens demander de l'aide pour avancer et ne pas rester bloquer
Tu as essayés de mettre directement lemojis dans le code ?
const emojiMap = {
[INFO]: ${emojis.info} ${capitalize(INFO)},
[FUN]: ${emojis.fun} ${capitalize(FUN)},
[COLOR]: ${emojis.couleur} ${capitalize(COLOR)},
[POINTS]: ${emojis.points} ${capitalize(POINTS)},
[NFSW]: ${emojis.nsfw} ${capitalize(NFSW)},
[GENERAL]: ${emojis.general} ${capitalize(GENERAL)},
[MOD]: ${emojis.moderation} ${capitalize(MOD)},
[ADMIN]: ${emojis.admin} ${capitalize(ADMIN)},
[OWNER]: ${emojis.owner} ${capitalize(OWNER)}
};
Je les avais mis ici
C'est toi qui a fais ça ?
Si tu ne comprends pas le code, c'est compliqué
Et met lemojis pour INFO à la place de ${emojis.info}
Ok je laisse le ${capitalize(INFO)} ?
Oui
Oui
?
Ta solution a marcher c'est juste une erreur de ma part
Mauvais chemin j'ai modif le help de la repo github mais pas celui du bot
Et ducoups, le .json juste pour save un émojis que tu utilises une fois, c'est inutile
Et oui 😁
C'est ta variable size
dans l'embed ?
total et size
const total = Object.values(commands).reduce((a, b) => a + b.length, 0) - commands[OWNER].length;
const size = message.client.commands.size - commands[OWNER].length;
Celle la ?
0k0 y'a moyen que tu m'envoies le lien de l'Open Source s'il te plaît ^^ ?
Yes
Okay x)
Merci les BG
Il est pas mal
Malgrès les nombreux bug que j'ai du résoudre
Je vais regarder pour peut être l'améliorer
Ha oui ?
Il peu servir de bonne base
@dire latch Je retire juste les 2 const ?
for (const type of Object.values(message.client.types)) {
if (type === OWNER && !message.client.isOwner(message.member)) continue;
if (commands[type][0])
embed.addField(`**${emojiMap[type]} [${commands[type].length}]**`, commands[type].join(' '));
}
Je pensais plutot a l'embed.addField en bas
Yep ya celui la aussi
Je retire le if ou le embed.addField
[$commands[type].length}]
Ah ba nickel
Merci beaucoup ^^
Dr
Yep
Dit moi
J'apprend a utiliser discord-buttons
Mes commande s'éxecute bien mais rien ne ce passe
Erreur ?
if (message.content.startsWith(prefix + 'click')) {
message.delete(message.author);
let button = new MessageButton()
.setStyle('url')
.setURL('https://npmjs.com/discord-buttons')
.setLabel('My First URL Button!');
message.channel.send('Hey, i am powered by https://npmjs.com/discord-buttons', button);
et quand je met +click ça envoie bien mon message mais les buttons ne s'affiche pas
Ton fichier index.js ?
c'est ça
Tu as sûrement oublier de mettre ceci
c'est un bot secondaire
OK
const disbut = require('discord-buttons'); disbut(client);
Tu as mis ceci tout en haut ?
Tu as bien mis dans ton code ?
const disbut = require("discord-buttons");
const { MessageButton } = require('discord-buttons');
J'avais déjà c'est 2 la
Et j'ai rajouter le tien après
Ensuite j'ai redem le bot
et puis j'ai tester
Il fait déclarer qu'une fois discord-buttons pour commencer
Ok mais je laisse le quel ^^
Oki
Puis tu met disbut.MessageButton()
ReferenceError: MessageButton is not defined at Client.<anonymous> (D:\Téléchargements\discord-button-main\index.js:82:16) at Client.emit (node:events:369:20) at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14) at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32) at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31) at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22) at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10) at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16) at WebSocket.emit (node:events:369:20) at Receiver.receiverOnMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\websocket.js:970:20) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! Mystic@1.0.0 start: node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the Mystic@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Utilisateur\AppData\Roaming\npm-cache_logs\2021-07-25T00_33_16_059Z-debug.log`
A la place de MessageButton()
Oui c'est ce que je viens de te dire 😅
D'où ton erreur
Pg tkt
Le pire c'est que je me débrouille en sois plutot bien
Mais la j'ai l'impression de te demander la lune
Mdr
Hmm
Toujours pas
if (message.content.startsWith(prefix + 'click')) {
message.delete(message.author);
let button = new disbut.MessageButton()
.setStyle('url')
.setURL('https://npmjs.com/discord-buttons')
.setLabel('My First URL Button!'); ```
pas obligé de faire ça sinon je crois
Essaye de remplacé par ça
let btn = new disbut.MessageButton()
.setLabel(' ')
.setID('id')
.setStyle('blurple')
.setDisabled();
let group1 = new disbut.MessageActionRow().addComponent(btn);
let group2 = new disbut.MessageActionRow().addComponent(select);
message.channel.send('hi', { components: [group1, group2] });
Au moins t'es sur que sa fonctionne, sa vient de la doc
const { MessageButton } = require("discord-buttons")
const button = new MessageButton()
etc
oublie pas d’add le compenent avec un MessageActionRow sinon ça ne marchera pas
Je l'ajoute ou ?
let btn = new disbut.MessageButton()
.setLabel(' ')
.setID('id')
.setStyle('blurple')
.setDisabled();
let group1 = new disbut.MessageActionRow().addComponent(btn);
let group2 = new disbut.MessageActionRow().addComponent(select);
message.channel.send('hi', { components: [group1, group2] });
Marche pas ça ^^
Sa a fonctionné
en lui même
oui merci
ReferenceError: select is not defined
at Client.<anonymous> (D:\Téléchargements\discord-button-main\index.js:90:58)
at Client.emit (node:events:369:20)
at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (node:events:369:20)
at Receiver.receiverOnMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\websocket.js:970:20)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! Mystic@1.0.0 start: `node index.js`
npm ERR! Exit status 1
Le code que je t'ai donné ne fonctionne pas ?
Ah enlève le group2
Yep
ReferenceError: select is not defined
at Client.<anonymous> (D:\Téléchargements\discord-button-main\index.js:90:58)
at Client.emit (node:events:369:20)
at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (node:events:369:20)
at Receiver.receiverOnMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\websocket.js:970:20)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! Mystic@1.0.0 start: `node index.js`
npm ERR! Exit status 1
Erreur
Il ne trouve pas le group select
Tu as pas enlevé group2
Si si
Dans ton message.channel.send aussi tu dois l'enlever
message.channel.send('hi', { components: [group1] });
Tu as aussi enlevé le let group2 ?
Ah ba bravo
Mais marche pas
const disbut = require('discord-buttons'); disbut(client);
if (message.content.startsWith(prefix + 'click')) {
message.delete(message.author);
let btn2 = new disbut.MessageButton()
.setLabel(' ')
.setID('id')
.setStyle('blurple')
.setDisabled();
let group1 = new disbut.MessageActionRow().addComponent(btn2);
let group2 = new disbut.MessageActionRow().addComponent(select);
message.channel.send('hi', { components: [group1] });
Voila le code
Et j'ai ça comme erreur
Merde
j'ai pas enlver le let group2
ça envoie bien le hi mais pas de buttons
Enlève le .setDisabled
Hmm
const disbut = require('discord-buttons'); disbut(client);
if (message.content.startsWith(prefix + 'click')) {
message.delete(message.author);
let btn2 = new disbut.MessageButton()
.setLabel(' ')
.setID('id')
.setStyle('blurple')
let group1 = new disbut.MessageActionRow().addComponent(btn2);
message.channel.send('hi', { components: [group1] });
}
J'ai mis ça dans mon code
let btn = new disbut.MessageButton()
.setStyle('url')
.setLabel('Discord Button Link NPM')
.setURL('https://npmjs.com/discord-button')
.setID('clickto');
await message.channel.send(`Button Discord Link`, btn);
}
Modifie par ça
Et tu me dis @keen narwhal
Tu peut screen le code que tu as ?
Hmm
Essaye de changé ça
const disbut = require('discord-buttons')(client);
const { MessageButton } = require('discord-buttons');
Et test
Et si sa fonctionne pas, je ne sais pas 😭
TypeError: Cannot read property 'MessageButton' of undefined
at Client.<anonymous> (D:\Téléchargements\discord-button-main\index.js:83:25)
at Client.emit (node:events:369:20)
at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (node:events:369:20)
at Receiver.receiverOnMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\websocket.js:970:20)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! Mystic@1.0.0 start: `node index.js`
J'ai ça
Enlève le 2eme const
TypeError: Cannot read property 'MessageButton' of undefined
at Client.<anonymous> (D:\Téléchargements\discord-button-main\index.js:82:25)
at Client.emit (node:events:369:20)
at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (node:events:369:20)
at Receiver.receiverOnMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\websocket.js:970:20)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! Mystic@1.0.0 start: `node index.js`
Tu peut screen ce que tu as ?
Chelou cet histoire
Oue
Je vais aller dormir et me renseigner
++
Et encore merci pour tout ce que tu a fait
Dr
^
slt est ce que l'utilisation de symphony pour du back est intelligent ou est ce qu'il faut que je reste sur des frameworks js genre node pour le back ? merci de vos réponses
ça dépends ce que tu fait
c'est vrai que c'est toujours ce meme probleme ...
le probleme ça donne est ce que symfony est utilisable avec la biblio js react ? et dans quel cas est ce pertinent selon toi ?
y a til des cas où ce n'est pas pertinent, genre je veux faire une sorte de resaux social light pour tester
à n'en pas douté x)
BAH ALORS
On demande de l'aide ? 
Dégouté du C ? 
il faut savoir rester humble
A peine x)
non c'est sur TNtube
perso j'ai fais comme ça
et comme ça pour l'utiliser
@oak turret Tu peux send le code directement pour que test ?
bah dans ton cas c'est assez simple :
const buttons = require("discord-buttons");
buttons(client);
const button_one = new buttons.MessageButton()
.setLabel("label")
etc..
await message.channel.send("button_one", {component: button_one});
Oue mais @oak turret je fait comment pour qu'il envoie un message
le message.channel.send envoie le message, et le bouton en même temps
tu peux mettre un embed à la place si tu veux
oui mais il faut effectuer quelle action pour qu'il envoie le message ?
bah là dans mon code rien, mais tu peux le mettre dans une de tes commandes
const buttons = require("discord-buttons");
buttons(client);
if (message.content.startsWith(prefix + 'testi')) {
const button_one = new buttons.MessageButton()
.setLabel("label")
await message.channel.send("button_one", {component: button_one});
}
Comme ça ?
par exemple ouais, faut que ton event sois en async du coup sinon il va te faire une erreur le await
Comme ça ?
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setLabel("label")
await message.channel.send("button_one", {component: button_one});
}
j'en ai pas la dessus
const { MessageEmbed, Client, Message } = require("discord.js");
const client = new Client();
const prefix = "+";
const fetch = require("node-fetch");
const { get } = require('axios');
const moment = require('moment');
client.on('ready', function() {
console.log("Prêt à être utiliser à 100%.")
setInterval(async () => {
try {
//--------STATUS INFOS--------//
const statuslist = [
`${prefix}help | ${client.guilds.size} serveurs`,
`${prefix}help | ${client.channels.size} channels`,
`${prefix}help | ${client.users.size} utilisateurs`
];
const random = Math.floor(Math.random() * statuslist.length);
//------STATUS URL TWITCH------//
const statusurl = [
`https://www.twitch.tv/`
];
const randomurl = Math.floor(Math.random() * statusurl.length);
client.user.setPresence({ game: { name: statuslist[random]}, status: 'online' })
} catch (error) {
(console.log)
};
}, 10000);
});
client.on('message', async function(message) {
////////-------////////
//--A NE PAS TOUCHER-//
////////-------////////
if(message.author.bot) return;
if(message.channel.type === "dm") return;
////////////////////
////////////////////
if (!message.content.startsWith(prefix)) return;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(message.content.startsWith(prefix + "help")){
message.delete(message.author);
let embed_hhwid = new MessageEmbed()
.setColor('random')
.setTitle(`Base Bot`)
.setImage("https://media.discordapp.net/attachments/755487927588618274/756826026557964328/bannergif.gif")
.setDescription(`Coding Bot Discord Tool`)
.setTimestamp()
.setFooter(`Demander par ${message.author.tag}`)
message.channel.send(embed_hhwid);
}
//////////////////////////////////////////////////////////////////////
if(message.content.startsWith(prefix + "avatar")){
message.delete(message.author);
const mentionned = message.mentions.users.first() || message.author;
const avatarEmbed = new MessageEmbed()
.setTitle(`Avatar of **${mentionned.username}**`)
.setColor("RANDOM")
.setImage(mentionned.displayAvatarURL({ dynamic: true, size: 512 }));
message.channel.send(avatarEmbed);
}
//////////////////////////////////////////////
if (message.content.startsWith(prefix + 'url')) {
message.delete(message.author);
let btn = new disbut.MessageButton()
.setStyle('url')
.setLabel('Discord Button Link NPM')
.setURL('https://npmjs.com/discord-button')
.setID('clickto');
await message.channel.send(`Button Discord Link`, btn);
}
const disbut = require('discord-buttons')(client);
if (message.content.startsWith(prefix + 'click')) {
message.delete(message.author);
let btn2 = new disbut.MessageButton()
.setStyle('url')
.setLabel('Discord Button Link NPM')
.setURL('https://npmjs.com/discord-button')
.setID('clickto');
await message.channel.send(`Button Discord Link`, btn2);
}
const buttons = require("discord-buttons");
buttons(client);
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setLabel("label")
await message.channel.send("button_one", {component: button_one});
}
})//
oui
Error: The class/prototype returned from the extender function must extend the existing structure class/prototype (received function ExtendedTextChannel extends TextChannel; expected extension of ExtendedTextChannel).
at Function.extend (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\util\Structures.js:82:13)
at module.exports (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\index.js:24:16)
at Client.<anonymous> (D:\Téléchargements\discord-button-main\index.js:92:1)
at Client.emit (node:events:369:20)
at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16)
Yes une erreur
tu le require 2 fois
enlève ça
const disbut = require('discord-buttons')(client);
if (message.content.startsWith(prefix + 'click')) {
message.delete(message.author);
let btn2 = new disbut.MessageButton()
.setStyle('url')
.setLabel('Discord Button Link NPM')
.setURL('https://npmjs.com/discord-button')
.setID('clickto');
await message.channel.send(`Button Discord Link`, btn2);
}
Pourquoi ?
tu le require 2 fois, t'as pas besoin, test une fois avec ce que je t'ai donné pour voir
ok donc
Bas le résultat et que ça envoie le texte mais pas le buttons
tu vas remplacer par ça :
oui normal
my bad
let row = new buttons.MessageActionRow()
.addComponent(button_one);
await message.channel.send("button_one", {component: row});
tu laisses ton bouton
tu rajoutes le row
et tu remplaces le message.channel.send
const buttons = require("discord-buttons");
buttons(client);
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setLabel("label")
let row = new buttons.MessageActionRow()
.addComponent(button_one);
await message.channel.send("button_one", {component: row});
ouaip
ça ?
alors rajoute un .setID("id"); par exemple au bouton pour éviter l'erreur de l'id inexistant
let button_one = new buttons.MessageButton()
.setLabel("label")
.setID("testing");
yes
if (!style || style === undefined || style === null) throw new TypeError('NO_BUTTON_STYLE: Please provide button style');
^
TypeError: NO_BUTTON_STYLE: Please provide button style
at resolveStyle (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Util.js:5:64)
at MessageButton.setup (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\MessageButton.js:13:36)
at new MessageButton (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\MessageButton.js:9:10)
at Function.create (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\interfaces\BaseMessageComponent.js:23:21)
at D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\MessageActionRow.js:26:87
at Array.map (<anonymous>)
at MessageActionRow.addComponents (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\MessageActionRow.js:26:55)
at MessageActionRow.addComponent (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\MessageActionRow.js:31:17)
at Client.<anonymous> (D:\Téléchargements\discord-button-main\index.js:87:4)
at Client.emit (node:events:369:20)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! Mystic@1.0.0 start: `node index.js`
ah yes
.setStyle("red")
par exemple
oui si tu veux
mais tu vas devoir rajouter un .setURL() si tu le mets en url
oui c'était juste l'info
DOnc
const buttons = require("discord-buttons");
buttons(client);
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setStyle('red')
.setLabel("label")
.setID("testing");
let row = new buttons.MessageActionRow()
.addComponent(button_one);
await message.channel.send("button_one", {component: row});
C'est good comme ça ?
si tu choisis, mais parmi une liste prédéfinie du coup
Oui mais ta compris ^^
yes
Oki
const { MessageEmbed, Client, Message } = require("discord.js");
const client = new Client();
const prefix = "+";
const fetch = require("node-fetch");
const { get } = require('axios');
const moment = require('moment');
client.on('ready', function() {
console.log("Prêt à être utiliser à 100%.")
setInterval(async () => {
try {
//--------STATUS INFOS--------//
const statuslist = [
`${prefix}help | ${client.guilds.size} serveurs`,
`${prefix}help | ${client.channels.size} channels`,
`${prefix}help | ${client.users.size} utilisateurs`
];
const random = Math.floor(Math.random() * statuslist.length);
//------STATUS URL TWITCH------//
const statusurl = [
`https://www.twitch.tv/`
];
const randomurl = Math.floor(Math.random() * statusurl.length);
client.user.setPresence({ game: { name: statuslist[random]}, status: 'online' })
} catch (error) {
(console.log)
};
}, 10000);
});
client.on('message', async function(message) {
////////-------////////
//--A NE PAS TOUCHER-//
////////-------////////
if(message.author.bot) return;
if(message.channel.type === "dm") return;
////////////////////
////////////////////
if (!message.content.startsWith(prefix)) return;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(message.content.startsWith(prefix + "help")){
message.delete(message.author);
let embed_hhwid = new MessageEmbed()
.setColor('random')
.setTitle(`Base Bot`)
.setImage("https://media.discordapp.net/attachments/755487927588618274/756826026557964328/bannergif.gif")
.setDescription(`Coding Bot Discord Tool`)
.setTimestamp()
.setFooter(`Demander par ${message.author.tag}`)
message.channel.send(embed_hhwid);
}
//////////////////////////////////////////////////////////////////////
if(message.content.startsWith(prefix + "avatar")){
message.delete(message.author);
const mentionned = message.mentions.users.first() || message.author;
const avatarEmbed = new MessageEmbed()
.setTitle(`Avatar of **${mentionned.username}**`)
.setColor("RANDOM")
.setImage(mentionned.displayAvatarURL({ dynamic: true, size: 512 }));
message.channel.send(avatarEmbed);
}
//////////////////////////////////////////////
if (message.content.startsWith(prefix + 'url')) {
message.delete(message.author);
let btn = new disbut.MessageButton()
.setStyle('url')
.setLabel('Discord Button Link NPM')
.setURL('https://npmjs.com/discord-button')
.setID('clickto');
await message.channel.send(`Button Discord Link`, btn);
}
const buttons = require("discord-buttons");
buttons(client);
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setStyle('red')
.setLabel("label")
.setID("testing");
let row = new buttons.MessageActionRow()
.addComponent(button_one);
await message.channel.send("button_one", {component: row});
}
})//
mh mais si t'en as qu'un le row est pas obligatoire
Tien voila le code global
donc tu peux enlever le r ow
row
et juste fair
e
await message.channel.send("button_one", button_one);
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setStyle('red')
.setLabel("label")
.setID("testing");
await message.channel.send("button_one", {component: button_one});
J'ai mis ça
yes
throw new Error(
^
Error: The class/prototype returned from the extender function must extend the existing structure class/prototype (received function ExtendedTextChannel extends TextChannel; expected extension of ExtendedTextChannel).
at Function.extend (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\util\Structures.js:82:13)
at module.exports (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\index.js:24:16)
at Client.<anonymous> (D:\Téléchargements\discord-button-main\index.js:80:1)
at Client.emit (node:events:369:20)
at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16)
J'ai une erreur console
const buttons = require("discord-buttons");
buttons(client);
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setStyle('red')
.setLabel("label")
.setID("testing");
await message.channel.send("button_one", button_one);
C'est bien ça le code ?
oui mais essaye de mettre que cette commande pour voir
enlève tes autres commandes pour voir
const { MessageEmbed, Client, Message } = require("discord.js");
const client = new Client();
const prefix = "+";
const fetch = require("node-fetch");
const { get } = require('axios');
const moment = require('moment');
client.on('ready', function() {
console.log("Prêt à être utiliser à 100%.")
setInterval(async () => {
try {
//--------STATUS INFOS--------//
const statuslist = [
`${prefix}help | ${client.guilds.size} serveurs`,
`${prefix}help | ${client.channels.size} channels`,
`${prefix}help | ${client.users.size} utilisateurs`
];
const random = Math.floor(Math.random() * statuslist.length);
//------STATUS URL TWITCH------//
const statusurl = [
`https://www.twitch.tv/`
];
const randomurl = Math.floor(Math.random() * statusurl.length);
client.user.setPresence({ game: { name: statuslist[random]}, status: 'online' })
} catch (error) {
(console.log)
};
}, 10000);
});
client.on('message', async function(message) {
////////-------////////
//--A NE PAS TOUCHER-//
////////-------////////
if(message.author.bot) return;
if(message.channel.type === "dm") return;
////////////////////
////////////////////
if (!message.content.startsWith(prefix)) return;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const buttons = require("discord-buttons");
buttons(client);
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setStyle('red')
.setLabel("label")
.setID("testing");
await message.channel.send("button_one", button_one);
Mon code ce résume a ça ducoup
t'as oublié de fermé ton event là
remet le row alors
ça peu pas être la dependen qui foire ?
non elle marche bien la dépendance
const buttons = require("discord-buttons");
buttons(client);
if (message.content.startsWith(prefix + 'testi')) {
let button_one = new buttons.MessageButton()
.setStyle('red')
.setLabel("label")
.setID("testing");
let row = new buttons.MessageActionRow()
.addComponent(button_one);
await message.channel.send("button_one", row);
j'vais check ouais
Je sais pas si j'ai un soucis
Tu peux send ton code que je test ?
j'ai pas du tout la même archi que toi donc ça marchera pas chez toi
j'utilise commando
AHhh merde
On peut faire des boutons cliquable avec djs ????
Ah ouai lourd la dernier fois que jen ai fait yavai pas mdrr mais ça marche comment
Car c'est vraiment des boutons ou des image
Bah si c'est moins chiant que les réactions c'est cool
je trouve ça mieux ouais
En vrai c'est soin mais c'est assez nouveau je suis pas passez à coter de ça a chaque fois que j'ai dev un bot hein mdrr
Je te laisse avec l'expert mdrr
déjà tes require fous les tout en haut de ton fichier
avec les autres
mais je comprends pas trop pourquoi ça marche pas

const { MessageEmbed, Client, Message } = require("discord.js");
const client = new Client();
const prefix = "+";
const fetch = require("node-fetch");
const { get } = require('axios');
const moment = require('moment');
const buttons = require("discord-buttons");
buttons(client);
oauip
essaye :
if ( message.content.startsWith(`${prefix}button`) ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
return message.channel.send("message", new_button);
}
if ( message.content.startsWith(`${prefix}button`) {
^
SyntaxError: Unexpected token '{'
at Object.compileFunction (node:vm:355:18)
at wrapSafe (node:internal/modules/cjs/loader:1022:15)
at Module._compile (node:internal/modules/cjs/loader:1056:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1121:10)
at Module.load (node:internal/modules/cjs/loader:972:32)
at Function.Module._load (node:internal/modules/cjs/loader:813:14)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
at node:internal/main/run_main_module:17:47
je pense que j'ai du oublié le return même si j'en doute mais du coup sinon voilà hein
du coup pour gérer tes boutons tu as un nouvel event
clickButton il s'appelle
Je vais bosser sur mon système de tickets
tu peux gérer les intéractions de tes boutons par leurs id, ils doivent être unique et de là tu peux check quel bouton à été cliqué et par qui
pas de soucis 
avec plaisir cher ami
^^
plus d'erreurs ?
J'ai un tout petit soucis
yes dis moi
Non je viens de patch un code d'erreur que j'avais
Comment je fait pour combiner un embed et les buttons
tout simple
soit tu fais :
if(message.content.toLowerCase() === '?sendmsg') {
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
message.channel.send(embed, embed);
ok comme ça du coup tu fais
Moi j'ai fait ça
Oui mais faut que je sépare les const ?
Faut que je fasse un const embed et un const buttons ?
oui du coup
if(message.content.toLowerCase() === '?sendmsg') {
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
message.channel.send({embed: embed}, new_button)
Comme ça ?
yes
ah lol
j'ai du me gourer ouais mdr
je pense ouais
test
sinon je vais test de mon côté, car je l'ai fais mais avec plusieurs boutons donc j'utilise un actionrow
if(message.embeds.length === 1 && message.embeds[0].description.startsWith('React')) {
^
TypeError: Cannot read property 'startsWith' of null
at Client.<anonymous> (D:\Téléchargements\discord-button-main\ticketbot-reaction.js:29:73)
at Client.emit (node:events:394:28)
at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (node:events:394:28)
at Receiver.receiverOnMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\websocket.js:970:20)
J'ai cette jolie petite erreur
ça vient de toi ça
Attend je viens de le patch
j'ai passer les message en Async
Et j'ai plus d'erreur
laisse moi test de mon côté attend
Mais par contre je garde ça
like this
j'avais oublié que button: existait lol
c'est bon pour toi @keen narwhal ?
if(message.content.toLowerCase() === '?sendmsg') {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
Like this ?
Oui je souhaite ajouter plusieur boutons
ok donc à ce moment-là tu devrais faire comme ça de mémoire dans le même type :
return message.channel.send({
embed: embed,
components: [button1, button2]
});
ou sinon tu fais un actionrow avec un .addcomponents et tu mettras le row dans l'objet components
pas de virgule après ?
après quoi ?
[button1, button2]
TestBoting has logged in.
DiscordAPIError: Unknown Emoji
at RequestHandler.execute (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async RequestHandler.push (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\rest\RequestHandler.js:39:14) {
method: 'put',
path: '/channels/860544911955066936/messages/868856953655414844/reactions/ticketreact%3A625925895013662721/@me',
code: 10014,
httpStatus: 400
t'as mis un .setEmoji() ?
Bas de base vue j'arrivais pas a faire fonctionner les buttons oui mdrr
montre ton .setEmoji()
Nan c'est pas un set emojis
bah c'est quoi alors ?
J'avais utiliser ça d'un github
client.on('raw', payload => {
if(payload.t === 'MESSAGE_REACTION_ADD') { // Check if the event name is MESSAGE_REACTION_ADD
if(payload.d.emoji.name === 'ticketreact') // If the emoji is ticketreact
{
if(payload.d.message_id === '625926893954400266') { // Here we check if the id of the message is the ID of the embed that we had the bot send using the ?sendmsg command.
let channel = client.channels.get(payload.d.channel_id) // Get the proper channel object.
if(channel.messages.has(payload.d.message_id)) { // Check if the channel has the message in the cache.
return;
}
else { // Fetch the message and then get the reaction & user objects and emit the messageReactionAdd event manually.
channel.fetchMessage(payload.d.message_id)
.then(msg => {
let reaction = msg.reactions.get('ticketreact:625925895013662721');
let user = client.users.get(payload.d.user_id);
client.emit('messageReactionAdd', reaction, user);
})
.catch(err => console.log(err));
}
}
}
oui j'ai vu le -main
J'vais trouver ça qui marchais bien
, t'en as pas besoin
Nan le reste c'est moi ^^
ouais du coup un peu useless cet event
Bas maintenant oui mdrr
pour les boutons t'en auras pas besoin du coup
et même si tu veux des réactions, y a bien + simple
bah du coup tu fous un émoji quelque part
j'avais add un reaction.emoji.name
montre ton code
oula mais t'utilises des réactions en + des boutons ?
const Discord = require('discord.js');
const client = new Discord.Client();
const buttons = require("discord-buttons");
const config = require('./config.json');
var userTickets = new Map();
client.login(config.token);
client.on('ready', () => {
console.log(client.user.username + " has logged in.");
});
client.on('message', async function(message) {
if(message.author.bot) {
if(message.embeds.length === 1 && message.embeds[0].description.startsWith('React')) {
message.react(':ticketreact:625925895013662721')
.then(msgReaction => console.log('Reacted.'))
.catch(err => console.log(err));
}
if(message.embeds.length === 1 && message.embeds[0].title === 'Ticket Support') {
message.react(':checkreact:625938016510410772')
.then(reaction => console.log("Reacted with " + reaction.emoji.name))
.catch(err => console.log(err));
}
};
if(message.content.toLowerCase() === '?sendmsg') {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
components: [new_button]
});
}
});
Ducoup je garde que ça
ouaip
vue que le reste faut que je le refasse pour les buttons
je vois pas trop l'utilité des réactions si t'as les boutons, ça revient au même
Bas oui
ouaip mais ça revient quasiment au même niveau code que les réactions
Je veux remplacer les emojis et réaction par des buttons
okok
plus intuitif yes
Je test comme ça ?
bah là t'as qu'un bouton donc si tu veux
DiscordAPIError: Unknown Emoji
at RequestHandler.execute (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async RequestHandler.push (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\rest\RequestHandler.js:39:14) {
method: 'put',
path: '/channels/860544911955066936/messages/868858981202944080/reactions/ticketreact%3A625925895013662721/@me',
code: 10014,
httpStatus: 400
J'ai encore cette erreur
Nan c'est bon
j'avais oublier de supr une partie
k et du coup ?
if(message.content.toLowerCase() === '?sendmsg') {
^
ReferenceError: message is not defined
at Object.<anonymous> (D:\Téléchargements\discord-button-main\ticketbot-reaction.js:15:5)
←[90m at Module._compile (node:internal/modules/cjs/loader:1095:14)←[39m
←[90m at Object.Module._extensions..js (node:internal/modules/cjs/loader:1124:10)←[39m
←[90m at Module.load (node:internal/modules/cjs/loader:975:32)←[39m
←[90m at Function.Module._load (node:internal/modules/cjs/loader:816:12)←[39m
←[90m at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)←[39m
←[90m at node:internal/main/run_main_module:17:47←[39m
xd
const Discord = require('discord.js');
const client = new Discord.Client();
const buttons = require("discord-buttons");
const config = require('./config.json');
var userTickets = new Map();
client.login(config.token);
client.on('ready', () => {
console.log(client.user.username + " has logged in.");
});
client.on('message', async function(message) {
if (message.content.toLowerCase() === '?sendmsg') {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
components: [new_button]
})
}
});
J'ai ça maintenant
ouais ok, tu peux mettre button: new_button, à la place de components qui te servira + lorsque tu auras plusieurs boutons
if(message.content.toLowerCase() === '?sendmsg') {
^
ReferenceError: message is not defined
at Object.<anonymous> (D:\Téléchargements\discord-button-main\ticketbot-reaction.js:15:5)
←[90m at Module._compile (node:internal/modules/cjs/loader:1095:14)←[39m
←[90m at Object.Module._extensions..js (node:internal/modules/cjs/loader:1124:10)←[39m
←[90m at Module.load (node:internal/modules/cjs/loader:975:32)←[39m
←[90m at Function.Module._load (node:internal/modules/cjs/loader:816:12)←[39m
←[90m at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)←[39m
←[90m at node:internal/main/run_main_module:17:47←[39m
PS D:\Téléchargements\discord-button-main> node .\ticketbot-reaction.js
c'est comme ça :
client.on("message", async (message) => {
if ( message.content.toLowerCase() === "?sendmsg" ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
}
})
ouais j'ai pas mis button: nes_button
Mais pas de button
const Discord = require('discord.js');
const client = new Discord.Client();
const buttons = require("discord-buttons");
const config = require('./config.json');
var userTickets = new Map();
client.login(config.token);
client.on('ready', () => {
console.log(client.user.username + " has logged in.");
});
client.on("message", async (message) => {
if ( message.content.toLowerCase() === "?sendmsg" ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
});
j'ai update
comme ça ?
oui voilà comme ça
laisse moi check
On retourne a la base du problème mdrr
🧐
ton client.login() c'est tout à la fin d'ailleurs de ton code
regarde le code que j'ai send
où est ton buttons(client) ?
const Discord = require('discord.js');
const client = new Discord.Client();
const buttons = require("discord-buttons");
const config = require('./config.json');
var userTickets = new Map();
client.on('ready', () => {
console.log(client.user.username + " has logged in.");
});
client.on("message", async (message) => {
if ( message.content.toLowerCase() === "?sendmsg" ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
})
client.login(config.token);
comme ça ?
t'as juste mis le client.login() tout en bas là
après le const buttons etc, tu mets buttons(client)
mais non
...
comme tout à l'heure
const Discord = require('discord.js');
const client = new Discord.Client();
const buttons = require("discord-buttons");
buttons(client);
const config = require('./config.json');
var userTickets = new Map();
client.on('ready', () => {
console.log(client.user.username + " has logged in.");
});
client.on("message", async (message) => {
if ( message.content.toLowerCase() === "?sendmsg" ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
})
client.login(config.token);
Je vois pas la dif
AHhhh
pourtant c'est assez clair
tqt
parfait
tu devras faire comme ça pour détecter le clic d'un bouton
Je risque d'avoir besoin de ton aide mdrr
client.on('clickButton', async (button) => {
//Your code here...
});
client.on("clickButton", async (button) => {
// tata
})
oui voilà
console.log(button) et tu verras ^^
tu comprends pas quoi ?
Genre si je veux envoyer un message une fois le buttons cliquer je fait ça ?
client.on('clickButton', async (button) => {
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
});
ah ouais mais non du coup
J'ai oublier le message.channel.send
non non ça marchera plus comme ça
Comment alors ?
je te montre
client.on("clickButton", async (button) => {
const embed = new Discord.MessageEmbed()
.setColor("RED")
.setTitle("Bouton embed")
.setAuthor(button.clicker.user.username, button.clicker.user.displayAvatarURL())
.setDescription('Réagissez !');
return button.message.channel.send(embed);
});
sauf que là, ça ne marchera pas car tu détectes aucun bouton
tu devras le faire comme ceci pour détecter :
if ( button?.id === "id_du_bouton" ) {
//
}
bah c'est comme l'event message qui te permet de détecter les messages, là c'est pareil mais ça détecte les boutons
et leurs méthodes*
client.on("message", async (message) => {
if ( message.content.toLowerCase() === "?sendmsg" ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
client.on("clickButton", async (button) => {
if ( button?.id === "id_du_bouton" ) {
const embed = new Discord.MessageEmbed()
.setColor("RED")
.setTitle("Bouton embed")
.setAuthor(button.clicker.user.username, button.clicker.user.displayAvatarURL())
.setDescription('Réagissez !');
return button.message.channel.send(embed);
}
});
});
Comme ça en gros ?
oauis non
les events doivent être séparés
client.on("message", async (message) => {})
client.on("clickButton", async (button) => {})
c'est grossier mais c'est pour que tu vois quand je dis "séparé"
↑
dans le code que tu m'as mis, tu n'as pas séparé tes évènements, ça c'est pas bon
client.on("message", async (message) => {
if ( message.content.toLowerCase() === "?sendmsg" ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
client.on("message", async (message) => {})
client.on("clickButton", async (button) => {})
const embed = new Discord.MessageEmbed()
.setColor("RED")
.setTitle("Bouton embed")
.setAuthor(button.clicker.user.username, button.clicker.user.displayAvatarURL())
.setDescription('Réagissez !');
return button.message.channel.send(embed);
})
Donc comme ça ?
Mais euhhhh je suis duper la
client.on("message", async (message) => {
if ( message.content.toLowerCase() === "?sendmsg" ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
})
client.on("clickButton", async (button) => {
if ( button?.id === "red_button" ) {
button.reply.send("je suis le bouton rouge !");
}
})
test ça tu verras
parfait lol
tqt on est tous passés par là
client.on('ready', () => {
console.log(client.user.username + " has logged in.");
});
client.on("message", async (message) => {
if ( message.content.toLowerCase() === "?sendmsg" ) {
let new_button = new buttons.MessageButton()
.setStyle("red")
.setLabel("Rouge")
.setID("red_button");
const embed = new Discord.MessageEmbed()
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setDescription('React to this message to open a support ticket')
.setColor('#F39237')
return message.channel.send({
embed: embed,
button: new_button
})
}
})
client.on("clickButton", async (button) => {
if ( button?.id === "red_button" ) {
button.reply.send("je suis le bouton rouge !");
}
})
C'est good ?
J'ai juste repris me client.on("clickButton", async (button) => { mais j'avais refermer le clien.on(message) avant
kk
Oue niquel ça marche
Aller plus que 200 lignes mdrr
Je taff dessus et je reviens vers toi si j'ai un soucis
Merci beaucoup en tout cas
pas de soucis ^^
qlq peut m'aider a faire mes events pour mon bot
Comme ? @white sedge
comme lors de la creation d'un salon mettre dans un fichier .log le nom du salon plus le nom du membre qui la cree
et je n'arrive pas a recuperer le nom du membre ni celui du salon
@dire latch
ok
g ça maintenant je peux plus lancer mon bot
node:9036) UnhandledPromiseRejectionWarning: Error: EACCES: permission denied, write
at writeSync (fs.js:733:3)
at SyncWriteStream._write (internal/fs/sync_write_stream.js:24:3)
at writeOrBuffer (internal/streams/writable.js:358:12)
at SyncWriteStream.Writable.write (internal/streams/writable.js:303:10)
at Console.log (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java2/node_modules/winston/lib/winston/transports/console.js:79:23)
at Console._write (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java2/node_modules/winston-transport/index.js:82:19)
at doWrite (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java2/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js:428:64)
at writeOrBuffer (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java2/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js:417:5)
at Console.Writable.write (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java2/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js:334:11)
at DerivedLogger.ondata (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java2/node_modules/readable-stream/lib/_stream_readable.js:681:20)
(Use node --trace-warnings ... to show where the warning was created)
<node_internals>/internal/process/warning.js:44
(node:9036) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
<node_internals>/internal/process/warning.js:44
(node:9036) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
je conprent plus rien il marchait tres bien
Tu as dût faire une erreur sur ton code
je viens de suppr le ficher que je venais de cree et ça e fais toujours la meme chose
envoie ton code 😉
Si tu as modifs quelques choses a part le channelCreate, CTRL + Z
j'envoi tout le code du bot ?
au moins le fichier qui déclenche l'erreur
ben
g tout deplacer dans un autre dossier et ... g plus l'erreur
c pas normal ça
mais sinon ct quand je lançais ce fichier
visual studio pete un plomb la je peut plus faire ctrl+a
mais maintenant g ce probleme Error: ENOENT: no such file or directory, scandir './events/' {errno: -2, code: 'ENOENT', syscall: 'scandir', path: './events/', stack: 'Error: ENOENT: no such file or directory, scandir './events/'', …}
Aucun débogueur disponible. Impossible d'envoyer 'variables'
donc ça c'est ton index.js, il doit etre au meme endroit que ton dossier events
fs.readdir('./events/', (err, files) => { => fs.readdir(__dirname + '/events/', (err, files) => {
Essaye cette modification 
ok
att
Error: ENOENT: no such file or directory, scandir '/events/' {errno: -2, code: 'ENOENT', syscall: 'scandir', path: '/events/', stack: 'Error: ENOENT: no such file or directory, scandir '/events/'', …}
et si tu rajoutes un . avant le / là ?
tj la meme ?
att je te lenvoie
Tu l'as pas mis dans ton loader.js ? @white sedge
(node:10814) UnhandledPromiseRejectionWarning: Error: EACCES: permission denied, write
at writeSync (fs.js:733:3)
at SyncWriteStream._write (internal/fs/sync_write_stream.js:24:3)
at writeOrBuffer (internal/streams/writable.js:358:12)
at SyncWriteStream.Writable.write (internal/streams/writable.js:303:10)
at Console.log (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java3/node_modules/winston/lib/winston/transports/console.js:79:23)
at Console._write (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java3/node_modules/winston-transport/index.js:82:19)
at doWrite (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java3/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js:428:64)
at writeOrBuffer (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java3/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js:417:5)
at Console.Writable.write (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java3/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js:334:11)
at DerivedLogger.ondata (/home/kettyp/Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java3/node_modules/readable-stream/lib/_stream_readable.js:681:20)
(Use node --trace-warnings ... to show where the warning was created)
Ok
Il sert à quoi ton loader.js ?
c les fichier de node
tu sais comment ouvrir un terminal et t'en servir ?
oui
Ah ok
ok
ça me donne ça c ok ? pour l'instant /Documents/Discord/Serveur/80%Gaming/Bots/commandbot/java3
chmod: opérande manquant après «777»
Saisissez « chmod --help » pour plus d'informations.
@hazy mirage
Error: ENOENT: no such file or directory, scandir './events/' {errno: -2, code: 'ENOENT', syscall: 'scandir', path: './events/', stack: 'Error: ENOENT: no such file or directory, scandir './events/'', …}
fait un screen la de tout ton ecran stp
ok
pourquoi ça te donnait une autre erreur avant?
c une question ?
oui
ben avant j'avais pas d'erreur
Il y a quoi dans ton dossier events ?
car ça mettait une erreur en plus
tu veux bien mettre const path = require("path") en haut
et a la place de './events'
met path.join(__basedir, 'events/')
😦
Ok
bon ça me fais chier je verrais ça demain
@oak turret
if ( message.content.toLowerCase() === "?sendmsg" ) {
let message_prive = new buttons.MessageButton()
.setStyle("grey")
.setLabel("Message privé")
.setID("message_prive_buttons");
let vocal = new buttons.MessageButton()
.setStyle("grey")
.setLabel("Vocal")
.setID("vocal_buttons");
let salon_ecrit = new buttons.MessageButton()
.setStyle("grey")
.setLabel("Salon écrit")
.setID("salon_ecrit_buttons");
let membre = new buttons.MessageButton()
.setStyle("grey")
.setLabel("Membre")
.setID("membre_buttons");
let autre = new buttons.MessageButton()
.setStyle("grey")
.setLabel("Autre")
.setID("autre_buttons");
const embed = new Discord.MessageEmbed()
.setAuthor('SALON DE SIGNALEMENT 🚨')
.setDescription("Vous souhaitez signaler un membre, poser une question ou tout simplement discuter en privé avec le staff, il vous suffit de réagir aux émotes ci-dessous :\n\n➢ Problème en message privé\n➢ Problème en vocal\n➢ Problème en salon écrit\n➢ Détresse d'un membre (serveur ou MP)\n➢ Autre\n\nMerci de rester respectueux et cordial !")
.setImage('https://media1.tenor.com/images/b2f801fb97f3eb1d611ae61278b5822d/tenor.gif')
.setColor('#F39237')
return message.channel.send({
embed: embed,
components: [message_prive, vocal, salon_ecrit, membre, autre]
})
}
})
J'ai une erreeeeuuuurrrr
TypeError: Cannot read property 'map' of undefined
at D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\APIMessage.js:171:54
at Array.map (<anonymous>)
at APIMessage.resolveData (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\APIMessage.js:168:64)
at ExtendedTextChannel.send (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\TextChannel.js:19:68)
at Client.<anonymous> (D:\Téléchargements\discord-button-main\ticketbot-reaction.js:42:38)
at Client.emit (node:events:394:28)
at MessageCreateAction.handle (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
y a quoi ici:
\node_modules\discord-buttons\src\v12\Classes\APIMessage.js ligne 171
J'en sais foutrement rien
Nan enfaite c'est bon
C'est pas un problème de map
Mais de components
Alors qu'il fallais que je mette Buttons

oui ou tu fais un actionrow avec un .addComponents
Par contre const message_prive = 'ID du Ticket ' + button.clicker.user.id;
Marche plus
bah met l'id écoute juste ou fais un autre système
parce que bon juste le topic sert quasiment à rien, l'utilisé pour les tickets c'mieux et safe au moins
bref fais comme tu veux ^^
Yes
J'ai choisis cette solution
Par contre tu sais comment faire un message "ghost"
ghost ?
Fais ça :




