#javascript-typescript
1 messages · Page 107 of 1
Tu load bien les intéractions ?
ouais
Avec le bot invité avec les applications ?
Envoi le code qui load tes intéractions
`const { Client, CommandInteraction, MessageEmbed } = require("discord.js");
module.exports = {
name: "interactionCreate",
/**
*
* @param {} interaction
* @param {} client
*/
async execute(interaction, client) {
if(interaction.isCommand() || interaction.isContextMenu) {
const command = client.command.get(interaction.commandName);
if(!command) return interaction.reply({embds :[
new MessageEmbed()
.setColor("PURPLE")
.setDescription(" ❌ - Commande Inexistant")
]}) && client.commands.delete(interaction.commandName);command.execute(interaction, client) } }}`
t’as invité ton bot avec le scope applications.commands ?
oui
Il faut faire du debuggage pour voir à quel moment l'information arrête de circuler
Parce-qu'on va pas te poser toutes les questions une par une jusqu'à tomber par hasard sur la bonne
ça me repond
.
||
|
'
Handlers/Events.js:27
.
||
|
'
Handlers/Commands.js:38
undefined
Voilà qui aide beaucoup 
si tu veut ma ligne Handlers/Commands.js:38
console.log(Table.toString());
Doucement, on risque de se noyer sous l'information là
Ça doit venir de ta collection de commande
Mais en vrai je dis ça par logique hasardeuse parce-qu'on a aucun moyen de savoir d'où vient ton problème
Est ce que quelqu'un pourrait venir m'aider en vocal à régler ce soucis svp, je dois rendre le projet pour ce soir
C'est possible avec nodejs de modifier la page actuelle genre avec document.xx
Ou alors de la modifier avant de l'afficher
Alors oui techniquement tu peux simplement overwrite le fichier
Par contre pour les extensions propriétaire c'est chiant car t'aura pas un outil tout fait pour modifier le titre, ajouter une image etc
Ah je pensais tu parlais d'un fichier
Et c'est quoi le besoin concrètement ?
Enfaite j'ai une page HTML qui utilise un certain fichier JSON pour afficher des données, mais j'aimerais garder ce fichier json non accesible pour l'utilisateur donc le faire en backend
Donc tu veux envoyer le HTML générer
Typiquement si dans ton HTML il y a une liste, elle sera générer côté serveur à partir du json ?
C'est ça
Je t'ai répondu sur l'autre serveur
salut, j'ai un soucis en NextJS y'a des gens qui ont un peu d'expérience avec?
c'est un truc basique mais j'me casse la tête depuis 2h
tu devrais essayer de poser ta question ou d'exposer ton problème, on risque d'avoir du mal à le deviner
Bonsoir quelqu'un aurais le systeme pour quand on ban un membre discord sa le ban de tout les discord ou le bot est dessus ?
ouep autant pour moi, en gros j'ai fais un auth avec steam mais j'arrive pas à rediriger l'user si il n'est pas connecté
en gros là ça à l'air simple
en mode tu fais un isset sauf que j'ai testé tout les trucs dispo sur js
ensuite j'ai fais un try
sauf que même avec ça j'arrive pas
j'ai toujours une erreur
tu peux montrer le code de ce que tu as fait jusqu'à maintenant?
vas-y
là où il y a ton problème
mais là j'ai fais 100k de trucs différent
ptit question sur cela je rentre sa ou dans le code ?
j'te montre mon last essaie
visiblement j'ai supprimé tout pour revenir au problème
en gros là j'ai ça
pour un code comme ça
donc de base j'aurais pu faire un if user == nul
sauf que ça marche pas
alors que pourtant je set bien en null si y'a pas de session
c'est parce-qu'en jsx il faut utliser le ternaire
ça c'est normal
ouais là ça work
si ton component renvoi null ça équivaut à rien
non ça marche là
j'étais là à mon dernière essaie
sauf que là
j'arrive pas à rediriger
vers la page principale
dans ta méthode getServerSideProps tu dois retourner
return {
redirect: {
permanent: false,
destination: "/login",
},
props:{},
};
``` si user est null
return req.user ? {
props: {
user: req.user
}
} : {
redirect: {
permanent: false,
destination: "/login"
},
props:{}
}
c'est good
waw
tu sauve la vie j'étais entrain de tourner en rond
merci de ouf
ah
ça me return même si je suis login
t'es sûr que c'est req.user ? Et pas res.user
.
donc si tu console.log req.user avant le return il te log quoi quand tu es connecté?
parce-que je pense vraiment que c'est sur res.user que tu auras ton utilisateur connecté
tu peux montrer ton code?
et là quand tu es connecté ça t'affiche bien ton user?
montre moi ton code de getServerSideProps
là quand je suis login
avec le code comme ça
tout marche
ça affiche bien l'avatar et tout
le code à l'endroit où ca ne fonctionne pas ^^'
.
et ducoup j'ai des erreur parceque j'essaie d'affichier par exemple l'avatar
qui return nul
ah comme tout à l'heure
vasy je remet le code
wha j'suis tellement con
j'avais oublié de mettre le router.run
et là ça marche effectivement
putain merci
désolé d'être un galère comme ça
POUR CEUX QUI SUIVENT LA VIDEO TUTO POUR FAIRE UN RESEAU SOCIAL :
Si vous n'arrivez pas à faire le routage correctement, mettez le routage à jour avec react router 6 (https://www.youtube.com/watch?v=hOg-hJDw1NM&t=155s)
et dans index.js dans l'import de ReactDOM retirez le "/client" là ça marchera
🚀 1 Cours gratuit en t'abonnant à ma newsletter :
https://www.le-designer-du-web.com/news
Le lien du Discord : https://discord.gg/XFP75gW
Ma chaine en Anglais :
https://www.youtube.com/c/Learntocreate
Le Shop pour tes stickers ou autres : https://helloworld-store.com/
Je suis aussi sur la plateforme Tuto.com :
https://fr.tuto.com/format...
Bonjour ! Je cherche à sécuriser un maximum des données (nom, prénom, code postal, ville, mail) que je stocke dans un fichier JSON
D'une part je vais interdire l'accès au fichier, mais d'autre part j'aimerai crypter les données pour la conservation pour éviter qu'elles soient détournées si quelqu'un y avait accès
(pour précision j'utilise le mail à l'envoi du formulaire pour valider la participation de la personne, mais après je n'ai besoin que de conserver les données et de pouvoir les décrypter en cas de contrôle)
Je n'ai pas trouvé de solution satisfaisante, juste des pseudo-cryptages qui changent juste l'encodage.. j'hésite à me faire ma propre fonction '-'
Je ne crois pas que c'est très opti de stocker ça dans du json
Hm :/ faut donc que je passe pas du mysqli ? :x (remarque à priori là je pourrais crypter + facilement)
Je te conseillerais plus d'utiliser du MySQL c'est plus adapté.
Il faut que j'utilise du AJAX du coup ? :x Je suis plutôt orienté front j'avoue 😅
Il faut surtout que tu fasses une API x)
Actuellement tu as un back end ?
Pas de backend, pour choper les villes via les codes postaux j'ai une db json x)
Oui c'est mieux de faire une base de donnée plutôt que du json, après ça aurait été des petites données pourquoi pas mais bon là c'est pas le cas, t'as besoin d'aide pour l'API ? @crude ruin
étant donné que j'en ai jamais fait je veux bien haha
update : on va faire autrement pour le moment, la fonctionnalité n'est pas 100% nécessaire pour le lancement ^^ merci pour vos conseils, je vais prendre le temps de me renseigner sur tout ça pour améliorer le site ensuite ^^
salut , jarrive pas a lier mon js a l'html vous savez comment faire a part :
<script src="index.js"> </script>
Il faut link ton js a la fin de ton fichier juste avant la balise </html>
merci !!
Bonsoir, quelqu'un aurait un bon site ou autre sur lequel on peut trouver de bonnes anims de pop up ( quand on affiche un menu par ex ) ou autre ?
Je sais pas si c'est ça que tu veux mais si ça peut t'aider
sa ne marche pas
Qu'est ce que tu a comme erreur et c'est quoi ton code
je te montre attend
donc javoue que je seche
T'es fichiers ils sont organisés comment
change les backslash pour des /
yes je regarde
Ok alors c'est bien ton fichier qui n'est pas trouvé, il a raison met juste ./test.js
toujours pas
Erreur ?
La c'est ton fichier js le prbl
ligne 8 et 15 ?
je vois pas ou est le probleme
T'essaie d'avoir des élement qui n'exite pas dans ta page c'est logique mdr
comme quoi ?
Lignes 1 à 7
oui ?
Evite de télécharger des fichier js comme ça sur internet
pourquoi ?
c'est sur codepen logiquement c'est safe
Ca t'apporte rien si tu veux apprendre un language il faut coder
Copie le HTML aussi alors
c'est fait aussi
Bah non ton fichier html est vide
Importe ton js a la fin de ton fichier HTML comme je t'ai dis
je suis d'accord , c'est juste pour les projets de fin d'année
yes
ya plus derreur
mais c'est pas le truc que je veux a la fin
Je peux pas t'aider sur ça si tu donnes pas plus d'infos
Erreur ?
envoie ton code pen
c'est important ça ? : https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js
Oui
je doit le mettre ou ?
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js"></script> Juste avant ton js
sa change rien
Tu prends un truc sur codepen pour ton projet de fin d’année ?
C'est ce que je me disais mais j'ai rien dis
Surtout que le JS est pas très clair et opti non plus mdr
Et encore moins compréhensible
Le problème c’est surtout que t’es sensé savoir faire un minimum quand tu as des cours de code. Et vaut mieux éviter de prendre un truc aussi connu que les trucs hexagonaux
ça va gueuler lors de l'oral :x
Surtout que tu a pas l'air d'avoir beaucoup suivis en cours pour ne pas savoir link un fichier js, c'est pas méchant mais c'est la base quoi
Salut tout le monde je voulais juste savoir si des gens on déjà use des lib d'animations JS type gsap et si oui quel est le principale avantage comparé à des animations only css ? ( je parle d'animations plus poussé qu'un text qui rebondis ou un fade )
Salut, je voudrais rentrer dans une db firebase mais je n'y arrive pas qui pourrais m'aider svp ?
Hello ! I'm trying really hard to learn JS all by myself, but i am stuck on a problem..
I wanna make that when we enter the nickname on my friend's website, it shows "This user is banned".. but it shows the wrong result..
Could someone help me ? How can i fix it ? plz ping me
nvm ive found
It's not a good idea to use var in your case use let instead to have scope on function only. And use returns
je crois qu'il est français
en tout cas il a Windows en français
Why you don't make something like
let qsd = document.getElementById('nick')
let btn = document.getElementById('btn')
let usrsBan = ["coco", "mike"]
btn.addEventListener("click", () => {
let ban = false;
let input = qsd.value;
for (let i = 0; i>usrsBan.length; i++) {
if (usrsBan[i] === input) {
ban = true;
}
}
if (ban) {
//user is ban
} else {
//not ban
}
});
@keen narwhal
usrBan.find(i => i == input) ?
yep bien sur, mais c'est un peu fastidieux ce que tu fais avec ton itération (tu vas jusqu'au bout dans tous les cas )et des conditions x)
et surtout ça fonctionne mal
car si ton user ban est pas à la fin, ça remet à false
donc pas ouf
Si c'est par rapport a la sécurité, il veux apprendre le js on va pas lui demandé du backend mdrr
C'est pas faux en effet
Ouais c'est pas faux mais bon x)
Perso mon premier projet en js web ça a été de créé un système d'affichage des réunions futur a partir d'un json mdrr
Je trouve que c'était une bonne idée parceque on voit un peu de tout dedans
en gros faut faire des projets pour faire des projets juste pour remplir
c'est le soucis c'est que en cours on fait rien donc je fait par moi meme
C'est le but mais vous avez rien appris ?
hey
Uncaught DiscordjsError TypeError [CLIENT_MISSING_INTENTS]: Valid intents must be provided for the Client.
quel INTENT je dois ajoouter ?
J'arrive pas a comprendre pourquoi mon fichier json quand il est écrit il fini par faire ça
{"name":"coucou",.....},null
Le null je l'ai jamais demandé et il casse tout le code que j'ai fait a coté mdr
Ouais mais justement là tu ne fais rien par toi même :/ je veux pas être méchant mais tu pourrais essayé de le refaire avant (y’a des tutos sur YouTube)
euh data c'est un array?
fichier json
je suis daccord avec toi
Alors pourquoi tu le fait pas
pas le temps je doit le rendre lundi
On te l'a donné quand ?
ya 1 semaine
Donc tu avais de temps
yes largement
Au moins essaie de comprendre le js
Mais ?
je comprend pas
Mais code t'es propre truc, c'est sur que si tu t'arretes dés que tu comprend pas tu va pas y arriver
yes
Visiblement tu a pas l'air de t'y connaitre beaucoup commence par des projets simple
genre un pierre feuille ciseau
c'est assez simple
si tu veux j'ai un projet déjà fait tu peut t'en inspirer
je veux bien ;D
Je t'envoie ça en pv
yes merci 😄
Je suis en train de dev un site avec pleins de projets du style, dés qui aura une première version fonctionnelle je te passerais le proto stv
avec plaisir ;ED
Il me semble que le seul problème sur le site c'est les chemins donc ça devrait être bientôt si je m'y met
Donc pas de callback avec un push
Bonsoir, oui ?
comment je peut généré un id aléatoirement et le stocker sur ma bdd mongodb
math.random je crois
vous avez pas un exemple de code svp
T'utilises comme quoi lib?
let random = Math.floor(Math.random() * 100);
Oui mais pour faire des requêtes avec mongodb?
mongoose
le 100 représente quoi stp
Ah alors y a quelque chose qui peut te ne fakre
Euh
le nombre max
C'est pas ce qu'il demande
c quoi ??
// schema
const schema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId
});
// create function
const objectToSchema = {};
const merged = Object.assign({ _id: mongoose.Types.ObjectId() }, objectToSchema );
const createSchema = new schema(merged);
createSchema.save();
mongoose.Types.ObjectId() génère une id unique
j'ai aussi un autre probléme sur une autre api
quand je send une requte sa dit
{
"err": {
"index": 0,
"code": 11000,
"keyPattern": {
"Id": 1
},
"keyValue": {
"Id": null
}
}
}```
voila le code
// Import the dependencies
const express = require('express');
const Reserv = require('../models/Reserv');
// Create Router to express app
const router = express.Router();
router.get('/', ( req, res ) => {
res.send('Bienvenue au dashboard DZ1')
});
router.post('/', ( req, res ) => {
const reserv = new Reserv({
name: req.body.name,
player: req.body.player,
date: req.body.date,
hour: req.body.hour
});
reserv.save()
.then(data => {
req.json(data)
})
.catch(err => {
res.json({ err })
})
});
module.exports = router;```
enfaite de se que j'ai comprit
mongodb ne génére pas l'_id unique
sa m'avait jamais fait sa avant
slt je debute en javascript et j essaye de coder un bot qui repond automatiquement feur a quoi, mais je n'arrive pas a lui faire ignorer les majuscule et la ponctuation, vous avez des solutions?
Client.on("messageCreate", message => {
if (message.author.bot) return;
//feur
if (message.content.endsWith("quoi")){
message.reply("feur");
}
});
Enlève les caractères spéciaux via une regex et ensuite tu fais un toLowerCase()
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/RegExp
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase
Tu peux utiliser replace avec les regex https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/String/replace
La méthode replace() renvoie une nouvelle chaîne de caractères dans laquelle tout ou partie des correspondances à un modèle sont remplacées par un remplacement. Le modèle utilisé peut être une RegExp et le remplacement peut être une chaîne ou une fonction à appeler pour chaque correspondance. Si modèle est une chaîne de caractères, seule la prem...
pas commensa
à ce niveau on peut directement faire un regex pour test
Client.on("messageCreate", message => {
//feur
if (message.content == quoi){
message.reply("feur");
}
});
c commensa je croit
La différence ici c'est que le contenu du message doit être exactement quoi, dans son code, il doit se finir par quoi
?
okk mrc
D'ailleur dans quel contexte on utilise = ou == ou === ?
= -> pour assigner une valeur dans une variable, par exemple let a = 1
== -> pour comparer deux valeurs
=== -> pour comparer deux valeurs ainsi que leur type
1 == "1" // true
1 === "1" // false
Hello ! Savez-vous si il existe un moyen de sauvegarder les données sélectionnées d'un SelectMenu ?
:y_: Carte générée en 5.04s !
:nop: Whoops! Cette commande est réservée aux staffs du serveur.. (requiert MANAGE_GUILD).
Yo les gens. J'aurais besoin d'aide avec Discord.js v13 ^^
const Discord = require("discord.js");
const { SlashCommandBuilder } = require("@discordjs/builders")
const Client = new Discord.Client({intents: [
Discord.Intents.FLAGS.GUILDS,
Discord.Intents.FLAGS.GUILD_MESSAGES
]});
const data = new SlashCommandBuilder()
.setName("goulag")
.setDescription("Mod : Envoie quelqu'un au goulag.")
.addUserOption(option => option.setName("cible").setDescription("L'utilisateur que vous voulez goulaguer").setRequired(true));
Client.on("ready", () => {
Client.guilds.cache.get("720217982609129523").commands.create(data);
console.log("prêt");
});
Client.on("interactionCreate", (interaction) => {
if(interaction.isCommand()){
if(interaction.commandName === "goulag"){
let member = interaction.options.getUser("cible")
if (interaction.member.permissions.has("BAN_MEMBERS")){
if(member != undefined){
interaction.reply("<@" + member.id + "> est un traitre et à été envoyé au goulag !")
interaction.member.roles.add("821830588172075080");
}
else{
interaction.reply("Veuillez spécifier un utilisateur.");
}
}
else{
interaction.reply("Vous n'avez pas la permission d'utiliser cette commande.")
}
}
}});
Voila mon code; Le but est que lorsque un admin execute cette commande en mentionnant quelqu'un, ce quelqu'un reçoit un rôle; Sauf que ici, le message est bien envoyé mais le rôle n'est pas donné, en plus du fait que le bot ne crash pas et ne donne pas de message d'erreur donc je ne sais pas quel est le problème...
J'ai déjà essayé de passer la commande en async et cela n'as pas aider. Une suggestion ?
const Discord = require("discord.js");
const { SlashCommandBuilder } = require("@discordjs/builders")
const Client = new Discord.Client({intents: [
Discord.Intents.FLAGS.GUILDS,
Discord.Intents.FLAGS.GUILD_MESSAGES
]});
const data = new SlashCommandBuilder()
.setName("goulag")
.setDescription("Mod : Envoie quelqu'un au goulag.")
.addUserOption(option => option.setName("cible").setDescription("L'utilisateur que vous voulez goulaguer").setRequired(true));
Client.on("ready", () => {
Client.guilds.cache.get("720217982609129523").commands.create(data);
console.log("prêt");
});
Client.on("interactionCreate", (interaction) => {
if(interaction.isCommand()){
if(interaction.commandName === "goulag"){
let member = interaction.options.getUser("cible")
if (interaction.member.permissions.has("BAN_MEMBERS")){
if(member != undefined){
interaction.reply("<@" + member.id + "> est un traitre et à été envoyé au goulag !")
interaction.roles.add("821830588172075080");
}
else{
interaction.reply("Veuillez spécifier un utilisateur.");
}
}
else{
interaction.reply("Vous n'avez pas la permission d'utiliser cette commande.")
}
}
}});```
@azure blazeessaye sa
et dit moi
Malheureusement ça ne marche pas, j'avais déjà essayé; Cela me donne ce message.
ah att
je vais essaye un truc mais je suis pas sur
const Discord = require("discord.js");
const { SlashCommandBuilder } = require("@discordjs/builders")
const Client = new Discord.Client({intents: [
Discord.Intents.FLAGS.GUILDS,
Discord.Intents.FLAGS.GUILD_MESSAGES
]});
const data = new SlashCommandBuilder()
.setName("goulag")
.setDescription("Mod : Envoie quelqu'un au goulag.")
.addUserOption(option => option.setName("cible").setDescription("L'utilisateur que vous voulez goulaguer").setRequired(true));
Client.on("ready", () => {
Client.guilds.cache.get("720217982609129523").commands.create(data);
console.log("prêt");
});
Client.on("interactionCreate", (interaction) => {
var role = "l'id du role"
if(interaction.isCommand()){
if(interaction.commandName === "goulag"){
let member = interaction.options.getUser("cible")
if (interaction.member.permissions.has("BAN_MEMBERS")){
if(member != undefined){
interaction.reply("<@" + member.id + "> est un traitre et à été envoyé au goulag !")
role.add("821830588172075080");
}
else{
interaction.reply("Veuillez spécifier un utilisateur.");
}
}
else{
interaction.reply("Vous n'avez pas la permission d'utiliser cette commande.")
}
}
}});```
si sa marche pas dit moi je vais essayé un autre truc
Revoir les bases de javascript
" var role = "l'id du role" " tu essaye d'accéder à role.add ?
à quel moment role.add est déclaré dans ce string ?
Donc role.add is not a function logique
ah d'accord x)
Mais ouais en général il suffit d'écrire ce que tu veux faire en anglais sur google et tu trouve la solution assez facilement
J'avais déjà essayé x)
Mais je tapais pas les bons mots clés
Le problème était que j'utilisais une fonction qui donnait le rôle a la personne qui faisait la commande
Et non la personne visée
j'ai juste essaye j'ai pas trouvé le probléme normaleent sa devrai le faire avec seulement interaction.roles.add
bonjour, j'aurais besoin d'une petite aide. Quelqu'un sait comment rentrer dans "[[PromiseResult]]:User" ?
Tu as await ta promise ?
C'était une question rhétorique, dans le code plus haut on voyait bien le "pending"
Et je doit faire comment (merci de votre réponse) ?
ok merci, je vais chercher
const user = message.mentions.members.first() || await client.users.fetch(args[0]).catch(() => null);
J’ai rajouté le await et le .catch pour éviter les erreur 404 ^^
Niquel merci
Comment on peut faire pour commander notre bot depuis un site comme rythm ?
Faut mettre les piles dans le bon sens
Mdr
Il faut relier ton bot à ton site, pour ça tu as plein de moyens comme par exemple créer ton site avec express (pas ouf) ou encore créer ton site normalement et le relier à ton bot avec un websocket qui fera le lien pour donner les "ordres" au bot
Salut, j'aimerais me connecter à une db firebase mais j'ai une erreur, qui pourrais m'aider s'il vous plait ?
Ta appliquer des restrictions ?
?
Oui aussi pcq express c’est pas ouf
Normalement il y a des restrictions pour n’autoriser que certaines IP à se connecter, ajoute la tienne à la whitelist pour pouvoir te connecter
Je bidouillais un peu sur le site de mon ancienne école et je vois que le mot de passe de connexion est "chiffré" via cette fonction :
function uniCrypt(chaine, clef) {
var res = "", c1, c2, c3
for (var i=0; i < chaine.length; i++) {
for (var k=0; k<3; k++) {
c3 = chaine.charCodeAt(i)
for (var j=0; j<9; j++) {
c1 = Math.sin(c3 +clef)
c2 = Math.abs(c1 *123987456 -Math.pow(c3, 2.73))
c3 = 32 + Math.round(c2) % 95
clef += 7.11
c1 = Math.cos(c3 +clef)
c2 = Math.abs(c1 *654321987 -Math.pow(c3, 3.2))
c3 = 32 + Math.round(c2) % 95
clef += 11.7
if (j > 7)
res = res + String.fromCharCode(c3)
}
}
}
return res
}
On a tout le code en free, on sait comment il l'appelle, on sait quelle clé il appelle (c'est tjrs le meme nombre) et la chaine c'est juste le mot de passe.
Niveau sécurité c'est un peu pourri non ? C'est vraiment irréversible ?
"sens unique"
Si tu as la clé et le mot de passe chiffré, tu peux chopper le mot de passe d'origine en 2s, ou j'hallucine ?
Si c'est à sens unique, ya pas de soucis
Oui mais justement je me demande si c'est vraiment à sens unique
Je m'y connais pas trop en cryptographie ni rien pour être honnête mais j'ai pas la certitude que ca soit vraiment à sens unique
Normalement les MDP on les hash, on les crypte pas
Peut être un soucis de vocabulaire dans le commentaire
Quand tu compares le mot de passe, tu fais comment du coup ?
Là à première vue oue, ça m'a pas l'air très solide
C'est un vieux site tout pourri qui date des années 2000 (si pas avant)
Je pense qu'en vous montrant ca, vous pouvez déjà savoir que le site est exploitable
Mdrr
Ahah
Et alors quand tu te connectes, tu as dans l'URL l'utilisateur et le mot de passe que tu as mis, chiffré avec la fonction plus haut
Du coup je regarde un peu si il y a pas des vulnérabilités importantes que je pourrais report
Regarde la partie du code de la connexion. Comment ça se passe la comparaison du mot de passe avec celui en bdd
Tu penses que j'ai accès à ca ?
Haaaa désolé j'avais pas pigé que tu voyais le code côté front
Yes justement
Je pensais que t'avais le code source complet du site
Non non mais justement ca m'avait étonné de voir la fonction en tant qu'user mdr
Donc oui, chiffrer le MDP côté front c'est déjà un gros soucis 😂
C'est pas non plus une grosse grosse vulnérabilité mais ça peut faire peur sur ce qui peut vraiment se passer derrière 😂
Yes justement j'aimerai bien trouver 2/3 trucs mais j'suis pas du tout spécialisé en web
À l'époque je pense que ça posait pas de soucis. C'était même recommandé , car pas de HTTPS
Maintenant t'as le HTTPS, donc plus utile du tout de montrer son algo de chiffrage
Je pense que la "clé" de chiffrage dépend juste de l'école à laquelle tu te connectes 
Essaie de regarder sur le login, partie front, l'appel que ça fait pour valider la connexion
Ca va sur cette URL
donc si j'essaye avec admin (un utilisateur qui existe)
Ha oui ok, en plus la clé est donnée dans le code 😂
Donc à voir si ça permet juste de comparer le mot de passe hashé ou si la fonction renvoie le MDP en clair
Et oui du coup c'est ca
Genre là le mot de passe c'est admin et ca retourne sn.u&Wq5%\jGf=~ quand je l'ai run dans un sandbox
🍿
et du coup c'est bien celui de l'URL
Apres oui mais faudrait que j'ai le mot de passe de l'admin chiffré dans tous les cas
Je sais qu'il y a des failles XSS et CSRF mais ca ne me sert pas pour accéder au site dans ce cas
Ok donc si la BDD fuite, tu peux récupérer tous les MDP en clair
Clairement
Bah logiquement si il y a une faille XSS au moment de la connexion tu peux contrôler la base de données
Pas ouf 
Comment ca ?
Bah si tu t'inscris avec un nom d'utilisateur et qu'il n'ont pas fait attention aux caractères dans l'utilisateur tu peux lui envoyer du mysql
Si t'as une faille aussi banale que ça, j'en suis sûr que tu peux faire une injection SQL 😏
Yes je me doute mais il a restreint le login à 15 caractères 
Et cette limite est front ou back?
Front et back

Si je tente de mettre le login dans l'URL il fait une page pour dire que le login est trop long
A ce niveau la c'est bien fait
Fin encore heureux
mdr
Mais je sais que si je rentre <img> dans le login, ca va être interprété :
C'est juste chiant cette limite
Je sais qu'il doit y avoir des failles ultra obvious mais j'ai pas trop d'idées je suis pas spécialisé du tout en web
Et les failles XSS/CSRT elles sont intéressantes que dans le cas où je peux me login, il faut qu'un autre utilisateur load mon pseudo (ce qui ne sera pas le cas avec le login)
C'est du PHP ?
Pour pouvoir accéder au serveur, votre navigateur web n'installera sur votre machine aucun cookie, à part celui de session (lequel est indispensable pour que vous restiez identifié durant votre navigation de page en page sur le site). Veillez à ce que l'interprétation du langage JavaScript soit activée. (Cette option est généralement installée par défaut).
Je suis mort
J'en sais trop rien
Ah attends
En gros j'ai vu qu'ils étaient sur un serveur CherryPy
Donc c'est peut-etre du python mdrr
En plus le créateur du site c'est un vieux pelo qui fait du python depuis 50 ans
Si c'est du PHP, t'as la faille de l'upload de fichiers aussi
Il y a un moyen de savoir ?
Oue donc soit c'est du rewrite, soit c'est pas du PHP
Surement du python franchement
C'est du NodeJS 
mdr
Le nom de domaine contient python littéralement
Donc ca ne m'étonnerait pas MDR
je viens de remarquer
Oui en effet du Python
Je pensais que Cherry Pu c'était juste un serveur web mais non
Il y avait une sale faille sur Cherrypi (le serveur sur lequel ils sont) mais c'était quelques versions avant
Prions tous pour lui 
C'est aussi une lib dev web
Et dis toi que c'est utilisé par genre 50% des lycées en Belgique
Un truc de malade vraiment

J'y ai déjà eu accès mais c'était parce que j'avais l'acces a la boite mail d'un prof donc j'ai vu ses ID de connexions
Donc pas légitime
La j'aimerai vraiment une faille
Maxor le haxor
Puis j'irai là-bas et je leur dirai "ouais vous vous souvenez votre site soit-disant ultra-sécurisé avec des techniques de ouf dont un firewall et des backups (voir ci-joint), bah il y a une exploit" 
Tous les "ports" d'entrée du système sont bloqués par un pare-feu (firewall), à l'exception de ceux de l'interface web.
Cette interface est assurée par un premier serveur autonome, qui joue à la fois le rôle d'un filtre et d'un aiguillage (reverse proxy : serveur mandataire inverse). Il n'est possible de communiquer avec ce serveur qu'à travers le protocole sécurisé HTTPS, lequel garantit à la fois l'identité du site, via un système de certificats SSL fourni par une autorité internationale, et l'encryptage du reste de la communication.
Tout ce charabia pour dire qu'ils ont un firewall et un certificat SSL
Ca me fume
Alors oui aussi un jour ils nous disent que c'est du fait-maison de A à Z :
Chacun de ces serveurs est une application indépendante, entièrement programmée par nos soins de A à Z. Nous ne fournissons le code source de cette application à personne : Il n'est donc pas possible qu'un hacker mal intentionné puisse étudier ce code pour y rechercher des failles éventuelles.
Et quelques lignes plus bas :
Construit entièrement à l'aide de composants "open source" (lesquels sont soumis au contrôle permanent de milliers de développeurs dispersés dans le monde entier), le système dispose entièrement de ses machines spécifiques. Cela signifie qu'il ne peut pas être perturbé par les dysfonctionnements ou piratages éventuels d'autres applications qui seraient installées sur les mêmes ordinateurs.
Bah logique que c'est fait par leur soin il y a pas grand monde qui va faire un site web en python
mdrr
Comment je peux faire pour baisser la complexité de ma fonction ?
Mon éditeur me le signal
Avec 14 de complexité
Il se base sur quoi ton éditeur ?
Déjà t'as énormément de calllback. De mon côté j'aurais privilégié du async / await
Mieux indenter aussi
Modifie tout let en const
En tout cas ceux que tu ne veux pas modifier
Quand tu déclare une variable t'a soit let ou const
Let si tu veux modifier la variable après déclaration
Si t'a pas besoin de modifier après déclaration tu déclare avec const
Merci mais rien n'est changé pour la complexité mdr
Aaah?
Si ta complexité c'est le temps que le code prend à être exécuté c'est normal
Tu fais de la manipulation de fichier
Et pk stocker en json ?
Pk ne pas faire une bdd en mongodb avec le module mongoose
C'est plus puissant que du I/O
Je suis débutant en node c'est juste pour m'entrainer à la manipulation de fichier et json
Ui
J'avoue surtout que cette page c'est une page admin donc ça devrait le faire
Tu sais que c'est "complexe" parce que ca fait des opérations gourmandes, c'est pas criminel non plus d'avoir des opérations lourdes si c'est bien fait
Hey,
J'ai un petit problème un peu comme celui au dessus concernant la complexité de mon programme. J'ai un select menu et je souhaites faire quelque chose de différent en fonction de la valeur que mon collector reçoit. Tout marche, seul problème, rien que sur ce petit bout de code j'ai une complexité de 41..
Est-ce que quelqu'un sait comment je pourrais changer ça pour faire baisser la complexité?
Code: https://www.toptal.com/developers/hastebin/odoliwojur.coffeescript (c'est un hastebin)
Hastebin is a free web-based pastebin service for storing and sharing text and code snippets with anyone. Get started now.
Avant ça tu devrais utiliser un linter et prettier pour organiser ton code
Si vous voulez tout le fichier le voilà: https://www.toptal.com/developers/hastebin/xumusoxigu.coffeescript
Hastebin is a free web-based pastebin service for storing and sharing text and code snippets with anyone. Get started now.
Ton typage est pas linéaire, des fois tu explicites le typage et des fois tu laisses le typage implicites c'est pas top
Typiquement dans tes callback, si le typage est bon on va plutôt garder le typage implicite pour éviter de rendre trop verbeux pour rien
Si tu as beaucoup de wording, hésite pas à te faire un (ou plusieurs) fichier pour grouper ça par section, ça va rendre le code plus lisible
Hesite pas à déclarer tes types ailleurs que dans l'args de la fonction, ça va également rendre le code plus propre et lisible
Ton switch devrait utiliser un enum dans la logique
Le filter as any c'est pas top, c'est vraiment nécessaire ?
Organise ton code en sous fonction/méthodes et hésite pas à faire des utils pour les morceaux réutilisable dans plusieurs contextes
Exemple tu fais beaucoup de ({ content: '', ephemeral: true })
Tu peux te faire un utils pour ne passer que le content en params c'est plus propre quand tu as des props qui se repètent comme ça
Favorise la concaténation `` c'est moins verbeux
Ton save n'a pas de break
Lint+prettier sur ton code
Pas de ts-ignore par pitier :p
Et vraiment structure ton code pour ne pas mélanger tout
Typiquement, si tu fais des commandes pour un contextes X tu peux te faire un dossier X qui va contenir l'index.ts pour export
x.command.ts qui va contenir ta command par exemple
x.message.ts dans lequel tu vas avoir tes builders de messages
Ou bien le plus classique en discordjs
src/command
src/message
etc...
Thx je vais essayer de faire tout ça
Bonsoir, quelqu'un saurait m'aider ? Je ne comprend pas pourquoi mon iframe n'est pas accepté :/
Je suis actuellement un tuto js pour débutant, et dans celui-ci le iframe ne pose aucun soucis, je me dis que la version ayant évolué peut-être qu'il se code autrement maintenant ?
Faut utiliser create element
Saurais tu me dire à quel endroit le modifier ?
In this tutorial, you will learn how to use the JavaScript document.createElement() to create a new HTML element and attach it to the DOM tree.
Je regarde sa, merci de ton aide 🙏
` c'est ça qu'il faut que tu utilises pas '
Oui en regardant le tuto une nouvelle fois j’avais effectivement bien oublié sa, bien vu et merci quand même
Mais en même temps c'est vrai que dans la logique ça passerait mais c'est pas le moyen le plus opti et il faudrait mettre des guillemets dans la var pour que ça fonctionne pas c'est pas opti
Salut a vous !
j'utilise PM2 deploy pour push mes modifications de site vers mon serveur mais j'ai vus sur une video quil etais possible de ne pas mettre son mot de passe a chaque fois, quelqun serait comment ca marrche ?
Bonsoir ici
Je suis un débutant dans le js et je suis actuellement en train de développer un bot discord.
Je rencontre un problème lorsque j'envoie au bot une réponse qui n'est pas celle qu'il attend.
Le message d'erreur que j'ai personnalisé s'envoie bien mais quand je renvoie une réponse fausse, le message d'erreur personnalisé s'envoie deux fois, puis trois fois, puis 4 fois ....
Exemple :
Bot : fourni moi 2 nombres
Dans le code le bot a une condition du type:
Message.channel.send("salut")
}
else{
Message.channel.send("fourni moi des nombres !")```
Moi : 2 f
Bot : fourni moi des nombres !
Moi :2 f
Bot :fourni moi des nombres !
Bot :fourni moi des nombres !
Et à chaque fois ça rajoute une phrase en plus
Le code un peu plus complet :
if(message2.author.bot) return;
let args = message2.content.trim().split(/ +/g);
if(!isNaN(args[0]) & !isNaN(args[1]) & !isNaN(args[2]) & !isNaN(args[3])){
rea = args[0]
gsoins = args[1]
bvendus= args[2]
kvendus = args[3]
var salaire = parseInt(rea)*1800+ parseInt(gsoins)*1200 + parseInt(bvendus)*400 + parseInt(kvendus)* 1200
}
else{
message2.channel.send("Vous devez founir des nombres !")
setTimeout(() => {
message2.channel.bulkDelete(2)
},3000);
}
if(salaire > 0){
setTimeout(() => {
const embed1 = new Discord.MessageEmbed()
.setColor("#46FF00")
.setTitle("ㅤㅤㅤ__**💸 Total de la semaine ! 💸**__")
.addField("__Récapitulatif__","Pour un total hebdomadaire de :\nㅤ\n**"+rea+" réanimation\n"+gsoins+" grands soins\n"+bvendus+" badanges vendus\n"+kvendus+" kits de soins vendus**\nㅤ\nLe motant de la paye de cet employé est de : __***"+salaire+"$***__");
message2.channel.send({embeds: [embed1]})
},1000)
setTimeout(() => {
const embed2 = new Discord.MessageEmbed()
.setColor("#FF0C00")
.setTitle("ㅤㅤㅤㅤㅤㅤㅤㅤㅤ__**‼️ ATTENTION ‼️**__")
.addField("__Supression des messages__","\nㅤ\n__**L'entièreté des messages de ce salon**__ seront suprimés dans __**1 minutes**__")
message2.channel.send({embeds: [embed2]})
},6000)
setTimeout(() => {
message2.channel.bulkDelete(99)
},30000)
}
})
});```
&& pas & il me semble @exotic spoke
J'essaye de suite
Ca ne change rien
J'ai jamais dis que c'était la solution 😉
Pk le settimeout, tu devrais le mettre direct en haut
Et l'enlevant
Genre message2.delete();
Pourquoi je devrais l'enlever ?
Car il sert à rien mdr
Ca me permet de faire plusieurs commande sur mon bot discord
Pas le settimout
oui
Ceci
yen a plusieurs tu veux que je vire lequel ?
Yoo, est-ce que quelqu’un sait si c’est possible de faire du multithreading en TS ? (Si oui et si vous avez des liens je veux bien)
Plutôt en Nodejs, oui il y a plusieurs méthodes de MT en nodejs. La notion la plus récente et la plus intéressante est les Working Threads
TS n'est pas au runtime, ton code est transpilé en JS au moment de l'exec
Il y a d'autre manière d'obtenir cet effet (typiquement les subprocess) mais c'est moins pertinents
Aussi, je te mets en garde, quand on passe au MT, il y a pas mal de nouvelle notion à prendre en compte. Et avant tout, bien juger sur la pertinence de ton MT dans le projet car souvent c'est plus gadget qu'autre chose
Scylla un conseil évite de donner trop de mots Complexe tu peux donner la définition genre ce que ça veux dire en deux mots et mettre entre parenthèse le mot technique ça sera plus ludique je pense
Parceque peut être que lui connaît mais certains qui sont débutant dans le language lisent les messages réponse parceque c'est toujours intéressant pour ne pas tomber sur les mêmes problemes et c'est pas toujours très clair
Re, bon autre question parce que le MT ça sera pas pour tout de suite
, est-ce que c'est possible de "formatter" un message. Genre je veux faire que certains messages de mon bot sont customisables et il y aura des variables (en l'occurrence ici {inviter.invites} ou encore {inviter.mention}). Comment est-ce que je peux faire pour que ça se formatte correctement avec les variables sans avoir à .replace() les trucs à la main ?
(Si c'est possible jsp)
Et btw my Scylla pour les infos
Bah à l'origine le message est destiné à lui surtout aha
Pas faux aha
tu peux utiliser des regex
La façon simple serait de simplement faire une fonction du style
const formatMessage = (content1: string, content2: string) => {
return `my super ${content1} and ${content2};`;
};
Sinon la meilleure manière est d'utiliser un engine qui va gérer un template
Techniquement toi tu lui passe un template avec des variables, et lui il va générer le string resultant
C'est utiliser dans le render CSR
Si jamais, un engine très utilisé est ejs
Non ce que je veux dire en gros c'est que quand il config le message il met par exemple Bienvenue à {member.mention} qui a été invité par **{inviter.tag}**. et bah ça save ça brut en bdd et après quand un mec rejoint ça utilise le message et ça remplace les variables
je sais pas si c'est clair
Utilise un template engine
c'est un peu overkill
Pourquoi ? C'est exactement le cas d'utilisation pour le coup et au moins c'est générique
Yes je dit pas non 
C'est quoi ?
Lis mon premier message
ejs c'est pas pour le web ?
C'est utilisé en web, c'est pas pour autant dédié au web
Techniquement tu peux également utiliser les moteurs de template utilisé pour générer les mails, t'aura le même résultat et se sera peut-être plus simple à prendre en main
D'ailleurs, il y a une raison pour vouloir stocker cette string dans une db ?
ça sera le message configuré par serveur qui sera envoyé à chaque fois que qqn va join
Je vois
Du coup à ta place je ferais peut-être plutôt une regexp étant donné que tu vas moins maitriser la data
Comme ça tu pourra explicitement et facilement autoriser les params à utiliser
Typiquement t'aurai ton string qui aurait la gueule suivante
Bienvenue :username: sur le serveur :server_name:
Et toi dans ta doc tu dis que tu peux utiliser username et serveur_name (et d'autres que tu vas définir)
yes surtout que genre ça sera les variables exactes
Mais ducoup je vois pas trop comment je peux utiliser les regexp pour ça
Attention à bien gérer l'escape quand même
Et je vais le dire au cas où, mais attention aux injections SQL lors de l'update du champ
Le plus simple est de faire une fonction générale qui va, pour chaque key/valeur (exemple: key -> username, value -> Scylla) va remplacer dans la string
T'as aucune deps supplémentaires
Sinon on revient au moteur template mais tu devrais un peu modifier ta structure de données
Okay, et pour les injections pas de soucis je suis avec mongodb
donc normalement ça va
donc en gros je créer une fonction formatString() par exemple qui prend en paramètre mon string et ça va récupérer toutes les variables et modifier c'est ça ?
Je vais faire le mec chiant, mais pourquoi le nosql ?
Techniquement formatString tu lui passes en premier argument la chaine (récup dans la db) et en second params, ton objet du style
{
username: 'Scylla',
serveur_name: 'Creators Area',
}
A toi de voir pour la convention de nommage pour ce cas précis
ahm ^^'
En fait c'est surtout le système de schema que je trouve pratique
const baseText: string = `Bienvenue à {member.mention} qui a été invité par **{inviter.tag}**`;
const data = {
inviter: {
tag: 'monTag#1234'
},
member: {
mention: '@mention'
}
};
let formattedText: string = baseText;
const regex: RegExp = /\{(.*?)}/g;
let m;
while ((m = regex.exec(baseText)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
const [varName, varValue] = m;
formattedText.replaceAll(varName, rGetData(data, varValue.split('.')));
}
console.log(formattedText);
function rGetData(data: any, keys: string[]): string {
if (typeof data === 'string') {
return data;
} else if (typeof data === undefined) {
return '';
} else {
const [key] = keys;
return rGetData(data[key], keys.splice(0, 1));
}
}
j'ai pas testé mais tu peux définir tes variables dans data
Ok ok merci, je testerais ça tout à l'heure
je t'ai fais une version plus propre :
class VariableTextFormatter {
private readonly baseText: string;
private readonly variables: VariablesInterface;
private readonly regex: RegExp = /\{(.*?)}/g;
public constructor(baseText: string, variables: VariablesInterface) {
this.baseText = baseText;
this.variables = variables;
}
public getFormattedText = (): string => {
let formattedText: string = this.baseText;
let match: RegExpExecArray | null = null;
while ((match = this.regex.exec(this.baseText)) !== null) {
if (match.index === this.regex.lastIndex) {
this.regex.lastIndex++;
}
const [varName, varValue] = match;
formattedText.replaceAll(varName, VariableTextFormatter.recursiveGetCorrespondingData(this.variables, varValue.split('.')));
}
return formattedText;
}
private static recursiveGetCorrespondingData = (data: VariablesInterface | string | undefined, variable: string[]): string => {
if(typeof data === 'string') {
return data;
} else if (typeof data === 'undefined') {
return '';
} else {
const [key] = variable;
return VariableTextFormatter.recursiveGetCorrespondingData(data[key], variable.splice(0, 1));
}
}
}
export interface VariablesInterface {
[key: string]: VariablesInterface | string;
}
export default VariableTextFormatter;
Je sais pas si on peut dire que c'est plus propre, mais c'est différent x)
ça reste plus propre que de télécharger un moteur de template pour remplacer des variables dans 3 lignes
On appelle ça un moteur, c'est pas pour autant que c'est lourd ^^
Et puis si on parle perf, créer une instance à chaque render de message c'est pas le top non plus ^^'
JavaScript est un langage orienté objet basé sur des prototypes, plutôt que sur des classes. En raison de cette base différente, il peut être moins évident de comprendre comment JavaScript vous permet de créer des hiérarchies d'objets et d'avoir un héritage des propriétés et de leurs valeurs. Ce chapitre tente de clarifier la situation.
je vois que tu as besoin d'apprendre encore certaines choses
🥲
replaceAll ??
Ah oui mybad j'avais pas la bonne lib dans mon tsconfig
Pardon de déranger mais j'avoue n'avoir pas compris le rapport ici..?
Ah si d'accord
je l'ai juste redirigé sur le mdn pour qu'il comprenne comment fonctionnent les objets en javascript
le principe de class, etc...
Oui, mais rapport a quoi ?
par rapport à son message
Quelle partie*
celle sur les instances
Yep ok
parce-pour les moteurs de template c'est pas très lourd mais dans ce cas d'utilisation c'est overkill
Oui effectivement sur ce point bien sur mais faut voir comment c'est géré niveau compilateur
Puis
Actuellement c'est ptet un peu overkill pour cette utilisation ok, mais ça peut être nécessaire pour le futur
Re @red torrent, donc j'ai un petit problème avec ton code, il ne marche pas
(voir screens)
Est-ce que tu sais si c'est moi qui ai fait une erreur ou pas ?
Regarde le code, tu vas comprendre ton erreur
ça fait 20 minutes que je le regarde 😂
Tu peux montrer le reste de ton code stp ?
La partie formatter ?
Tout
Hastebin is a free web-based pastebin service for storing and sharing text and code snippets with anyone. Get started now.
Et pour répondre ici, un template engine c'est ni plus ni moins que quelques regex, avec des vérifications en plus...
A la base il m'a envoyé ça car "je connais pas les objets en js"
le hastebin c'est mon guildMemberAdd
Ah dac 🤔
Merci 👀
T'as vraiment besoin de passer par la version objet ?
Pourquoi le setTimeout ?
tu as une manière d'interpréter les choses extraordinaire
😤
Oui pardon j'avais oublié d'assigner la variable formattedText quand j'ai fais le remplaceAll :
class VariableTextFormatter {
private readonly baseText: string;
private readonly variables: VariablesInterface;
private readonly regex: RegExp = /\{(.*?)}/g;
public constructor(baseText: string, variables: VariablesInterface) {
this.baseText = baseText;
this.variables = variables;
}
public getFormattedText = (): string => {
let formattedText: string = this.baseText;
let match: RegExpExecArray | null = null;
while ((match = this.regex.exec(this.baseText)) !== null) {
if (match.index === this.regex.lastIndex) {
this.regex.lastIndex++;
}
const [varName, varValue] = match;
formattedText = formattedText.replaceAll(varName, VariableTextFormatter.recursiveGetCorrespondingData(this.variables, varValue.split('.')));
}
return formattedText;
}
private static recursiveGetCorrespondingData = (data: VariablesInterface | string | undefined, variable: string[]): string => {
if(typeof data === 'string') {
return data;
} else if (typeof data === 'undefined') {
return '';
} else {
const [key, ...newVariable]: string[] = variable;
return VariableTextFormatter.recursiveGetCorrespondingData(data[key], newVariable);
}
}
}
export interface VariablesInterface {
[key: string]: VariablesInterface | string;
}
export default VariableTextFormatter;
mais tu peux en faire une fonction ça sera moins redondant à utiliser :
const recursiveGetCorrespondingData = (data: VariablesInterface | string | undefined, variable: string[]): string => {
if(typeof data === 'string') {
return data;
} else if (typeof data === 'undefined') {
return '';
} else {
const [key, ...newVariable]: string[] = variable;
return recursiveGetCorrespondingData(data[key], newVariable);
}
};
const formatTextWithVariables = (variables: VariablesInterface, text: string): string => {
const regex: RegExp = /\{(.*?)}/g;
let formattedText: string = text;
let match: RegExpExecArray | null = null;
while ((match = regex.exec(text)) !== null) {
if (match.index === regex.lastIndex) {
regex.lastIndex++;
}
const [varName, varValue] = match;
formattedText = formattedText.replaceAll(varName, recursiveGetCorrespondingData(variables, varValue.split('.')));
}
return formattedText;
};
export interface VariablesInterface {
[key: string]: VariablesInterface | string;
}
export default formatTextWithVariables;
Quand quelqu'un join les invites sont pas instantanément updates donc si je timeout pas il n'y a aucune invitation qui a été modifiée
Bonsoir, quelqu'un sait pk la height de ma status bar ne s'update pas en fonction de la valeur ?
else if (item.type === 'updatePlayer') {
$('.foodbg').css('height', item.food);
$('.waterbg').css('height', item.water);
console.log('Eau : ' + item.water, 'Nourriture : ' + item.food);
}```
le console.log de water et food :
Alors, je sais pas comment tu gères ça, mais si tu utilises bien les await, t'aura aucun soucis à ce niveau là
Et puis utiliser un timeout pour gérer ça c'est pas top du tout, à la limite, si le problème se posait vraiment, tu setup un checker, mais un timeout c'est pas déterministe ici
pourquoi c'est pas top ? ça fait quoi les timeout (à part timeout
)
Ce que je veux dire, c'est que si en effet, les invites n'étaient pas update directement, qu'est ce qui te dis que dans 200ms se sera le cas ? Suffit d'une latence réseau et c'est cassé par exemple
pas faux
Pour le coup, ici je pense que si tu revois ta façon de faire t'en aura pas besoin, mais si il fallait vraiment gérer ce cas, comme dis, soit un checker qui send un event ou bien un check que tu await serait plus adapté
Hello, j'ai une petite question.
J'utilise un dropdown discord.js, et j'aimerai savoir comment je peux cumuler une editReply et un update pour remettre à la forme initiale mon dropdown.
Actuellement, je fais ça :
await interaction.reply({ content: 'Un ticket vient d\'être crée, discutez avec notre équipe ! <#' + channel_create.id + ">", ephemeral: true })
await interaction.update();```
Et ça ne fonctionne pas car l'interaction n'est plus valable au moment de l'update
Salut ! Un menu tu veux dire?
Oui
Si oui, tu ne peut malheureusement pas, la seule façon au lancement du bot (dans le ready), de récupérer le message où ce trouve le menu et le mettre à jour tout les x secondes
@charred lake
si
Alors, il faut que je me base sur cette interaction
Pour le mettre à jour une fois l’interaction reply effectué
Tu ne peut pas
Pour eviter que l’option sélectionné reste bloqué en gros?
c’est ça ton problème ?
C’est terrible qu’ils aient pas pensé à ça
Je suis d’accord avec toi
Bah
Mais pareil j’ai dû utiliser la technique que je t’ai expliqué car c’est impossible
Dans le cas d'un menu, tu peux update le message en faisant message.edit()
car l’interaction ce termine lors de la première action
yes
C’est peut être plus propre comme ça ?
Tu peux, en deferUpdate avec l'interaction puis follow up par exemple
Déjà essayer et il me semble que ont peux pas Hareng
Followup qu’est ce que ça fait ?
a vérifier
De?
edit en followup
Car deferUpdate c’est ce que j’utilisais tout à l’heure
enfin tu m’a compris je pense
Une fois que tu as deferUpdate?
Ici tu reply a l'interaction puis tu update (pour le coup ici il faut privilégier deferUpdate)
Oui mais je ne pourrais pas reply + deferUpdate
c’est sa le blocage en fait
tu peut pas
soit tu update, soit tu reply
et ils ont pas fait en sorte que on peut faire les deux
mais au pire
Oui mais
Tu peux follow up
C'est le principe même
Follow après le defer ?
Oui ! Tu as juste besoin d'une réponse initiale dans les 3 secondes, et je ne vois aucune contre indication sur la doc
Donc essaye
Je regarderai alors demain comment je peux implémenter le followup dans mon code
Merci 😉
Pas de soucis 
await interaction.deferReply();
interaction.followUp("Message").then(message => {
message.edit("Message modifié");
});```
un truc du genre Hareng
?
DeferUpdate pour le coup
Et pourquoi tu ajoutes un then?
ça pourrait m’aider pour pas mal de choses du coup ^
j’ai trouvé sa dans un site
juste pour check
mais en gros c’est ce que l’on cherche
Ca n'a rien à voir
c’est le meme principe
Ici la personne voulait edit le message du follow up après l'avoir envoyé
mais pour son menu
Pas exactement, mais tout est lié
oui, bah c’est exactement la même chose pour le menu car il doit passer par une update du message dans tout les cas
yes
cimer du conseil jvais tester ça dm
Oui mais qui se fait ici avec une update par l'interaction~
Avec plaisir à voir si ça marche ;)
Bonsoir, c'est pas forcément spécifique au js mais je le poste ici. Actuellement j'utilise node.js dans la réalisation d'un ptit projet de bot. J'utilise pgsql en base de données. Je souhaiterais passer mes cooldowns en base de données, néanmoins je me pose une question, sur le moyen de supprimer les cooldowns lorsque le bot est on.
Mieux vaut check au moment d'exécuter la cmd si il y a des coolsowns et si ils sont encore d'actualité
Ou set des timeout, et au redémarrage du bot.
Dans les deux cas je précise qu'au redémarrage les cooldowns depasses sont supprimés
Pour le 1, quelque chose comme ça pourrait marcher
SELECT name, end, type FROM cooldowns WHERE end::real < {Date.now()} AND name = {cmd.name} AND type = 'command'
Et dans ce cas là on attendrait le reset du bot pour que les timeouts depasses soient supprime. C'est lazy mais peu probable que ça pose un jour de problème.
Qu'en pensez vous ?
Oui tu peux faire comme ça, une autre manière de faire serait de simplement logs les commandes, comme ça tu as d'une pierre deux coups, les logs et les cooldowns
Dans les deux cas, le mieux serait de load ta table dans un manager qui va s'occuper du reste pour le runtime du bot pour éviter de lire dans la db avant chaque commande
Je te conseille d'utiliser des enum pour tes colonnes si ton bot est typé
Salut à tous j'aimerais savoir ç quoi sert l'option default? dans un select menu
en gros si tu as 4 options: option1, option2, option3 et option4 et que tu met default: true sur l'une d'entre elle, c'est elle que l'utilisateur verra en "préselection"
no problem
bonjour à tous
Je suis débutant en react.js
actuellement sur un tuto je suis bloqué avec un message d'erreur après la mis en place "nextauth"
Si quelqu'un a déjà eu ce genre de message
[next-auth][warn][NO_SECRET]
Merci pour votre aide 🙏
Il faut mettre un secret sur le next-auth
Ah yep c'est pas une mauvaise idée, sauf que si tu exit le process via la console t'as pas le temps d'enregistrer.
Et yep les enums j'utilise déjà, mais trop de tapage restreint trop, mais pour les types c'est cz que j'utilise x)
Comment ça pas le temps si tu exit vient la console ?
Bonjour !
J'ai un problème avec les SlashCommand pour un bot discord
J'ai beau chercher je ne trouve pas la solution
Quelqu'un peut-il m'aider ?
L'erreur :
Uncaught ExpectedConstraintError Error: Invalid string format
Pas de majuscule dans le nom de la commande
...
Plus grosse blague que l'on m'est jamais faite
??
Bah tout ca pour une maj
Ah bah... :/
Mmh j'ai sans doute mal du comprendre, qu'est ce que tu entends par manager exactement ? 😅
Un bout de code qui va s'occuper de mettre à jour la db tout en gardant un équivalent en cache pour ne pas avoir à SELECT à chaque commande
On aura uniquement un UPDATE/INSERT (en fonction du besoin) qu'on pourra même mettre en unwaited si ça pose pas de problème
Ah yep d'accord, et t'as des exemples de manager ? Parce que le faire soi même directement via nodejs, si le par exemple tu exit le process via la console y a pas d'évent exit qui est emit.
Bonjour j'ai une petite question :
J'aimerai crée une commande qui serait disponible que si ont a un rôle spécifique et que quand on fait la commande sa nous mp et ecrit un message.
Merci d'avance
Nouvelle erreur que je ne trouve pas de résolution ...
at __node_internal_captureLargerStackTrace (node:internal/errors:465:5)
at NodeError (node:internal/errors:372:5)
at throwExportsNotFound (node:internal/modules/esm/resolve:472:9)
at packageExportsResolve (node:internal/modules/esm/resolve:753:3)
at resolveExports (node:internal/modules/cjs/loader:482:36)
at Module._findPath (node:internal/modules/cjs/loader:522:31)
at Module._resolveFilename (node:internal/modules/cjs/loader:919:27)
at Module._load (node:internal/modules/cjs/loader:778:27)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at <anonymous> (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\commands\SlashCommand.js:2:20)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at <anonymous> (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\index.js:4:14)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Module._load (node:internal/modules/cjs/loader:822:12)
at executeUserEntryPoint (node:internal/modules/run_main:77:12)
at <anonymous> (node:internal/main/run_main_module:17:47)```
discord-api-types fonctionne avec import/export
essaies de remplacer js const { Routes } = require("discord-api-types") par ```js
import { Routes } from "discord-api-types"
Je l'ai installé pourtant
j'ai jamais dit le contraire ^^
mais je pense que tu peux carrément retirer l'import
tu n'as pas l'air de te servir de "Routes"
Je l'ai carrément viré mais là j'ai d'autres erreurs
il va falloir me montrer les erreurs je vais avoir du mal à les deviner 
Oui je sais j'essaie de mes régler
at DiscordjsError (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\errors\DJSError.js:18:42)
at login (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\client\Client.js:237:52)
at <anonymous> (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\index.js:45:5)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Module._load (node:internal/modules/cjs/loader:822:12)
at executeUserEntryPoint (node:internal/modules/run_main:77:12)
at <anonymous> (node:internal/main/run_main_module:17:47)
Process exited with code 1```
le token du bot
const { token } = require("./config.json");
bot.login(token.token);
je vais pas te demander de montrer ton config.json mais tu devrais pouvoir trouver tout seul
Bah oui
mais
je l'ai pas changé le token
xD
Le bot marchait encore tres bien ya 20 mins
Et j'ai rien touché au token
structure du fichier config.json ?
tu peux envoyer un screen de ton config.json en masquant les valeurs
c'est le token.token qui te fait peur?
donc tu vas remplacer bot.login(token.token); par bot.login(token);
Ça marchait comme je l'avais mis ya encore 20 mins 🤔
je pense qu'il y a 20 minutes tu avais const token = require("./config.json"); à la place de const { token } = require("./config.json");
at transformCommand (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\managers\ApplicationCommandManager.js:218:21)
at create (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\managers\ApplicationCommandManager.js:128:30)
at <anonymous> (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\index.js:12:57)
at emit (node:events:527:28)
at triggerClientReady (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:17)
at checkShardsReady (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\client\websocket\WebSocketManager.js:367:10)
at <anonymous> (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\client\websocket\WebSocketManager.js:189:14)
at emit (node:events:527:28)
at checkReady (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\client\websocket\WebSocketShard.js:475:12)
at onPacket (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\client\websocket\WebSocketShard.js:447:16)
at onMessage (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at onMessage (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\ws\lib\event-target.js:199:18)
at emit (node:events:527:28)
at receiverOnMessage (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\ws\lib\websocket.js:1160:20)
at emit (node:events:527:28)
at dataMessage (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\ws\lib\receiver.js:528:14)
at getData (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\ws\lib\receiver.js:446:17)
at startLoop (c:\Users\laeti\Desktop\Bot NightRp\NightRp v2\node_modules\ws\lib\receiver.js:148:22)```
@red torrent
( @past nimbus si jamais excuse moi)
Je comprends pas le problème en fait
D'acc mdr
J'avais pas enregistré le insert/update
D'acc
Bonsoir comment est ce que je peux faire pour crée un emoji avec l'icon du serveur ?
J'ai essayer ça
m'enfin bon
y'a un exemple
Salut merci de ton retour mais en faite l'icon du erveur n'est pas en http ou https du coup ça ne marche pas
Ce n'est pas ça, c'est le name qui pose problème
Tu ne dois pas mettre d'espace
Surtout que interaction.guild.iconUrl() c'est bel et bien un lien. C'est juste qu'elle est encodée en base64 avant d'être envoyée à l'API de Discord donc elle apparaît comme ça
ouais @cyan iron
J'ai vu comment fallait faire correctement gravce au lien que bycop à envoyé du coup j'ai modifier
alors alors
C'est un peu bizzare
En gros j'ai fais ça
interaction.guild.emojis.create(`${interaction.guild.iconURL()}`, "serveur")
.then(serv => interaction.channel.send(`✅ Création de l'émoji : ${serv}`))
.catch(interaction.channel.send("❌ Impossible de charger l'émoji **serveur** sans doute car votre serveur ne possède pas d'icon"))
et ça m'a renvoyer à la fois le catch et à la fois le then
.then((x) => {
// ton code quand l’action est faite
}).catch((err) => {
// ton code quand l’action a eu une erreur/n’a pas fonctionné
});```
@misty parcel
Pour le lien de l’emoji, nul besoin d’ouvrir un string, tu peut juste appeler la fonction iconURL()
ok mais du coup ça veut dire que y'a pas moyen de patcher ça 🤔
ouais enfin bon par habitude tu connais
patcher quoi?
yes mais c’est po bo
patcher le fait que ça n'envoie pas à la fois le catch et le then
bah utilise le code que je t’ai donné
Bah c'est normal ça
Si tu as une erreur ton code ne va pas passer par le then ;)
ce qu’il explique c’est que le code qui ce trouve dans le .then et le .catch s’exécutent en même temps
alors que seulement l’un des deux devraient être exécuté, mais je pense qu’il a mal fait le .then().catch()
Oula oui c'est pas normal, mais perso je ne l'ai pas compris comme ça
On verra bien quand il va revenir :')
yes
oui effectivement pas normal x)
@misty parcel log ton erreur aussi
ah pardon x) oui en faite le .then et le catch s'executent en meme temps
c’est quoi l’erreur que tu as en console s’il te plaît ?
oui mais ça c’est parce que tu as mal fait ton then catch
Non mais ton catch est mal fait faut que ça soit une fonction bg, là je suis désolé je capte pas donc je vois pas grand chose :')
Mes messages vont surement mettre 5 bonne minutes à s'envoyer
Ah non j'ai de la chance
.catch((err) => { Ton code... }
surtout l’erreur aussi qui nous faut stp
attendez j'arrive 5 minutes
c’est ce qu’il a fait
y'a pas d'erreur
Wut je vois pas ça
ah c’est ce qu’il a fait pourtant 😂
Ouais bon j'arrive quand je suis sur PC les messages chargent pas :') désolé
tkt
ok re
Re, oui effectivement je n'avais pas vu son screen du coup. Alors du coup ça fonctionne ?
euh non
l'emoji se crée correctement
mais le catch et le then s'envoient quand meme : (
enfin le catch du coup
Montre ton code
interaction.guild.emojis.create(`${interaction.guild.iconURL()}`, "serveur")
.then((serv) => {
serv => interaction.channel.send(`✅ Création de l'émoji : ${serv}`)
}).catch((err) => {
interaction.channel.send("❌ Impossible de charger l'émoji **serveur** sans doute car votre serveur ne possède pas d'icon")
});
^
Skoozz te l'a dit au dessus en plus
puis moi pour être sur je return toujours
Pas un bon réflexe
C'est pas utile là
Surtout dans un callback c’est inutile
je parlais plus au niveau du catch car le code après est susceptible de s’exécuter si jamais c’est un lien avec l’action buggé
voilà, essaye maintenant
Alors dans ton callback tu dois garder un paramètre par contre
ah oui, le then
yes
La documentation Mozilla est disponible en français si tu veux 😉
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
retire moi le iconURL() du string au passage x)
Par contre la promise du emoji create contient un emoji, pas un serveur fyi
les liens fonctionnent aussi @astral thorn 😉
np
Oui mais je suis sur téléphone et pour une raison que j’ignore j’ai pas tout le chemin d’accès il me met que le root
Et un peu la flemme de refaire toute l’architecture a la main je te cache pas 😅😂
Ah problématique
Au niveau du lien je parlais surtout pour le paramètre attchment je pensais que tu parlais de sa
le « serv » va renvoyer le nom de l’emoji, l’id de l’emoji etc
Alors qu’il s’agit d’un emoji
oui
Mais bon après d’un point de vue fonctionnel ça pose pas de soucis
ouai mais visuellement c’est po fou
Yes 😂
Mon fichier deployCommands
L'erreur quand je fais node deployCommands dans le terminal :
at SequentialHandler.runRequest (C:\Users\loic\Documents\Code Bot Discord Thomas\node_modules@discordjs\rest\dist\index.js:708:15)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async SequentialHandler.queueRequest (C:\Users\loic\Documents\Code Bot Discord Thomas\node_modules@discordjs\rest\dist\index.js:511:14) {
rawError: { message: '405: Method Not Allowed', code: 0 },
code: 0,
status: 405,
method: 'put',
requestBody: { files: undefined, json: [] }```
ptn 😭
Essaies de lire les messages d'erreurs ça va beaucoup t'aider
Puis tu peux aussi lire la doc histoire de comprendre ce que tu fais et où est ton erreur
Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.
C'est ce que j'ai fais mais je comprend pas
Mais je crois savoir
Si tu avais lu la doc tu aurais trouvé
Ça serai pas à cause du fait que j'ai pas coché le truc commandes dans la génération du lien du bot ?
C'est surtout la méthode de ta requête qui n'est pas la bonne
Bahhh
Jai lu justement déjà hier
Et je comprend pas en quoi c'est pas bon
Car en plus j'ai trouvé une vidéo explicative et c'est fait de la même façon que moi
Sur la doc c'est bien écrit
To make a guild command, make a similar HTTP POST call, but scope it to a specific guild_id:
Peut-être qu'avec la version 9 de l'api c'est PUT mais sur la doc ils montrent la version 10
Dans un dossier config, mon guild id est défini pourtant
Haaaa donc j'ai pas mis la bonne version ?
Ça doit pouvoir marcher avec la v9 mais il vaut mieux utiliser la dernière version
Le message d'erreur indique très clairement que tu n'utilises pas la bonne méthode
Bah ouais mais j'avais pas pris en compte la version
Après
Quand j'ai tapé
const { Routes } = require("discord-api-types/v9")
L'autocompletion m'as direct proposé v9
Et pourtant j'ai tout bien installé correctement
Apparemment avec v9 j'ai juste à ajouter un argument dans le fichier config qui est "token_type": "Bearer",
#VueJS #NuxtJS
Bonjour,
Dans ce cas de figure, comment procédons-nous pour ajouter le localePath de i18n à notre route '/articles/page/1' ?
export default {
middleware({ redirect }) {
return redirect('301', '/articles/page/1');
},
};
J'aimerais que mon URL soit comme : https://localhost:3000/fr/articles/page/1, sauf que ce code ne permet pas d'accéder à la localePath "/fr/" 😦
var Nombre = message.content.toLowerCase().replace(/[^0-9]/g, "") // trouver le nombre de msg a supp, remplacer essai par message.content
Client.on("messageCreate", message => {
if (message.author.bot) return;
//autodelete
if (message.content.startsWith(prefix + "del") && (Nombre > 1) && (Nombre < 100)){
message.reply("j'ai supprimé" + " " + (Nombre) + " " + "messages comme un grand")
} else {message.reply("ton nombre doit etre compris entre 1 et 100!")
};
});```
Slt, je viens d'ajouter ces lignes au code de mon bot et quand je le lance vscode marque ca dans la console
Salut ! j'essaye de passer Days dans une db mais ca l'ecrit [object object] ```js
const days = {
lundi: Input.Lundi || false,
mardi: Input.Mardi || false,
mercredi: Input.Mercredi || false,
jeudi: Input.Jeudi || false,
vendredi: Input.Vendredi || false,
samedi: Input.Samedi || false,
dimanche: Input.Dimanche || false,
},
Salut, j'essaye de faire que en fessant +mdp le bot répond a la personne mais que les autre personne ne puisent pas voir la réponse du bot et je n'arrive pas possible de m'aider.
Code :
if(message.member.permissions.has("PRIORITY_SPEAKER")) {
if(message.content === prefix + "mdp") {
message.reply({content: "Le mot de passe est : **drangheta**", epheremal: true});
}
}
})
c'est que avec les slashcommands
D'accord ducoup j'ai voulu faire autrement car on ne peut pas mais j'ai encore eu une erreur:
Code :
if(message.member.permissions.has("PRIORITY_SPEAKER")){
if (message.content === prefix + "mdp") {
message.author.send('MDP = **drangheta**');
}
}
})
Sa m'envois le message mais aprés le bot crash
c'est quoi lerreur dans la console ?
la premiere ligne :
il trouve pas permissions
Je peut faire comment ?
Bonsoir, quelqu'un aurait fait un peu de js sur FiveM, j'aurais une petite question
Pose ta question directement
Les copains
J'ai fais un programme (feat Zaros
) Sauf qu'il ne répond plus : (
Je sais pas trop comment expliquer
Donc le principe de mon bot c'est que quand on fait une commande ça nous crée un emoji, des roles des salon etc, sauf que le bot s'arrete avant avoir fait tout ça
Le code est bon et y'a pas d'erreur
c'est à dire le bot s'arrête
et bien il y a marquer que le bnot "réfléchit" en continu
sans rien faire
els roles, les salons et les emojis ne se créent pas
y'a juste le status du bot qui change comme le prouve ce screen
Est ce que ça vient du fait que le bot fait trop de requetes ? Je le test beaucoup donc bon 🤷♂️
euh alors je t'avoue que je comprends pas trop ce que fait ta commande, elle réalisé toutes ces actions ?
non justement elle à pas realiser toutes les fonctions
Ah yep tout à fait possible x)
Le principe c'est de crée un serveur complet avec le bot
Cet à dire crée les salons, les roles, les emojis etc
sauf que tout ça ben ça doit realiser beaucoup d'actions du coup
Oh d'accord, mais du coup quel est le problème ?
yep, c'est bien possible
le problème c'est que la réalisation de la commande s'arrete au moment ou il faut changer le status du bot
aie terrible
essaye de listen l'event
:event: (event) Client#rateLimit
Emitted when the client hits a rate limit while making a request
la commande est donc censé faire d'autres choses après ?
oui
c'est à dire ?
pour faire ça
comme quand tu .on l'event interactionCreate par ex
client.on('rateLimit') ?
Client.on('rateLimit', (ratelimit) => {
console.log(ratelimit);
});
par ex
oui
okok je vais tester
alors
ça ne doit pas etre ça
le rate limit ne se console.log pas
@sharp grail
La pp du bot change ?
Ah si
euh ben j'ai fais le test plusieurs fois et hier ça marchait donc j'en sais rien
ah ok
et du coup quel est le pb ? x)
Tu send trop de requests pour créer des rôles



