#javascript-typescript
1 messages · Page 87 of 1
Le qr code te renvoies surement un identifiant
ou je ne sais quoi
qui ensuite avec une API récupère l'état de ta vaccination
donc si tu fais du "reverse engineering" sur l'appli
tu peux surement voir comment les données sont traités avec l'API
J'ai pas lu toute la conversation et le problème mais une chose est sûre : Ce n'est pas parce que tu peut acceder en lecture à un bdd que tu peut de 1) en lire tout le contenu et de 2) alterer ton contenu ou celui d'un autre
Par ailleurs vu que vous parlez de code QR ma question est la suivante : si il n'y a aucune bdd ou api derrière, comment pouvez-vous être sûr que le code qr que l'on vous présente n'est pas une contrefaçon ?
Parce que si le code qr se résume à : Nom + prénom, date de vaccination et nom du vaccin
Vous inquiétez pas qu'il y aura des petits margoulins qui vont vouloir écrire leur propre qr code pour ***** le système
ptdr
nan mais c'est pas une api qui permet d'edit les pass
juste pour vérifier
elle est surement connecté au services du gouvernement
et te renvoies des donnés très restreints
Je me doute et de toute façon je ne suis pas français donc je n'ai aucun moyen / raison de me soucier de ce système
Surtout qu'ici on parle du gouvernement et pas d'une petite entreprise qui se soucie peu de sa cybersécurité donc vous inquiètez pas que c'est calculé ^^
salut
vous avez la doc pour les buton de discord ?
pour faire une action genre crée un channel quand on clique sur le bouton
alors
tu es avec discordjs v13 ?
Ya ça
si oui, va juste sur la doc de discord js, ou le guide
je suis en v12
merci
Dr @keen narwhal
euh c'est la v13 ça donc
useless
mdr
si c'est en v12 tu peux trouver un package comme discord-buttons
Pas compris
Tu peux pas utiliser les boutons si tu es pas en v13
En utilisant l'api directement ?
Mais pourquoi tu dev en v12 ?
Surtout Discord va forcer à utiliser les slash command maintenant 😦
Si tu le fais pas maintenant, tu devras forcément l'update plus tard
Tu vas vite t'emêler les pinceaux si tu restes en V12 et que tu essaies d'utiliser des nouvelles features de Discord comme les buttons
.
avec un package en plus
car sinon juste avec discord js v12.5.1 pas possible
y a pas tant de mofifs à faire, puis plus t'attends, plus t'auras de choses à faire
@ashen rapids
le texte c'est pour le test
ça serait possible de voir le code
non uniquement discord buton
yes
MAIS EVIDEMMENT
Les boutons, sa fonctionne en v12 @sharp grail
Le package utilise l'API directement donc normal

MAISSSSSS
avec un package supplémentaire c'est sur
Non sans package
sinon discordjs v12 ne propose pas d'interagir avec les buttons
Avec l'api de discord
Oui bien sûr mais dans ce cas là tu peux même les utiliser en V11 avec l'API haha
logique, mais du coup, tu gères l'api comme ça ? le code doit être plus complexe
ça c'est avec discord-buttons
oui
Oui mais du coup ils ont raison
C’est pas discordjs v12
ben si
Ba avec le code que discord propose on peut
je suis en discord v12
...
et sa fonctionne
Non le fait d’utiliser l’api je veux dire sans package
Je sais pas dans quoi tu t'embarques @keen narwhal mais bon courage 😂
donc sa fonctionne :-:
pourquoi donc ?
discord buttons c'est un package en plus ;_;
c'est pas juste discord js v12
h'un ben logique x)
j'avais pas compris
bah voilà x)
faut pas confondre discord et discordjs surtout
pas de soucis x)
mtn je voudrais crée un channel avec le bouton mais je cherche une doc qui explique sa je trouve pas
la doc de discord-buttons est pas ouf malheureusement
effectivement
c'est sur XD
vous pouvez m'avancer sur le sujet ?
pour la crétion d'un salon en cliquant sur un bouton
création
Tu viens de répondre tout seul à ta question 😏
👥DISCORD 🡆 https://discord.gg/gjbXnt5NxK
Lien de l'api 🡆 https://discord.com/api/v8/interactions/${interaction.id}/${interaction.token}/callback
🔥 Merci à ceux qui mettent le like
●▬▬▬▬▬▬▬▬▬●
✔️Abonne-toi gratuitement en cliquant ici ➔https://www.youtube.com/channel/UCmH1td7f73IEyYNNg5XDT9g?
🔔Active la cloche des notifications pour recevoi...
okay merci les bgs 🙂
On peut @slim anvil look ma vidéo
On peut quoi
Ba les boutons en v12 sans package
oui mais évidemment je dis pas le contraire
Mais eux non plus
Mais du coup rien à voir avec discordjs 12
Tu passes juste par l’API
Ok
Mais du coup ça reste un peu con d’aller taper sur l’api directement et en parallèle utiliser une lib qui le fait aussi
Oui c’est une solution de replis, après tant qu’à faire autant essayer de migrer petit à petit en v13
Ouais mais flemme mdr
Flemme mais ça vient demander de l'aide toutes les 2 minutes ici 😦
J'ai demandé de l'aide ? Non donc bon, t'es remarque, tu peut te les gardés
Puis, c'est un salon pour s'entraider donc normal que sa demande de l'aide
An error occurred while running the command: SyntaxError: Unexpected token o in JSON at position 1
You shouldn't ever receive an error like this.
async run(nbr_com) {
nbr_util_calcul = (nbr_util_base + 1);
nbr_com.send(JSON.parse({nbr_util : nbr_util_calcul}));
}
Discord me renvoit une erreur depuis que g implanté ce bout de code qui devrait rajouter +1 dans nbr_util_calcul puis l'envoyer dans mon fichier json que voila (pour la variable help)
ou
{
"hello":
{
"nbr_util":0
},
"help":
{
"nbr_util":0
},
"question":
{
"nbr_util":0
},
"reply":
{
"nbr_util":0
},
"create-easteregg":
{
"nbr_util":0
},
"ban":
{
"nbr_util":0
},
"kick":
{
"nbr_util":0
},
"notes_version":
{
"nbr_util":0
},
"stats":
{
"nbr_util":0
},
"prochainemaj":
{
"nbr_util":0
},
"resume_maj":
{
"nbr_util":0
},
"logger":
{
"nbr_util":0
}
}
je ne comprends pas trop trop json g beaucoup de mal avec cet outil
je doit mettre strigify au lieu de parse
ui
Mais bien sûr… c’est bien connu…
C’est justement parce que tout se fait via un QRCode que c’est possible.
C’est bien pour ça que des amendes et des peines de prison ont été mises en places pour les gens qui falsifieraient leur QRCode.
Donc non, pour la dernière fois, il n’y a ni API ni base de données pour la vérification des pass sanitaires.
De la même manière qu'on peut vérifier la validité des billets, on peut vérifier la validité d'un code QR. Je serais incapable de vous dire comment ils le font mais bon vu la taille du code ils ont tous les moyens d'authentifier les codes de façon sûre. Évidemment comme toujours c'est falsifiable mais ça reste techniquement difficile à faire correctement.
Avec une encryption des données par clé prédéfinie déjà il est possible de vérifier facilement les données.
Ça fonctionne sur la même base que les signatures gpg à mon avis
Source 🤔
Source pour quoi ?
Pour les peines de prison ou pour l’absence de DB ?
C’est totalement ça !
Pour l'absence de bdd
L’absence de bdd reste même logique
D’où le fait qu’il y ai autant de faux pass’sanitaire
Ça signifie pas besoin d’être renseigné via un dossier ou autre, tu peux juste créer de la fausse data
Voici un PDF de l’Europe t’expliquant comment fonctionne le Green Pass (pass sanitaire Européen) : https://ec.europa.eu/commission/presscorner/api/files/attachment/868508/Digital Green Certificate_en.pdf.pdf
D'après ton document il n'y a aucune information sur comment le système fonctionne réellement derrière sauf : ". Both will
have a QR code that contains essential information,
as well as a digital seal to make sure the certificate is
authentic." ce qui à mon avis signifie qu'il faut confronter ses données avec une bdd 🤷♂️
Et ça aussi tenderait à le prouver
bah en vrai première chose à faire pour tester, c'est d'utiliser une app pour lire les pass sanitaire en ce foutant en mode avion et puis on verra bien si on a un retour ou non
🤔
Oulah ça part en reverse engineering j'aime ça 😄
Comme je l’ai dit, le scanning fonctionne en mode hors-ligne, mais au lancement, l’application demande à synchroniser les règles d’acceptation. Et c’est ça que je veux virer avec mon app
je ne te répondai pas forcément à toi, mais en général à la conversation du si ca passe par une API qui communique avec une base de données ou non
si ils veulent tester suffit qu'ils se mettent en hors ligne ou avion et ils verront bien
Yo,
Comment je pourrais faire pour créer un channel textuel qui soit que accessible à "reaction.message.guild.id" et à deux role "861671951646982154" et "882561952424026112"
Hey,
Avec quelle librairie ?
Surement DiscordJS 👀
Ui, sûrement, mais ça pourrait en être une autre
Si c’est du D.JS : https://discord.js.org/#/docs/main/stable/class/PermissionOverwriteManager?scrollTo=create
nbr_util_calcul = (nbr_util_base + 1);
JSON.stringify({nbr_util : nbr_util_calcul});
ce bout de code que j'ai mis dans une commande a pour but de rajouter +1 dans help en json mais rien ne ce passe pouvez vous m'aider
Le JSON
{
"hello":
{
"nbr_util":1
},
"help":
{
"nbr_util":1 ICI LE PROGRAMME DOIT ENVOYER LE NOMBRE QUE LE PROGRAMME A CALCULÉ DONC 2
},
"question":
{
"nbr_util":1
},
"reply":
{
"nbr_util":1
},
"create-easteregg":
{
"nbr_util":1
},
"ban":
{
"nbr_util":1
},
"kick":
{
"nbr_util":1
},
"notes_version":
{
"nbr_util":1
},
"stats":
{
"nbr_util":1
},
"prochainemaj":
{
"nbr_util":1
},
"resume_maj":
{
"nbr_util":1
},
"logger":
{
"nbr_util":1
}
}
@white sedge normal que rien ne se passe, tu ne réécris pas ton fichier JSON 😕
ah euh
comment on fait alors
car meme en faisant des recherche g rien trouvé
pour reecrire dans json
Tu peux utiliser write pour écrire dans le JSON
Un exemple ici : https://www.google.com/amp/s/attacomsian.com/blog/nodejs-write-json-object-to-file%3Famp
ok merci
Du coup ça m'a donné envie de me remettre sur mon application React Native !
Mais ça a l'air full bugué avec les nouvelles versions, Babel, React Vector icons, ... Avalanche de problèmes
ah
Depuis que j'ai mis a jour mon code grâce a @ashen rapids Merci à lui
nbr_util_calcul = nbr_util_base + 1
const help ={
help:{
nbr_util: nbr_util_calcul
}
}
const data2 = JSON.stringify(help);
fs.writeFile('nbr_util_com.json', data2, (err) => {
if (err) {
throw err;
}
console.log("DB mise à jour.");
});
msg.say(nbr_util_calcul)
}```
Le programme renvois toujours le nombre 11 en chaîne de caractère
j'ai fais plusieurs test qui donnent le meme resultat
Quel est le soucis ? J'ai pas compris ?
Bah au pire tu fais un Number.parse() avant de réutiliser le nombre
enfaite ça doit rajouter 1 a chaque fois que la commande est utilisée
mmh je vais test
Oue, comme a dit Jeydolen, je pense que tu rajoutes 1 sur du string à chaque fois
comme ça ? @inner escarp
Number.parseInt(nbr_util_base);
nbr_util_calcul = nbr_util_base + 1
const help ={
help:{
nbr_util: nbr_util_calcul
}
}
const data2 = JSON.stringify(help);
fs.writeFile('nbr_util_com.json', data2, (err) => {
if (err) {
throw err;
}
console.log("JSON data is saved.");
console.log(type(8))
});
msg.say(nbr_util_calcul)
}
réecris ton nbr_util_base au tout début
Donc comme tu as fait sauf que :
tu change Number.parseInt(nbr_util_base);
par nbr_util_base = Number.parseInt(nbr_util_base);
okay je vais test et je te dis ça
@inner escarp la technique marche mais que pour une seule fois
bizzare
On peut pas savoir grand chose par rapport à l'extrait de code que tu as envoyé pour le coup
Ce que tu peut essayer à la limite c'est de faire : nbr_util_base = Number.parseInt(nbr_util_base)++;
et de remplace tous les nbr_util_calcult par nbr_util_base
Bonjour, je créer un bot discord mais quand je lance mon bot ça met :
require() of ES modules is not supported.
Yo,
Pourquoi il me fait une error quand je fais ça :
message.author.roles.add('876084656485855232')
Code ?
require = node js alors que manifestement ton erreur semble etre causée par le fait que tu le lance en tant que JS vanilla
Remplace les require par des import
ou alors lance le via node js vu que c'est censé être un bot discord
C'est pas tout à fait vrai ce que je dis la étant donné que tu utilise des modules ES
Parce que la je lance avec pm2
Ah peut être, je n'ai jamais utilisé ça
Mais je sais même pas ce que c'est le module ES
Tu as du faire qqch du genre module.exports ....
Tu le fais à quel moment ? Quand quelqu'un rejoint ?
Quand un message est send
C pour ça message.author
package.json
Tu as défini ton projet en tant que module
enleve le type : 'module'
Tu l'as start comment ton .js ? @keen narwhal
pm2 il a dit
Nan, mais comment
Pas avec quoi
let membre = message.guild.member(message.author);
membre.roles.add('876084656485855232');
Essaye ça @opal harness
Oups on parle pas de la même chose x)
En gros
Avec pm2
Il faut aller dans le dossier puis faire pm2 start fichier.js
Et non faire pm2 start repertoire/fichier.js
Nan mais c'est pas ça le prob
Sa peut venir de ça
Il a juste defini son projet en tant que module et par conséquent il doit utiliser des import
C'est tout
Il suffit de lire l'erreur de la console
Perso je ferais ```js
message.member.roles.add("876084656485855232")
Merci et j'en profite, est ce que tu saurais comment je pourrais retirer un role à qq1 grace à l'id du role ?
et au let du dessus que tu viens me donner ?
A la place du .add, c'est .remove @opal harness
Ok
Aaaah je vais essyer
Toujours la même erreur
5|Manager | Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/[DISCORD_BOT]/[MANAGER]/node_modules/node-fetch/src/index.js
5|Manager | require() of ES modules is not supported.
5|Manager | require() of /home/[DISCORD_BOT]/[MANAGER]/node_modules/node-fetch/src/index.js from /home/[DISCORD_BOT]/[MANAGER]/index.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
5|Manager | Instead rename /home/[DISCORD_BOT]/[MANAGER]/node_modules/node-fetch/src/index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /home/[DISCORD_BOT]/[MANAGER]/node_modules/node-fetch/package.json.
5|Manager | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1089:13)
5|Manager | at Module.load (internal/modules/cjs/loader.js:937:32)
5|Manager | at Function.Module._load (internal/modules/cjs/loader.js:778:12)
5|Manager | at Module.require (internal/modules/cjs/loader.js:961:19)
5|Manager | at Module.Hook._require.Module.require (/usr/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:80:39)
5|Manager | at require (internal/modules/cjs/helpers.js:92:18)
5|Manager | at Object.<anonymous> (/home/[DISCORD_BOT]/[MANAGER]/index.js:5:15)
5|Manager | at Module._compile (internal/modules/cjs/loader.js:1072:14)
5|Manager | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
5|Manager | at Module.load (internal/modules/cjs/loader.js:937:32) {
5|Manager | code: 'ERR_REQUIRE_ESM'
Et ce que j'ai dis ?
Bah tu as un problème alors parce que l'erreur vient toujours du même problème
Donc soit tu supprime le type : "module" dans le package.json comme dit dans l'erreur, ou alors tu change ta syntaxe require() par des import
L'instruction import est utilisée pour importer des liens qui sont exportés par un autre module. Les modules importés sont interprétés en mode strict dans tous les cas. L'instruction import ne peut pas être utilisée dans les scripts embarqués sauf si ceux-ci proviennent de ressources avec type="module".
Ta solution est peut etre la bonne mais en général quand on cherche une solution à un problème on se base en premier sur l'erreur :/
J'avais déjà eu une erreur en faisant ça, donc c'est peut être cet erreur qu'il a 🤷♀️
Peut etre qui sait ^^
Non y'a pas de modules dans le package
node index.js
Non mais j'ai essayer avec les deux
Tu peut transmettre ton package.json ?
Oui en privée ?
Il y a quelque chose de confidentiel dans ton package.json
?
Oui mon adresse
{
"name": "btrp-manager",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Ton adresse sur ton package.json ?
Il y a que ça sur ton package.json ? @keen narwhal
Joke
Oui
Il y a déjà des problèmes oui
Supprime ton package.json
@inner escarp ÇA MARCHE !
j'ai dus faire ça js nbr_util_base = Number.parseInt(nbr_util_base); nbr_util_base ++;
sinon ça me donnais une erreur
Tu fais npm init -y
Niquel
C'est bizzare quand même que tu ai cette erreur vu qu'il n'y a aucun type ni rien
juste une question, à quoi sert le -y ? 🤔
Pour accepter tout sans rien taper
Attendez
En gros, sa laisse le fichier par défaut
ah ok, mais la partie dependencies ne s'ajoute pas toute seule si y en a pas ?
Je crois que ça va marcher
Ba tu installes pas tes modules en créant ton package.json @sharp grail mdr
Oui je sais, mais bon c'était ptet possible que le fichier s'update auto
Pas si tu le créer
Pour commencer, non et en plus il y a un package.lock pour avoir une somme de controle
@sharp grail sa te met ceci
np
Dr
dacc
🙂
dans ce cas pourquoi ne pas juste avoir modifier le fichier package.json ?
Car c'est plus rapide de le supprimer et de le recréer auto ?
pas forcément, dans ce cas c'était rajouter une ligne
A part si tu connais tout ce qu'il faut mettre dedans, va si 🤷♀️
pas forcément le créer manuellement mais pour une ligne 🤔 bref
Ba justement, si tu connais ce qu'il faut mettre dedans, good luck à toi hein
bah là c'était juste le truc basique
je te parle pas du package-lock, mais juste du package avec les infos basiques
donc bon
Ba tu connais par coeur ce que contient ton package.json ?
bref, pas besoin d'épiloguer. Juste après un init c'est ça avec une ligne dependencies en plus
-__-
comment on fait pour ecrire dans un json sans tout effacer ?
comme ça ? fs.write('./json/nbr_util_com.json', data2, (err) => {
@ashen rapids
mais ça me met cette erreur
@i, An error occurred while running the command: TypeError: The "fd" argument must be of type number. Received type string ('./json/nbr_util_com.json...)
You shouldn't ever receive an error like this.
Please contact Nom d’utilisateur#9999.
Non c'est bon ça marche, merci
Elle est bizarre ton erreur
Je crois pas que ça vienne de ton fs.write
Yes
Dommage que je fais pas du json 😦 Je t'aurai aidé
pas grave
T'as pas une erreur dans la console directement ?
Je comprends pas pourquoi il demande un fd en number
nan rien dans la console
const resume = require('.//..//../json/notes_de_version.json'); sa fonctionne en mettant // ?
T'es sûr que c'pas ta gestion d'erreur qui part un peu n'importe comment ?
je pense pas
Ou alors à un endroit tu try / catch
Et dans ton catch tu print pas l'erreur
Comment t'arrive à ça => @i, An error occurred while running the command
Dans ton code ?
C'bien un message que t'affiche à l'user directement sur Discord ?
fs.write attends un nombre comme premier argument (cf https://nodejs.org/api/fs.html#fs_fs_write_fd_string_position_encoding_callback)
Pour cette utilisation, tu devrais plutôt utiliser fs.writeFile
(https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback)
En effet, j'ai mélangé les deux, je comprenais pas 
Ça ne suppr pas tout le contenu du fichier ?
bah ta d'autres choses à faire pour ça, moi je te donnais juste la raison de ton erreur
@i, An error occurred while running the command: TypeError: The "fd" argument must be of type number.
Ok
Pourquoi quand je mentionne un role via son id
send(`@foggy idol`)
Il me renvoie : @foggy idol
Car c'est & et non ! @opal harness
Pourquoi break après default ?
??
Enfaite j'essaye de faire une commande sauf que je ne sais pas trop comment la faire
@queen oceanPeut tu aller en voc comme ça je t'explique ?
Pas du tout la
AH mince
je peux t'envoyer mon code
pour que tu puisses comprendre ?
ici
Explique ton problème complètement et une personne dispo te répondra 😉
Ah bah enfaite j'essaye de faire une commande shifumi et le truc c'est que je veux que le bot envoie en dm au deux personne qui joue un message et collecte les message, mais qu'il attende que les 2 autres ont choisis (pierre feuille ou ciseaux)
et qu'après ça défini un vainqueur en fonction de leurs choix
comme un shifumi
const Discord = require("discord.js");
const { PREFIX } = require("../config.js");
const message = require("../events/message.js");
const db = require("quick.db");
module.exports.run = async (client, message, args) => {
const joueur1 = message.author
const joueur2 = message.mentions.members.first()
const argent = args[1]
if(!joueur2){
message.channel.send(`Veuillez mentionner une personne avec qui jouer !`)
} else {
if(joueur2.id === joueur1.id) {
message.channel.send(`Vous ne pouvez pas jouer contre vous-même !`)
} else {
if(!argent){
message.channel.send(`Veuillez mettre le nombre d'argent à parier !`)
} else {
if(joueur2 || argent){
joueur2.send(`Choisis entre pierre feuille ou ciseaux !`)
joueur1.send(`Choisis entre pierre feuille ou ciseaux !`)
}
}
}
}
}
module.exports.help = {
name: 'shifumi',
}; ```
Commence déjà par indenter ton code, tu t'y retrouveras mieux !
indenter ?
Il faut que tu stockes tes parties quelque part dans code.
Ca peut être une Collection qui liste les games qui sont en cours. Dans chaque game, tu as toutes les infos dont tu as besoin, soit l'ID des joueurs, la state, etc ..
ctrl + k +f sur vs code
Des states
pour l'indentation auto
dr 
@ashen rapidsen faite ce que j'aimerai
c'est pour la partie économie du bot
et en gros si on fait une partie donc +shifumi @ashen rapids 10
là j'ai parié 10 et le perdant perd 10
et ça je saurai pas faire du tout
Il faut t'entrainer dans ce cas si tu veux apprendre !
ahh oui ça je sais
mais le truc c'est que je sais pas du tout comment faire
tu n'aurai pas un indice avec quoi faire ça ?
Je t'ai donné une manière de faire déjà
c'est pas nécessaire de stocker les parties 🤔
Ah
Juste 1 seul
et le perdant perd la somme misé
Ok donc effectivement, ya plus simple
enfin avant j'aimerai que le joueur mentionné accepte l'invitation au jeu mais ça je pense savoir faire
OHh comment ?
Dans ce cas, une fois la commande effectuée :
- Tu check si les utilisateurs ont bien la monnaie pour éviter d'être dans le négatif en cas de défaite
- Tu lances la partie, en envoyant un message à chacun. Vérifie bien si ses MP sont ouverts ou non, sinon ça ne fonctionnera pas ...
- Tu stockes les réponses de chacun dans une Collection (par exemple)
- A chaque nouvelle réponse, tu check si la réponse de l'autre joueur a déjà été donnée. Si c'est le cas, tu réalises le pierre feuille ciseaux, tu donnes le score et tout ce que t'as besoin de faire
Ohh merci
"Vérifie bien si ses MP sont ouverts ou non, sinon ça ne fonctionnera pas ..."comment on vérifie ça ?
"Tu stockes les réponses de chacun dans une Collection (par exemple)
4) A chaque nouvelle réponse, tu check si la réponse de l'autre joueur a déjà été donnée." c'est ça que je vois pas comment faire
De cette manière, si t'as le 1er joueur qui dit ciseau aujourd'hui et l'autre qui dit pierre dans 3 jours, ça fonctionnera toujours (à moins que ton bot crash, dans quel cas, il faudrait stocker tes états dans une base de données)
et arriverai a faire
Ah ça serai mieux de faire un timer pour répndre
Tu try / catch sur ton code qui permet d'envoyer un DM
Dans ton catch, tu check l'erreur
Si ton bot arrive pas à envoyer un DM, tu pourras le gérer dans catch
Commence déjà par faire quelque chose sans avant le timer
Ahh oui
Ahhh dacc
mercii beaucoup
et du coup
je fais comment pour ça ?
Vraiment rapidement sans réfléchir plus que ça :
{
player1: userId1,
choicePlayer1: undefined,
player2: userId2,
choicePlayer2: "pierre"
}
Ca peut te donner une idée
Ou alors !
=> https://discordjs.guide/popular-topics/collectors.html
Utiliser les collectors, c'est fait pour "attendre" de récupérer l'input d'un utilisateur
Je sais pas ce que ça vaut, j'ai jamais vraiment utilisé ça
comment ça s'utilise ?
@ashen rapids
je voulais faire ça mais j'ai oublié comment faire
Pas besoin de me ping partout, un reply suffit haha
Je t'ai envoyé le lien du guide
ahhh désolé
Qui explique le fonctionnement des collectors
je m'incruste juste, y a deux choix, await message ou createmessagecollector, l'un fonctionne avec les promesses et l'autre avec des events, donc tu peux utiliser ça facilement la doc est détaillé à ce sujet tu as des exemples avec 👀
T'auras sûrement moins de code à faire avec les collectors, mais comme je te l'ai dit, j'ai jamais eu l'occasion d'utiliser ça encore
je vais essayer
Mais venant de DiscordJS, ça devrait très bien fonctionner haha
await message c'est pour attends quelque chose?
avant d'executer le reste ?
oui j'ai déjà utilisé juste je sais plus trop
await permet d'attendre l'exécution d'une promesse
la méthode s'appelle ainsi
Avant de passer à la suite
channel.awaitMessages
non vraiment c'est simple la doc peut aussi t'aider ^^
const filter = m => m.content.includes('discord');
ça le discord
il sert à quoi ?
Ahh ok ok je dois le laisser comme ça?
non non
cependant, pourquoi tu n'utilises pas des réactions ?
Si je peux faire ça aussi
c'est possible
ça serait mieux d'ailleurs
ah bah
il existe deux méthodes comme pour les messages donc à toi de voir ce que tu préfères
les réactions ça à l'air plus simple
parfait alors 👀
const filter = (reaction, user) => {
return reaction.emoji.name === '👍' && user.id === message.author.id;
};
pq filter est en gris ?
c'est normal
de base c'est bleu
j'crois
je comprends pas ta question x)
Car tu le déclares mais tu l'utilises pas
Ahh
bonjour j'ai fait une commande pp mais quand je mentionne un utilisateur il me met cette erreur dans le terminal comment je fait pour le résoudre
tu tentes d'envoyer un message vide
comment sa ?
je ne vois aucune mention de l'options format: 'png', dans les options de displayAvatrURL
essaye de ne rien mettre ?
la commande marche si je fait juste!pp
mais pas quand je mentionne
j'ai la meme erreur
a la place de message ?
je connais pas le js je suis plutot python moi
pour du python le await remplace votre message.channel
oui mais là c'est différent, il me semble qu'il y aussi le async et la await en py mais
oui
en gros, tes commandes marchent comment ?
en python ?
non en js x)
ah ya le code au dessus sur le screen
justement
y a pas tout
en gros
await est seuelment valide dans une fonction asynchrone
ah voilà
en gros, devant ton (message), tu mets async
et dans ton const avatarList = await message.mentions
pour plus d'infos sur async et await en js --> https://developer.mozilla.org/fr/docs/Learn/JavaScript/Asynchronous/Async_await
Plus récemment, les fonctions async et le mot-clé await ont été ajoutés au langage JavaScript avec l'édition intitulée ECMAScript 2017. Ces fonctionnalités agissent essentiellement comme du sucre syntaxique sur les promesses, rendant le code asynchrone plus facile à écrire et à lire par la suite. Elles font en sorte que le code asynchrone ressem...
le le me comment mon async
client.on('messageCreate', async (message) =>
t'as mis await aussi ?
oui
tente de console.log avatarList
je le met ou ?
avant le message.channel.send
je me juste sa ?
Quel intérêt
sur un .map ?
oups
bah je pense que le problème vient de ce que ça renvoie sans doute
(logik)
Oui c’est sûrement envoyé avant que le map soit fait
Sois tu passes par un for sois tu en fais une promise et tu envoies quand c’est terminé
je suis en train daprendre je connais pas tout sa et le gars il a pas derreur alors quond a le meme code
Yes, par contre, si quelqu'un mentionne plusieurs personnes dans son message, ça va renvoyer plusieurs avatar
c'est le but
ah oké x)
mais faut deja arriver a mentionner 🤣
Par contre avatarList ça va être un tableau de string
Je sais pas si tu peux envoyer un tableau directement donc à vérifier
surement que non
le gars fait sa et sa marche très bien
donc on peut pas le regler ?
qui est ?
ça devrait jpense marcher
par contre simplement
fais attention à ce que ton message dépasse pas les 2000 caractères
@sharp grail
const Discord = require("discord.js");
const { PREFIX } = require("../config.js");
const message = require("../events/message.js");
const db = require("quick.db");
module.exports.run = async (client, message, args) => {
const joueur1 = message.author
const joueur2 = message.mentions.members.first()
const argent = args[1]
const shifumiembed = new Discord.MessageEmbed()
.setColor("WHITE")
.setDescription(`**Tu joues une partie de shifumi avec ${joueur2}`)
.addField("\u200B", '✊ Pierre', true)
.addField("\u200B", "🍃 Feuille", true)
.addField("\u200B", "✂ Ciseaux", true)
const shifumiembed2 = new Discord.MessageEmbed()
.setColor("WHITE")
.setDescription(`**Tu joues une partie de shifumi avec ${joueur1}`)
.addField("\u200B", '✊ Pierre', true)
.addField("\u200B", "🍃 Feuille", true)
.addField("\u200B", "✂ Ciseaux", true)
if (!joueur2) {
message.channel.send(`Veuillez mentionner une personne avec qui jouer !`)
} else {
if (joueur2.id === joueur1.id) {
message.channel.send(`Vous ne pouvez pas jouer contre vous-même !`)
} else {
if (!argent) {
message.channel.send(`Veuillez mettre le nombre d'argent à parier !`)
} else {
if (joueur2 || argent) {
const m = await joueur1.send(shifumiembed);
m.react("✊").then(() => m.react("🍃") && m.react("✂"))
const filter = (reaction, joueur1) => {
return (
["✊", "🍃", "✂"].includes(reaction.emoji.name) && user.id === message.author.id
);
};
m.awaitReactions(filter, {
max: 1,
//une seule reaction par message
time: 60000,
//60 seconde pour les faires
errors: ["time"],
}).then((collected) => {
const reaction = collected.first();
})
const m2 = await joueur2.send(shifumiembed2);
m2.react("✊").then(() => m2.react("🍃") && m2.react("✂"));
const filter2 = (reaction, joueur2) => {
return (
["✊", "🍃", "✂"].includes(reaction.emoji.name) && user.id === message.joueur2
);
};
m2.awaitReactions(filter2, {
max: 1,
//une seule reaction par message
time: 60000,
//60 seconde pour les faires
errors: ["time"],
}).then((collected) => {
const reaction = collected.first()
})
} else {
}
}
}
}
}
module.exports.help = {
name: 'shifumi',
};```j'suis sur un bon début ?
v12
je sais pas j'préfère
mais sinon
ça passe ?
ça peut marcher ?
alors, au niveau de l'argent par contre, tu vérif pas si la personne a assez d'argent, et si la personne qui perd dit l'argent à l'autre, tu vérifies par l'argent de l'autre personne
et au lieu de mettre des else partout, tu peux juste mettre des return
Si si je vais le faire j'essaye de faire le plus galère avant
Ah
oui aussi
et if (joueur2 || argent) ?
bah si y'a une mention et la somma à misé
ça continue le code
mais j'crois j'étais aps obligé de le mettre
là c'est pas ce que ça va faire, mais tu peux juste enlever car tu fais les vérifs avant 🤔
et ah par contre, je pense que tu te recevras une error si la personne a pas répondu au bout de 60 secondes, donc peut-être ajouter un catch
yess j'allais le faire
bv
sinon good je pense
j'en peut plus j'essaye de mettre fs mais sa veut pas il me met que des truc sont pas définis alors que ya pas longtemp je l'avais fait et sa marchait
const { fs } = require("fs"); ?
nn enfaite j'avais mi un truc pour les intent mais maintenant il me dit que Discord n'est pas défini
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
j'avais mi sa
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
const command = require(./commands/${file});
client.commands.set(command.name, command);
}
j'ai rajouter sa
const { Client, Intents, Collection } = require('discord.js');
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 command = require(./commands/${file});
client.commands.set(command.name, command);
}
faut que je mettent sa ?
Oui
il me met const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
^
TypeError: Cannot read property 'readdirSync' of undefined
Faut rajouté le module fs après
c'est fait
Ba c'est good normalement ?
nn sa me met lerreur
ah je sais
j'ai pas derreur mais sa ne me met pas les commande
donc ?
Pourquoi tu met des intents si tu es en v12 aussi ? 🤔
:_: Discord Developer docs results:
• Gateway: Gateway Intents
• Change Log: Gateway v6 Intent Restrictions
je suis en v13
Ok
ajoute l'intent GUILD_MESSAGES
@sharp grail j'abandonne 😭
et pour la liste de tous les intents tu cliques sur gateaway intents qui te donnera la liste ainsi que les events auquel tu peux accéder grâce à ces intents
quel est le problème ?
const Discord = require("discord.js");
const { PREFIX } = require("../config.js");
const message = require("../events/message.js");
const db = require("quick.db");
module.exports.run = async (client, message, args) => {
const joueur1 = message.author;
const joueur2 = message.mentions.members.first();
const argent = args[1];
const shifumiembed = new Discord.MessageEmbed()
.setColor("WHITE")
.setDescription(`**Tu joues une partie de shifumi avec ${joueur2}`)
.addField("\u200B", "✊ Pierre", true)
.addField("\u200B", "🍃 Feuille", true)
.addField("\u200B", "✂ Ciseaux", true);
const shifumiembed2 = new Discord.MessageEmbed()
.setColor("WHITE")
.setDescription(`**Tu joues une partie de shifumi avec ${joueur1}`)
.addField("\u200B", "✊ Pierre", true)
.addField("\u200B", "🍃 Feuille", true)
.addField("\u200B", "✂ Ciseaux", true);
if (!joueur2) {
message.channel.send(`Veuillez mentionner une personne avec qui jouer !`);
} else {
if (joueur2.id === joueur1.id) {
message.channel.send(`Vous ne pouvez pas jouer contre vous-même !`);
} else {
if (!argent) {
message.channel.send(`Veuillez mettre le nombre d'argent à parier !`);
} else {
if (joueur2 || argent) {
const m = await joueur1.send(shifumiembed);
m.react("✊").then(() => m.react("🍃") && m.react("✂"));
const filter = (reaction, joueur1) => {
return (
["✊", "🍃", "✂"].includes(reaction.emoji.name) &&
user.id === message.author.id
);
};
m.awaitReactions(filter, {
max: 1,
//une seule reaction par message
time: 60000,
//60 seconde pour les faires
errors: ["time"],
}).then((collected) => {
const reaction = collected.first();
});
const m2 = await joueur2.send(shifumiembed2);
m2.react("✊").then(() => m2.react("🍃") && m2.react("✂"));
const filter2 = (reaction, joueur2) => {
return (
["✊", "🍃", "✂"].includes(reaction.emoji.name) &&
user.id === message.joueur2
);
};
m2.awaitReactions(filter2, {
max: 1,
//une seule reaction par message
time: 60000,
//60 seconde pour les faires
errors: ["time"],
}).then((collected) => {
const reaction = collected.first();
});
}
}
}
}
};
module.exports.help = {
name: "shifumi",
};
j'suis censé faire quoi après
j'me suis perdu
je le met ou
;_;
je suis crever sa fait 5h que je regle des pb 🤣
@delicate yewTu devrais faire tes vérifs avant
j'ai trouve
je les fais avant ??
regarde tout en haut
Au tout début du code oui @delicate yew
oui les vérifs, et après tu vérifies si les deux réponses sont arrivées, si oui tu interprètes les réponses
Bonjour,
je voudrais savoir comment je peux faire comme un ```lua
for k, v ipairs () do
end
ça je sais pas comment faire justement
sa marche tj pas je peut pas faire les commande 🤬
montre ton code
lesquelle
soit tu enregistre la réponse dans une collection, avec un id unique comme l'id de l'utilisateur suivi du timestamp du message par exemple ou tu stockes ces réponses dans des varaibles, que tu peux déclarer avant pour pouvoir les utiliser dans les deux then
oula
tu sais comment marchent les collections de discord js ?
les fils sont la pour sa
ton client
oups
nan car la perso je my retrouve pas
Le salon est fais pour ça aussi 🤷♀️
mon client ?
quand plusieurs,personne demande de l'aide
🤔
il a pas tort
la déclaration de ton client
je suis perdu la
Ton fichier principal @willow dome
ah
@sharp grail mais là du coup il restes que " si joueur 1 fais pierre et joueur 2 feuille, joueur2 gagne " etc etc avec toutes les possibilitées ?
à peu près oui, et les vérifs, et la victoire
enfaite j'ai limpression que mon bort ne detecte pas les commandes dpuis quelle sont dans un fichier
Tu peux me faire un exemple dans mon code stp comme ça je fais tout le restes pcq je sais pas du tout comment faire
Hop voilà ce sera + simple je pense vu qu’il y a quand même 2 conversations
-__-
mdrr
Bonsoir,
Comment je peux Fetch tout les channels pour check lequel est dans ma base de donner pour ensuite exectuer une action sur tous les channels qui y sont ?
Tu as channels sur ta guilde :
https://discord.js.org/#/docs/main/stable/class/GuildChannelManager
Tu peux récupérer tous tes channels ici
- Tu fetch tes channels
- Tu loop dessus
- Tu check si c'est dans ta bdd
- Tu envoies un message
Je n'y arrive pas ça me sort une error, possibilité de venir m'expliquer dans 20 minutes en voc ?
Salut salut,
J'ai un soucis avec mon bot discord et le système de reaction
En gros quand le bot démarre il check le message auquel on peut réagir existe, s'il existe on le fetch sinon on l'envoie.
Le problème étant qu'il détecte "mal" le message qui existe déjà
Le code
this.client.on('ready', () => {
let lastVerifiedMsgId = this.client.guilds.cache.get(this.serverID).channels.cache.get(this.channelIDForValidation).messages.channel.lastMessageID;
console.log(this.client.guilds.cache.get(this.serverID).channels.cache.get(this.channelIDForValidation).messages.channel.lastMessageId);
console.log(lastVerifiedMsgId, lastVerifiedMsgId == null, this.channelIDForValidation);
if (lastVerifiedMsgId == null) {
this.sendEmbed();
} else {
this.client.guilds.cache.get(this.serverID).channels.cache.get(this.channelIDForValidation).messages.fetch(lastVerifiedMsgId, true, false).catch((error) => {
console.log(error);
console.log('-------');
console.log(error.code);
if (error.code == 10008) { // Le dernier message n'éxiste plus, il faut le re-créer
this.sendEmbed();
}
});
}
});
Output
883282882922164264
undefined true 883007409449209896
En gros j'ai l'impression que quand j'assigne la variable "lastVerifiedMsgId", ça ne fonctionne pas du premier coup, mais la deuxième fois dans le console.log ça fonctionne
Car ici :
this.client.guilds.cache.get(this.serverID).channels.cache.get(this.channelIDForValidation).messages.channel.lastMessageID;
Tu as mis : lastMessageID
Sauf que dans la nouvelle version (v13), c'est lastMessageId maintenant
Chose que tu as faite dans ton console.log
@full scaffold
@full scaffold il faut faire des variables intermédiaires hein, le code est beaucoup moins lisible comme ça là
Ok, je vais faire ça
là tu peux en faire sur la guild, et sur le channel déjà
Oui c'est ce que je comptais faire
@ashen rapids hey !
Voici ma réponse, tardive, à ta solution pour mon soucis avec React et mon module. Le soucis venait non pas de base45 mais cbor, qu'il fallait bien remplacer par cbor-js.
Mais ce module manque d'une fonction qui ne me permet pas de l'utiliser dans mon projet.
Je crois bien que c'est d'ailleurs ici qu'il va s'arrêter 😦
Quoiqu'il en soit, merci pour ta réponse qui était bel et bien la bonne !
Bonjour,
J'ai un problème, quand je change plus de 2 fais le nom du channel celui-ci, je ne peux plus le faire ni supprimer le channel
Code pour voir si tu as pas fais d'erreur ? @opal harness
Att
🤔
bot.on('messageReactionRemove', (reaction, member)=> {
if(member.bot) return;
if(reaction.emoji.name == ":bookmark_tabs:"){
if(bdd["ticket"]["claimby"][reaction.message.channel.id] = member.id){
delete bdd["ticket"]["claimby"][reaction.message.channel.id]
Savebdd()
const panelclaimoff = new Discord.MessageEmbed()
.setColor('#FF8800')
.setTitle(`Prise en Charge`)
.setAuthor('ToDev Bot', 'https://i.imgur.com/GC5ihqZ.png')
.setDescription(`:x: ***<@${member.id}> a décidé de ne plus prendre votre ticket !***`)
.setTimestamp()
.setFooter(`${member.id}`, 'https://i.imgur.com/GC5ihqZ.png');
reaction.message.channel.send(panelclaimoff);
reaction.message.channel.setName("UnClaim")
}
}
})
@dire latch
Hmm
Alors ?
Tu utilise une bonne version ?
Sans confondre avec une autre version qui pourrait avoir une légère différence ?
@opal harness
J'utilise la V12
Ok
Ah, essaye avec la v13, ça a changé depuis
Mais pourquoi il devrait aller en v13 ? Il est en v12 -__-
prends l'habitude de check une value avec === et non = ou ==, donc dans ton if remplace = par ===
et check avec un console.log voir si il passe dedans
La syntaxe n'est pas la même et si je ne me trompe pas, les noms des fonctions des embeds sont différents.
il est en v12, la v13 n'impacte pas son projet si il est en v12
Et effectivement, mets des console.log un peu partout
ah, bon
parce que j'ai connu des cas comme ça, pas personellement, mais bon
si la v13 n'est pas installée sur son projet ça changera rien, à part si la v12 n'existe plus, or ce n'est pas le cas
c'est peut-être du à une limitation de discord ceci dit
Et celle-ci est de combien ?
Ah nan mais je sais pas, je disais ça juste pour peut-être, à vérifier
Mais en gros le soucis c'est quoi concrètement 🤔
mais déjà, ton "=" dans ton if c'est pas good, mets "===" pour check une value
moui
🙂
après manifestement son truc marche donc
mais c'est bizarre que déjà ça passe avec ça effectivement
strange, fais les modifs, test et dis nous le résultat
hi! comment je récupère l'id de l'utilisateur qui a utiliser une commande ? g rien trouvé sur le web
async run(msg, message, client, { question }) {
//msg.say(`La question est: ${question}`);
test = message.author.username
IDutilisateur = message.author.id
const ImportQuestion = {
IDutilisateur:{
Question : question
}
};
msg.say(user.id)
msg.say(test)
}
``` ça me met soit author n'est pas déclaré soit que id n'est pas décaré
je butte sur ça
C'est un event ça ?
Possible de venir en voc car c difficile de tout montrer en expliquant par écrit
console.log(message.author)
t'utilises commando non ?
je ne suis pas disponible en vocal désolé
Quelqu'un de dispo pour regarder le problème avec moi ?
t'as fais les modifs qu'on t'avait dit ?
oui
Lesquelle ?
^
Pourquoi 3 ?
donc à part message le reste te sert à rien, à part question si t'as bien mis ton args:[{}]
"=" c'est pour déclaré une variable à une valeur quelconque, "==" pour check des types, et "===" pour check des values
ok
ouais mais je souhaite recuperer l'id de l'auteur (du msg)
que je metterais dans un json plus tard
Ca ne change rien
oui, bah en théorie ( message.author.id ) sort l'id du créateur du message
console.log à l'intérieur de ton if
@white sedgeFaut que tu sois dans l'event message
voir si il rentre dedans
avec commando rien à voir, pas besoin d'event
Ah je connais pas commando
Il est sous commando, donc pas besoin ^^
Mon message est bien send mais le channel n'est juste pas rename et ensuite si je veux le suppr celui si ne veut pas
aucune erreur ?
Nop
tu le modifie plusieurs fois d'affilée ?
Yes
Aide Nom dutilistateur
alors ça doit être pour ça, laisse genre 1-2 secondes avant chaque modif
histoire de pas embrouiller l'api, sûrement un rateLimit quelque part faut check ça dans la doc
c bon j'ai plus rien
techniquement le '==' c'est pas que pour check des types
Les gars, bonsoir, vous savez pourquoi mon bot n'envoi aucun mp avec ce code ?
if (!banMember.bannable) return message.channel.send(embederreur)
try {
message.guild.members.ban(banMember)
banMember.send(`:warning: Vous avez été ban de ${message.guild.name} pour la raison : ${reason || "Aucune raison."}`).catch(() => null)
} catch {
message.guild.members.ban(banMember)
}```
( les mps sont bien ouvert )
inverse, ton ban après ton send
je me le send avant ?
1 à 2 secondes ne change rien mais 10 minutes oui donc je vais mettre un cooldown mais j'aimerais que quand une réaction est mise alors je suppr la réaction et je la remet 10 minutes après
if (!banMember.bannable) return message.channel.send(embederreur)
try {
banMember.send(`:warning: Vous avez été ban de ${message.guild.name} pour la raison : ${reason || "Aucune raison."}`).catch(() => null)
message.guild.members.ban(banMember)
} catch {
message.guild.members.ban(banMember)
}```
tu send avant de le ban
ha d'accord
je vois même pas ou il le ban
message.guild.members.ban(banMember)
c'est cette ligne ?
Yes @keen narwhal
Ya le .ban dedans mdrr
@dire latch@oak turret, merci les bgs
Dr np @keen narwhal
en gros === ça renvoie true si value de même type et même valeur et == c'est si même type ou même valeur
c'est bien ça ?
par type j'entends, string number etc.
c'est ce que j'avais compris en tout cas
== -> valeur uniquement
=== -> valeur et type
Bonjour,
Comment je fais pour retirer la réaction "📑" à un message ?
Et pour modif un message ?
sinon @opal harness il existe une documentation pour discord js et un guide pour t'aider
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.
ensuite pour répondre à ta question, c'est ton message . edit
tu peux voir ça sur la class message au niveau des méthodes
:_: Message#edit()
Edits the content of the message.
Bonjour,
j'ai une error : ```
C:\Program Files\nodejs\node.exe .\index.js
Uncaught Error: Cannot find module 'timers/promises'
Require stack:
- c:\Users\sandr\Documents\AtlanticaBotDiscord\index.js
Debugger attached.
Waiting for the debugger to disconnect...
internal/modules/cjs/loader.js:888
throw err;
^
Error: Cannot find module 'timers/promises'
Require stack:
- c:\Users\sandr\Documents\AtlanticaBotDiscord\index.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:885:15)
at Function.Module._load (internal/modules/cjs/loader.js:730:27)
at Module.require (internal/modules/cjs/loader.js:957:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (c:\Users\sandr\Documents\AtlanticaBotDiscord\index.js:10:24)
at Module._compile (internal/modules/cjs/loader.js:1068:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
at Module.load (internal/modules/cjs/loader.js:933:32)
at Function.Module._load (internal/modules/cjs/loader.js:774:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [ 'c:\Users\sandr\Documents\AtlanticaBotDiscord\index.js' ]
}
Est ce que qq1 peut m'aider
Il n'a simplement pas trouvé le module "timers/promises"
C'est tout, ne va pas chercher plus loin @opal harness
Merci mais Zaros m'a aidé
Bonjours j'aurais une question ?
bonjour, pose ta question directement :-)
salut enfaite je suis en première Sti2d je conte faire un bts pour faire une alternance dans le webmaster j'aimerais savoir si cela et mieux de débuter avec Htlm ou javascript ?
Le mieux est de commencer par html étant donné qu'en JavaScript, la principale chose que tu fera ce sera manipuler le DOM (donc le contenu de ta page, donc les éléments que t'auras placé en html...)
Pourquoi ça ne fonctionne pas ?
reaction.message.edit('This is my new content!')
.then(msg => console.log(`Updated the content of a message to ${msg.channel.id}}`))
qu'est ce qui ne fonctionne pas
mmh
montre ton code avec un peu plus de globalité ?
et tu as pas d'erreur?
Le messageà éditer contient un embed ou juste un content ?
Une mention et un embed
Y a des gars qui maitrisent le THREE.js ici ?
Précise ce qu’il doit modifier dans le payload alors
Je veux modifier l'embed
Pose directement t'a question 🙂
Pour ça ne fonctionne pas ?
const panelticketclaimclose2 = new Discord.MessageEmbed()
.setColor('#f1c40f')
.setTitle(`Ticket Animation`)
.setAuthor('ToDev Bot', 'https://i.imgur.com/GC5ihqZ.png')
.setDescription(`***Ticket créé par :*** <@${bdd["ticket"]["ticketmention"][reaction.message.channel.id]}> \n ***Raison :*** ${bdd["ticket"]["ticketinfo2"][ticketname.id]} \n *** Pris en Charge Par :*** <@${member.id}>`)
.setTimestamp()
.setFooter(`${ticketname.id}`, 'https://i.imgur.com/GC5ihqZ.png');
reaction.message.edit({ embeds: [panelticketclaimclose2]})
Quesce qui fonctionne pas ? @opal harness
Mon message n'est pas edit
Ah dac
Mon message est delete
Je console.log quoi ?
Pour voir si sa fonctionne
Tu ty prends mal
Si quelqu'un a déjà utilisé l'outil open-source SurveyJS ou l'outil GrapeJS, faites moi signe !
Pas spécialement besoin d'aide, juste avoir des retours, on sait jamais !
Yo pourquoi j'ai une error ?
(node:8016) UnhandledPromiseRejectionWarning: TypeError: message.channel.guild.member.ban is not a function
at Object.module.exports.run (c:\Users\sandr\Documents\AtlanticaBotDiscord\commandes\ban.js:52:46)
at Client.<anonymous> (c:\Users\sandr\Documents\AtlanticaBotDiscord\index.js:134:35)
at Client.emit (events.js:388:22)
at MessageCreateAction.handle (c:\Users\sandr\Documents\AtlanticaBotDiscord\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (c:\Users\sandr\Documents\AtlanticaBotDiscord\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (c:\Users\sandr\Documents\AtlanticaBotDiscord\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (c:\Users\sandr\Documents\AtlanticaBotDiscord\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (c:\Users\sandr\Documents\AtlanticaBotDiscord\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (c:\Users\sandr\Documents\AtlanticaBotDiscord\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (events.js:376:20)
(Use `node --trace-warnings ...` to show where the warning was created)
message.channel.guild.member.ban(utilisateur.id);
if(temps != 0){
setTimeout(function(){
bot.guild.members.unban(utilisateur.id)
}, temps*unité)
}
car message.channel.guild.member n'existe pas
Et je le définit comment ?
message.guild.members.fetch(utilisateur.id).then(m => m.ban()) ou message.guild.members.cache.get(utilisateur.id).ban()
sinon la doc ✨ au lieu d'inventer des trucs qui n'existe pas x)
(node:12100) UnhandledPromiseRejectionWarning: DiscordAPIError: Invalid Form Body
DICT_TYPE_CONVERT: Only dictionaries may be used in a DictType
at RequestHandler.execute (c:\Users\sandr\Documents\AtlanticaBotDiscord\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at async RequestHandler.push (c:\Users\sandr\Documents\AtlanticaBotDiscord\node_modules\discord.js\src\rest\RequestHandler.js:39:14)
(Use `node --trace-warnings ...` to show where the warning was created)
<node_internals>/internal/process/warning.js:43
(node:12100) 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:43
(node:12100) [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.
ah je viens de voir, ya plus simple, tente juste message.guild.members.ban(utilisateur.id)
sinon, c'est en fait car quand tu get le membre tu dois mettre des optionsqui sont sensés être optionnelles
(désolé)
Bonjour,
Quel est l'évenement du type bot.on("guildMemberAdd", member => {
Mais quand qq1 rejoind un channel vocal ?
Salut! Alors pour la v12 c'était avec l'event voiceStateUpdate et du coup tu comparais si before existait pas ou l'id du channel de before est pas pareil que le new ça veut donc dire qu'il rejoint le channel. Ne connaissant pas la v13 je peux pas te garantir que ça fonctionne toujours comme ça 
Mais quelle variable par exemple pour une MessageReactionAdd j'ai reaction, member mais avec voiceStateUpdate j'ai le doit à quoi ?
Documentation suggestion from @hazy mirage:
:_: (event) Client#voiceStateUpdate
Emitted whenever a member changes voice state - e.g. joins/leaves a channel, mutes/unmutes.
Tu as tout ce genre d’info sur la doc
Faut pas avancer à l’aveugle ça fonctionnera pas
Je trouve comme si il rejoint ou si il quitte ?
Tu check la state
Ton oldState
Quelle state ?
Regarde ce que ton event voiceStateUpdate prends en argument
Mais je l'utilise comment ?
Je le met tout en haut de mon code comme ça ?
Je te conseille de regarder comment DiscordJS fonctionne avant
Le système d'events principalement et comment ça fonctionne
Excellent guide : https://discordjs.guide/#before-you-begin
Comment je fais pour lire un fichier.mp3 dans un channel ?
Est-ce que tu as au moins pris le temps de lire les ressources qu'on t'a envoyé ? Parce que ce que tu demande c'est dans le guide Discord.js
Wa mais il est vraiment pratique ce guide
Bonsoir ! J'essaie de faire une commande qui permettrais de faire des équipes équilibrées (pour des parties entre pote).
J'ai associé un niveau a chaqu'un de mes amis dans un fichier json, et j'ai pensé a essayer toutes les possibilités avec une boucle while jusqu'a ce que la somme des deux équipes soit égales. Sauf que je bloque un peu et je sais pas comment m'y prendre, quelqu'un aurais une idée de comment je pourrais faire ça ? Désolé du dérangement et merci d'avance pour vos réponses 😄
(Pour la syntaxe de la commande c'est un truc du genre &maketeam <mention> <mention> <mention> <mention> etc...
Si j'ai bien compris, chacun de tes amis ont un niveau
T'aimerais faire en sorte que ton bot fasse 2 équipes en faisant en sorte que la sommes des levels dans chaque équipe soit au plus proche ?
Ou égale
C'est exact
Et pour ça j'ai pensé a une boucle while, mais j'ai pas plus d'idées
Si quelqu'un aurais une idée de comment faire ça je suis prenneur, pas de code pour que je puisse apprendre ^^
Il faudrait réfléchir à un algo opti
Tu pourrais avoir deux variables. Un avec le score de la team 1 et un avec le score de la team 2
C'est ça
const discord = require("discord.js");
const fs = require("fs")
module.exports.run = async (client, message, args) => {
const level = JSON.parse(fs.readFileSync('./level.json'))
let { mentions } = message
let nombre = mentions.users.size
if (nombre < 4) return message.channel.send("Il faut un minimum de 4 personnes pour faire une team.")
let erra = []
mentions.users.array().map(async user => {
if (erra.length === 0) {
if (!level.players.find(e => e.id === user.id)) {
erra.unshift("ok")
return message.channel.send(`:x: ERREUR ! ${user} n'es pas dans la base de donnée !`)
}
}
})
if (erra.length !== 0) return;
}
module.exports.help = {
name: "maketeam"
}
c'est mon code actuel
ça check juste que toutes les personnes mentionnées aient bien un niveau associé
Tu créés une boucle dans laquelle tu vas d'abord mettre ton joueur dans la team 1
À la prochaine itération, tu le places dans la team 2, en incrémentant le score de la team
Et dans la troisième itération, tu check celui qui a le score le plus bas
Et tu attribues le joueur
En gros, j'ajoute le joueur dans la team avec le score le plus bas ?
J'aime entendre ça 😍
C'est ça
Mais du coup il se peut qui'il y'ai une équipe avec 23 de score par exemple, et le dernier joueur a 10 de score
ça va faire 33
Et à chaque itération, tu ajoutes le level du joueur au score de la team
alors quen face du coup ça va etre 20
ça c'est pour créer les teams, le truc c'est que je veux pouvoir, parmis toutes les possibilités, tirer la team la plus équilibrée par rapport a la deuxième team
Non car si ta team est à 20, c'est chez lui que le joueur level 10 ça être attribué. Pas dans la team avec le score de 23
oui mais du coup, ça va faire 30 23
et c'est pas équilibré xd
30 est trop différent de 23
Oui bien-sûr, c'est une première idée d'algo, plutôt simpliste
je vais tester ça, merci !
tu as pas une idée pour faire un truc plus poussé et qui fait des équipe plus équilibrés du coup
Autre idée qui peut s'appliquer facilement sur cet algo
Alors juste une question relative au javascript directement cette fois ci, si jamais j'augmente la valeure de ma variable "team1" dans la boucle, est-ce que ça va marcher ?
let team1;
let team2;
mentions.users.array().map(async user => {
})
genre comme ça , et j'ajoute le lvl de chaque utilisateur dans la boucle map
il me semble que quand je définis une variable dans une map ça ne marche pas
Tu peux trier ta liste avant
C'est-à-dire que ça trie de sorte à avoir un tableau avec les plus forts en premier
Comme ça c'est eux que tu vas placer en premier
Ce qui fait qu'à la fin de ta boucle, tu vas trier les plus bas niveaux, et donc avoir un équilibre plutôt correct
Alors le truc c'est que actuellement mon objet utilisateur est distinct de mon objet qui conties le level
Désolé si c'est pas clair mais en gros
J'ai :
- Mes utilisateurs mentionnés, dans mentions.users.array()
- Les utilisateurs et leurs niveaux, dans level.json
Je dois donc créer un nouvel array qui contiens les joueurs et leur lvl, c'est ça ?
Ou une collection du coup, ça me parait mieux
Désolé si je t'embrouille ^^
Oui tu peux mapper une collection
L'objectif c'est que tu ais quelque chose de simple pour assigner le level correspondant à ton player
pour assigner le level j'ai une autre commande &setlvl qui change le niveau du joueur dans mon fichier level.json
Yep mais du coup quand tu fais la commande pour assigner les teams, faut bien que tu récupères tes levels dans le JSON
Yep t'inquiète c'est fait
Si tu regarde mon code plus haut j'utilise déja ça pour checker que touts les utilisateurs aient un level assigné
Oui tu les check mais maintenant faudrait stocker dans une variable le level de chaque player
Pour que tu puisses loop ensuite dessus
yep je viens d'ajouter ça
Niquel
c'est ma première boucle
pour check si touts les utilisaters ont bien un lvl
let erra = []
mentions.users.array().map(async user => {
if (erra.length === 0) {
if (!level.players.find(e => e.id === user.id)) {
erra.unshift("ok")
return message.channel.send(`:x: ERREUR ! ${user} n'es pas dans la base de donnée !`)
}
if (level.players.find(e => e.id === user.id)) {
playerslvl.set(e.id,level.players[level.players.findIndex(e => e.id === member.id)].lvl)
}
}
})
if (erra.length !== 0) return;
en gros je check que tout le monde soit bien dans la base de donnée, et si un des utilisateurs ne l'est pas j'ajoute un élement a l'array "erra" pour dire plus tard qu'il y'as une erreur
Tu peux découper ton code en plusieurs variables pour que fasse pas des lignes à rallonge compliqué à lire
C'est surement pas une bonne manière de faire
je sais
mais ça marche ! xd
Regarde comment utiliser Throw sur JavaScript
Dès que quelqu'un n'a pas de level , tu throw
C'est un bon exercice pour apprendre la gestion d'erreurs en JavaScript 😁
D'accord je vais voir ça, merci beaucoup !
Je vais pas plus te déranger et essayer de gérer ça par moi meme, merci beaucoup de ton aide !
Pas de soucis !
Hésite pas à me tenir au courant, ça m'intéresse 😇
Et encore une fois, c'est un algorithme parmis tant d'autre, faut juste le réfléchir et le tester pour obtenir quelque chose le plus optimal possible
Mais celui que je t'ai expliqué, avec le sort() et la boucle, tu peux déjà avoir un excellent équilibrage
Alors je suis allé voir sur le wiki pour voir comment utiliser throw, et je vois pas vraiment comment je pourrais utiliser ça dans mon code
T'as une fonction qui check si les players ont un level
Cette fonction, tu l'appelles dans un try / catch
c'est pas une fonction
Si une erreur est survenue, le contenu de ton catch est appelé
Et bien tu peux en créer une
Une fonction qui check si tout le monde a un level.
checkPlayersLevel()
C'est surement + pertinent et plus propre au niveau de ton code
Pas de soucis 👌
Yo, désolé de te (re)déranger
Du coup j'ai avancé un peu, j'ai fait cette boucle :
var team1 = null
var team2 = null
await playerslvl.map(async user => {
if (team1 === null) {
team1 = user.lvl
} else if (team2 === null){
team2 = user.lvl
} else if (team1 < team2){
team1 = team1 + user.lvl
} else if (team2 < team1) {
team2 = team2 + user.lvl
}
})
sauf que quand je console.log team1 et team2, je me rend compte que les valeurs ont tout simplement pas changée du tout
j'ai l'impression que vu que je suis a l'intérieur d'un .map, ça change la valeur que pour le .map et pas en dehors
Pas besoin d'autant de conditions déjà, tu peux faire plus simple
Et rétrécir un peu le bloc
Aussi pourquoi utiliser async dans ton Map() ?
c'est vrai que la il est inutile
je l'enlève
Et surtout ton Map() n'est probablement pas le meilleur moyen de faire ce que tu veux
Un forEach suffirait amplement
c'est quoi la différence entre les deux ?
La méthode Map permet de créer un nouveau tableau en fonction de ce que tu return dans ton map
forEach c'est pour parcourir ton tableau
Ici c'est ce que tu souhaites faire
yep du coup j'ai remplacé par un forEach
Déjà tu peux y voir plus clair 😁
Pareil, pourquoi tu utilises await sur ton Map() ?
Tu sais à quoi sert await ?
Ouais ça permet de dire qu'on dois executer ça avant de passer au reste du code
du coup j'ai fait ça
mais ça me retourne ça :/
Presque mais on peut pas le placer partout
Seulement sur les promises
Await permet d'attendre la résolution d'une promesse avant de passer à la suite
J'ai rien compris au concept de pormises ahaha
Mais ça viendras
Oui donc déjà éviter de le mettre partout
Ton éditeur d'ailleurs t'indique avec un petit trait que ça sert à rien
yep c'est pas faux, je vais l'enlever du coup
mais t'aurais une idée de pourquoi mes teams1 et team2 sont undefined ?
oh c'est bon
problème reglé
c'est pas "lvl" mais "level" ^^
Mais du coup les teams sont pas du tout équilibrées xD
C'est l'algorithme de base sans le sort ça ?
Petit trick
Pour incrémenter une variable, tu peux faire directement team1 += user.lvl
Ca t'évite de réécrire team1
Et que se passe t'il si ta team1 et ta team2 ont le même score ?
Tu peux encore améliorer ta chaîne de condition, pour que ça soit plus court
Et bien d'après ton code, il attribue le player à aucune équipe
Oui faut utiliser le inférieur ou égal
merci beaucoup 😄
mais du coup, mes équipes sont pas du tout équilibrés
ça me créer effectivement deux équipes
mais ça les éqilibre pas
?
yep
le sort ajoute quoi concretement ?
il va juste trier mon array playerslvl ?
Tu peux me screen un console log de ton playersLvl ?
c'est long
Oui et avoir les plus fort en premier
Envoie juste une partie
Si ton score c'est 20, ça doit pas être bien long haha
en gros
players lvl contiens des objets players
qui contiennent eux meme l'objet user que je prend de la mention, et le lvl
du coup pour prendre le level c'est user.level
et si j'veux l'username par exemple, c'est user.user.username
Fais un screen vite fait du console.log que je me fasse une idée
Non par user.lvl
L'objectif est d'avoir les fort en haut de la liste
je voulais dire .level ^^
my bad , je suis fatigué xd
Pour qu'ils soient réparti en premier
Les levels sont bien dans l'ordre décroissant ?
Donc t'as pas trié ?
