#javascript-typescript

1 messages · Page 107 of 1

true bone
#

il y en n'a pas

#

juste ça envoie pasde message

dire latch
#

Tu load bien les intéractions ?

true bone
#

ouais

dire latch
#

Avec le bot invité avec les applications ?

true bone
#

oui

dire latch
#

Envoi le code qui load tes intéractions

true bone
# dire latch 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)
    }
}

}`

oak turret
#

t’as invité ton bot avec le scope applications.commands ?

true bone
#

oui

red torrent
#

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

true bone
red torrent
#

Voilà qui aide beaucoup kappa

true bone
past nimbus
#

Doucement, on risque de se noyer sous l'information là

red torrent
#

Ç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

keen narwhal
#

Est ce que quelqu'un pourrait venir m'aider en vocal à régler ce soucis svp, je dois rendre le projet pour ce soir

bitter mango
#

C'est possible avec nodejs de modifier la page actuelle genre avec document.xx

#

Ou alors de la modifier avant de l'afficher

past nimbus
#

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

bitter mango
#

Genre du EJS je peux

#

Bon je vais le faire côté client du coup mdr

past nimbus
#

Ah je pensais tu parlais d'un fichier
Et c'est quoi le besoin concrètement ?

bitter mango
#

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

past nimbus
#

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 ?

bitter mango
#

C'est ça

past nimbus
#

Je t'ai répondu sur l'autre serveur

onyx harbor
#

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

red torrent
#

tu devrais essayer de poser ta question ou d'exposer ton problème, on risque d'avoir du mal à le deviner

subtle jackal
#

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 ?

onyx harbor
#

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

red torrent
onyx harbor
#

vas-y

red torrent
#

là où il y a ton problème

onyx harbor
#

mais là j'ai fais 100k de trucs différent

subtle jackal
#

ptit question sur cela je rentre sa ou dans le code ?

onyx harbor
#

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

red torrent
#

c'est parce-qu'en jsx il faut utliser le ternaire

onyx harbor
red torrent
#

ça c'est normal

onyx harbor
#

ouais là ça work

red torrent
#

si ton component renvoi null ça équivaut à rien

onyx harbor
#

non ça marche là

#

j'étais là à mon dernière essaie

#

sauf que là

#

j'arrive pas à rediriger

#

vers la page principale

red torrent
# onyx harbor vers la page principale

dans ta méthode getServerSideProps tu dois retourner

return {
  redirect: {
    permanent: false,
    destination: "/login",
  },
  props:{},
};
``` si user est null
onyx harbor
#

ouais mais justement

#

après le return

#

je peux pas mettre de code

red torrent
#

c'est normal

#

il faut mettre une condition

onyx harbor
#

oui j'sais

#

ah

red torrent
#
return req.user ? {
            props: {
                user: req.user
            }
        } : {
            redirect: {
                permanent: false,
                destination: "/login"
            },
            props:{}
        }
onyx harbor
#

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

red torrent
#

t'es sûr que c'est req.user ? Et pas res.user

onyx harbor
onyx harbor
#

ouep

#

sur

red torrent
#

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é

onyx harbor
#

j'ai test même erreur

red torrent
#

tu peux montrer ton code?

onyx harbor
#

dans un autre page j'ai fais ça

red torrent
#

et là quand tu es connecté ça t'affiche bien ton user?

onyx harbor
#

et ça work

#

ouep

#

look

red torrent
#

montre moi ton code de getServerSideProps

onyx harbor
#

là quand je suis login

#

avec le code comme ça

#

tout marche

#

ça affiche bien l'avatar et tout

red torrent
#

le code à l'endroit où ca ne fonctionne pas ^^'

onyx harbor
#

bah là ça marche

#

mais juste si je me déconnecte

#

je reste sur la page

red torrent
onyx harbor
#

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

raven axle
#

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...

▶ Play video
crude ruin
#

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 '-'

torn fog
#

Je ne crois pas que c'est très opti de stocker ça dans du json

crude ruin
#

Hm :/ faut donc que je passe pas du mysqli ? :x (remarque à priori là je pourrais crypter + facilement)

copper pagoda
crude ruin
#

Il faut que j'utilise du AJAX du coup ? :x Je suis plutôt orienté front j'avoue 😅

torn fog
lapis onyx
crude ruin
#

Pas de backend, pour choper les villes via les codes postaux j'ai une db json x)

keen narwhal
#

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

crude ruin
crude ruin
#

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 ^^

keen narwhal
#

salut , jarrive pas a lier mon js a l'html vous savez comment faire a part :
<script src="index.js"> </script>

bitter mango
#

Il faut link ton js a la fin de ton fichier juste avant la balise </html>

broken solar
#

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 ?

bitter mango
#

Je sais pas si c'est ça que tu veux mais si ça peut t'aider

bitter mango
#

Qu'est ce que tu a comme erreur et c'est quoi ton code

keen narwhal
#

donc javoue que je seche

bitter mango
#

T'es fichiers ils sont organisés comment

cyan iron
#

L'erreur vient de ton fichier js visiblement

#

Montre nous le contenu de ton fichier js

keen narwhal
#

yes

bitter mango
#

change les backslash pour des /

keen narwhal
bitter mango
#

Met juste ./test.js

#

dans ton src

keen narwhal
#

yes je regarde

cyan iron
#

Ok alors c'est bien ton fichier qui n'est pas trouvé, il a raison met juste ./test.js

keen narwhal
#

toujours pas

bitter mango
#

Erreur ?

keen narwhal
bitter mango
#

La c'est ton fichier js le prbl

keen narwhal
keen narwhal
#

je vois pas ou est le probleme

bitter mango
#

T'essaie d'avoir des élement qui n'exite pas dans ta page c'est logique mdr

keen narwhal
#

comme quoi ?

bitter mango
#

Lignes 1 à 7

keen narwhal
#

oui ?

bitter mango
#

Evite de télécharger des fichier js comme ça sur internet

keen narwhal
#

c'est sur codepen logiquement c'est safe

bitter mango
#

Ca t'apporte rien si tu veux apprendre un language il faut coder

bitter mango
keen narwhal
bitter mango
#

Bah non ton fichier html est vide

keen narwhal
#

non regarde

bitter mango
#

Importe ton js a la fin de ton fichier HTML comme je t'ai dis

keen narwhal
#

yes

#

ya plus derreur

#

mais c'est pas le truc que je veux a la fin

bitter mango
#

Je peux pas t'aider sur ça si tu donnes pas plus d'infos

keen narwhal
#

en gros

#

ya pas le js

#

ya que le html et le css

bitter mango
#

Erreur ?

keen narwhal
#

jai juste ça

#

v

bitter mango
#

envoie ton code pen

keen narwhal
bitter mango
#

Oui

keen narwhal
bitter mango
keen narwhal
#

sa change rien

bitter mango
#

Je sais pas alors

#

Mais apprend a dev toi même vraiment mdr

floral bolt
#

Tu prends un truc sur codepen pour ton projet de fin d’année ?

bitter mango
#

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

floral bolt
#

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

past nimbus
#

ça va gueuler lors de l'oral :x

bitter mango
#

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

pallid plume
#

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 )

keen narwhal
#

Salut, je voudrais rentrer dans une db firebase mais je n'y arrive pas qui pourrais m'aider svp ?

keen narwhal
#

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

keen narwhal
#

nvm ive found

pallid plume
red torrent
#

en tout cas il a Windows en français

red torrent
keen narwhal
#

It's from the website

#

My friend did it

bitter mango
#

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

sharp grail
#

usrBan.find(i => i == input) ?

bitter mango
#

aussi

#

ou alors un for of beaucoup de moyens possible

sharp grail
#

par contre

#

je suis pas sur que save des users bans de cette manière fonctionne

sharp grail
#

et surtout ça fonctionne mal

#

car si ton user ban est pas à la fin, ça remet à false

#

donc pas ouf

bitter mango
bitter mango
sharp grail
bitter mango
#

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

keen narwhal
keen narwhal
bitter mango
#

C'est le but mais vous avez rien appris ?

full prawn
#

hey

Uncaught DiscordjsError TypeError [CLIENT_MISSING_INTENTS]: Valid intents must be provided for the Client.

#

quel INTENT je dois ajoouter ?

bitter mango
#

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

floral bolt
bitter mango
#

fichier json

bitter mango
#

Alors pourquoi tu le fait pas

keen narwhal
bitter mango
#

On te l'a donné quand ?

keen narwhal
#

ya 1 semaine

bitter mango
#

Donc tu avais de temps

keen narwhal
bitter mango
#

Au moins essaie de comprendre le js

keen narwhal
#

javais commencer avec le pokedex

#

mais bon

bitter mango
#

Mais ?

keen narwhal
#

je comprend pas

bitter mango
#

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

keen narwhal
#

yes

bitter mango
#

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

keen narwhal
#

je veux bien ;D

bitter mango
#

Je t'envoie ça en pv

keen narwhal
#

yes merci 😄

bitter mango
#

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

bitter mango
#

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

sharp grail
shadow dew
#

salut

#

je voudrais savoir

sharp grail
#

Bonsoir, oui ?

shadow dew
#

comment je peut généré un id aléatoirement et le stocker sur ma bdd mongodb

bitter mango
#

math.random je crois

shadow dew
#

vous avez pas un exemple de code svp

sharp grail
shadow dew
#

express

#

j'essaye de faire une api

bitter mango
#

let random = Math.floor(Math.random() * 100);

sharp grail
#

Oui mais pour faire des requêtes avec mongodb?

shadow dew
#

mongoose

shadow dew
sharp grail
#

Ah alors y a quelque chose qui peut te ne fakre

bitter mango
#

le nombre max

sharp grail
#

C'est pas ce qu'il demande

shadow dew
sharp grail
#
// 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();
shadow dew
#

ok je vais essayé

#

merci

sharp grail
#

mongoose.Types.ObjectId() génère une id unique

sharp grail
#

tu peux trouver plus d'infos sur la doc de mongoose

shadow dew
#

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

viral nexus
#

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");
}

});

cyan iron
#

Un objet RegExp est utilisé pour étudier les correspondances d'un texte avec un motif donné.

La méthode toLowerCase() retourne la chaîne de caractères courante en minuscules.

#

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...

sharp grail
shadow dew
#

Client.on("messageCreate", message => {
//feur
if (message.content == quoi){
message.reply("feur");
}
});

#

c commensa je croit

sharp grail
#

?

red torrent
#

Je m'y attendais pas à celle là

bitter mango
#

D'ailleur dans quel contexte on utilise = ou == ou === ?

queen ocean
#

1 == "1" // true
1 === "1" // false

keen narwhal
#

Hello ! Savez-vous si il existe un moyen de sauvegarder les données sélectionnées d'un SelectMenu ?

dusk lagoonBOT
#

:y_: Carte générée en 5.04s !

dusk lagoonBOT
#

:nop: Whoops! Cette commande est réservée aux staffs du serveur.. (requiert MANAGE_GUILD).

azure blaze
#

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 ?

shadow dew
#
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

azure blaze
#

Malheureusement ça ne marche pas, j'avais déjà essayé; Cela me donne ce message.

shadow dew
#

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

azure blaze
#

Non plus

#

J'ai essayé plein de trucs franchement je comprend pas

torn fog
#

" var role = "l'id du role" " tu essaye d'accéder à role.add ?

#

à quel moment role.add est déclaré dans ce string ?

torn fog
azure blaze
#

J'ai juste utiliser ce que Walid m'a envoyé

#

J'ai réglé le problème c'est bon

torn fog
#

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

azure blaze
#

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

torn fog
#

aaaah oui je vois x)

#

ceci contient donc l'utilisateur yeep

shadow dew
signal marsh
#

bonjour, j'aurais besoin d'une petite aide. Quelqu'un sait comment rentrer dans "[[PromiseResult]]:User" ?

past nimbus
#

Tu as await ta promise ?

signal marsh
#

je supp que non

past nimbus
#

C'était une question rhétorique, dans le code plus haut on voyait bien le "pending"

signal marsh
#

Et je doit faire comment (merci de votre réponse) ?

past nimbus
signal marsh
#

ok merci, je vais chercher

glass cargo
# signal marsh
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 ^^

fervent bison
#

Comment on peut faire pour commander notre bot depuis un site comme rythm ?

rapid musk
#

Faut mettre les piles dans le bon sens

keen narwhal
#

Mdr

fading glacier
rapid musk
#

des alternatives a express:
next
nuxt
fastify

#

fastify c'est sympa NM_peepoSipOkay

keen narwhal
#

Salut, j'aimerais me connecter à une db firebase mais j'ai une erreur, qui pourrais m'aider s'il vous plait ?

keen narwhal
#

?

fading glacier
fading glacier
lone flax
#

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 ?

ashen rapids
lone flax
#

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

ashen rapids
#

Normalement les MDP on les hash, on les crypte pas

Peut être un soucis de vocabulaire dans le commentaire

ashen rapids
#

Là à première vue oue, ça m'a pas l'air très solide

lone flax
#

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

ashen rapids
#

Ahah

lone flax
#

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

ashen rapids
#

Regarde la partie du code de la connexion. Comment ça se passe la comparaison du mot de passe avec celui en bdd

lone flax
#

Tu penses que j'ai accès à ca ?

ashen rapids
#

Haaaa désolé j'avais pas pigé que tu voyais le code côté front

lone flax
#

Yes justement

ashen rapids
#

Je pensais que t'avais le code source complet du site

lone flax
#

Non non mais justement ca m'avait étonné de voir la fonction en tant qu'user mdr

ashen rapids
#

Donc oui, chiffrer le MDP côté front c'est déjà un gros soucis 😂

lone flax
#

On est bien d'accord sue

#

Littéralement dans un fichier .js

ashen rapids
#

C'est pas non plus une grosse grosse vulnérabilité mais ça peut faire peur sur ce qui peut vraiment se passer derrière 😂

lone flax
#

Yes justement j'aimerai bien trouver 2/3 trucs mais j'suis pas du tout spécialisé en web

ashen rapids
#

À 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

lone flax
#

Je pense que la "clé" de chiffrage dépend juste de l'école à laquelle tu te connectes sue

ashen rapids
# lone flax

Essaie de regarder sur le login, partie front, l'appel que ça fait pour valider la connexion

lone flax
#

donc si j'essaye avec admin (un utilisateur qui existe)

ashen rapids
#

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

lone flax
#

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

torn fog
#

🍿

lone flax
#

et du coup c'est bien celui de l'URL

torn fog
#

Donc peut être que si t'a la clé tu peux ressortir le mot de passe de l'admin

lone flax
#

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

ashen rapids
#

Ok donc si la BDD fuite, tu peux récupérer tous les MDP en clair

lone flax
#

Clairement

torn fog
#

Bah logiquement si il y a une faille XSS au moment de la connexion tu peux contrôler la base de données

ashen rapids
#

Pas ouf KappaCringe

torn fog
#

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

ashen rapids
#

Si t'as une faille aussi banale que ça, j'en suis sûr que tu peux faire une injection SQL 😏

lone flax
#

Yes je me doute mais il a restreint le login à 15 caractères sue

torn fog
#

Et cette limite est front ou back?

lone flax
#

Front et back

torn fog
lone flax
#

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

torn fog
#

Donc il faut trouver le moyen de mettre du SQL mais que 15 caractère

#

😂

lone flax
#

Mais je sais que si je rentre <img> dans le login, ca va être interprété :

torn fog
#

Aaaah c'est bon signe

#

Ou pas

lone flax
#

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)

ashen rapids
#

C'est du PHP ?

lone flax
#

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

ashen rapids
#

Si c'est du PHP, t'as la faille de l'upload de fichiers aussi

lone flax
#

Il y a un moyen de savoir ?

ashen rapids
#

Dans ton onglet Network

#

Tu peux voir les URL que le site appelle

lone flax
#

Genre ca ?

#

Ya po de php on dirait

#

Je vais éviter de montrer l'URL

ashen rapids
#

Oue donc soit c'est du rewrite, soit c'est pas du PHP

lone flax
#

Surement du python franchement

ashen rapids
#

C'est du NodeJS KappaCringe

lone flax
#

mdr

#

Le nom de domaine contient python littéralement

#

Donc ca ne m'étonnerait pas MDR

#

je viens de remarquer

torn fog
#

Ptdrrr

#

Donc quelqu'un à eu le boulot de faire ce site en python aïe

ashen rapids
#

Oui en effet du Python

Je pensais que Cherry Pu c'était juste un serveur web mais non

lone flax
#

Il y avait une sale faille sur Cherrypi (le serveur sur lequel ils sont) mais c'était quelques versions avant

torn fog
#

Prions tous pour lui sue

ashen rapids
#

C'est aussi une lib dev web

lone flax
#

Un truc de malade vraiment

torn fog
lone flax
#

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

torn fog
#

Maxor le haxor

lone flax
#

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" KappaCringe

#

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.

torn fog
#

Bah logique que c'est fait par leur soin il y a pas grand monde qui va faire un site web en python

lone flax
#

mdrr

bitter mango
#

Comment je peux faire pour baisser la complexité de ma fonction ?
Mon éditeur me le signal
Avec 14 de complexité

ashen rapids
#

Il se base sur quoi ton éditeur ?

bitter mango
#

Aucune idée ça doit être une de mes extentions

ashen rapids
#

Déjà t'as énormément de calllback. De mon côté j'aurais privilégié du async / await

#

Mieux indenter aussi

torn fog
#

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

bitter mango
#

Merci mais rien n'est changé pour la complexité mdr

torn fog
#

Aaah?

lone flax
#

Si ta complexité c'est le temps que le code prend à être exécuté c'est normal

#

Tu fais de la manipulation de fichier

torn fog
#

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

bitter mango
#

Je suis débutant en node c'est juste pour m'entrainer à la manipulation de fichier et json

torn fog
#

Ah d'accord

#

Bah regarde un peu mongodb

#

Ça sera moins complexe

lone flax
#

Ou ignore juste le message

#

On s'en fout

torn fog
#

Ui

bitter mango
lone flax
#

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

fading glacier
#

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)

past nimbus
fading glacier
past nimbus
#

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...

fading glacier
primal lily
#

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 ?

floral bolt
#

Faut utiliser create element

primal lily
floral bolt
primal lily
#

Je regarde sa, merci de ton aide 🙏

torn fog
primal lily
bitter mango
#

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

floral bolt
#

Enfaite ca passe mais que si tu mets tous sur 1 ligne

#

enfin il me semble

floral bolt
#

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 ?

exotic spoke
#

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)
                    }
            })
    });```
dire latch
#

&& pas & il me semble @exotic spoke

exotic spoke
exotic spoke
dire latch
exotic spoke
#

Ha xD

#

J'avais pensé ca me paraissait bizarre que ce soit ca

dire latch
#

Pk le settimeout, tu devrais le mettre direct en haut

#

Et l'enlevant

#

Genre message2.delete();

exotic spoke
dire latch
#

Car il sert à rien mdr

exotic spoke
#

Ca me permet de faire plusieurs commande sur mon bot discord

dire latch
#

Pas le settimout

exotic spoke
#

oui

dire latch
#

ba non

#

Sa, c'est un timer

exotic spoke
#

Je sais oui xD

#

Mais je vois pas pk je devrais le mettre en haut

dire latch
#

Nan l'enlever

#

Et tu met ce que j'ai mis plus haut

dire latch
exotic spoke
fading glacier
#

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)

past nimbus
#

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

bitter mango
#

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

fading glacier
#

Re, bon autre question parce que le MT ça sera pas pour tout de suite sue, 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

past nimbus
bitter mango
#

Pas faux aha

past nimbus
# fading glacier Re, bon autre question parce que le MT ça sera pas pour tout de suite <:sue:6149...

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

fading glacier
#

je sais pas si c'est clair

red torrent
#

c'est clair

#

je vais te faire un exemple

red torrent
#

c'est un peu overkill

past nimbus
#

Pourquoi ? C'est exactement le cas d'utilisation pour le coup et au moins c'est générique

fading glacier
fading glacier
past nimbus
red torrent
#

un moteur de template

#

comme ejs, twig, ...

fading glacier
#

ejs c'est pas pour le web ?

past nimbus
#

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 ?

fading glacier
#

ça sera le message configuré par serveur qui sera envoyé à chaque fois que qqn va join

past nimbus
#

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)

fading glacier
#

yes surtout que genre ça sera les variables exactes

#

Mais ducoup je vois pas trop comment je peux utiliser les regexp pour ça

past nimbus
#

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

fading glacier
#

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 ?

past nimbus
#

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

fading glacier
#

Okay merci

#

sinon "pourquoi le nosql", jsp j'aime bien mongodb 😂

past nimbus
#

ahm ^^'

fading glacier
#

En fait c'est surtout le système de schema que je trouve pratique

red torrent
# fading glacier 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

fading glacier
#

Ok ok merci, je testerais ça tout à l'heure

red torrent
# fading glacier 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;
past nimbus
#

Je sais pas si on peut dire que c'est plus propre, mais c'est différent x)

red torrent
#

ça reste plus propre que de télécharger un moteur de template pour remplacer des variables dans 3 lignes

past nimbus
#

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 ^^'

red torrent
# past nimbus On appelle ça un moteur, c'est pas pour autant que c'est lourd ^^ Et puis si on...

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

past nimbus
#

🥲

fading glacier
#

Ah oui mybad j'avais pas la bonne lib dans mon tsconfig

sharp grail
#

Ah si d'accord

red torrent
#

le principe de class, etc...

sharp grail
#

Oui, mais rapport a quoi ?

red torrent
#

par rapport à son message

sharp grail
#

Quelle partie*

red torrent
#

celle sur les instances

sharp grail
#

Yep ok

red torrent
#

parce-pour les moteurs de template c'est pas très lourd mais dans ce cas d'utilisation c'est overkill

sharp grail
#

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

fading glacier
#

Re @red torrent, donc j'ai un petit problème avec ton code, il ne marche pas sue (voir screens)

#

Est-ce que tu sais si c'est moi qui ai fait une erreur ou pas ?

past nimbus
fading glacier
#

ça fait 20 minutes que je le regarde 😂

past nimbus
#

Tu peux montrer le reste de ton code stp ?

fading glacier
#

La partie formatter ?

past nimbus
#

Tout

fading glacier
past nimbus
fading glacier
#

le hastebin c'est mon guildMemberAdd

past nimbus
red torrent
past nimbus
#

😤

red torrent
# fading glacier Re <@391270875200094249>, donc j'ai un petit problème avec ton code, il ne march...

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;
fading glacier
broken solar
#

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 :

past nimbus
#

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

fading glacier
#

pourquoi c'est pas top ? ça fait quoi les timeout (à part timeout sue)

past nimbus
fading glacier
#

pas faux

past nimbus
#

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é

charred lake
#

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
keen narwhal
charred lake
#

Oui

keen narwhal
#

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

charred lake
#

Tu n’as pas compris

#

Le menu est propre à interaction

keen narwhal
#

si

charred lake
#

Alors, il faut que je me base sur cette interaction

#

Pour le mettre à jour une fois l’interaction reply effectué

keen narwhal
#

Tu ne peut pas

#

Pour eviter que l’option sélectionné reste bloqué en gros?

#

c’est ça ton problème ?

charred lake
#

Ouep

#

Pour qu’il repasse sur l’élément par défaut

keen narwhal
#

Yes bah utilise ma technique

#

Yes

charred lake
#

C’est terrible qu’ils aient pas pensé à ça

keen narwhal
#

Je suis d’accord avec toi

sharp grail
#

Bah

keen narwhal
#

Mais pareil j’ai dû utiliser la technique que je t’ai expliqué car c’est impossible

sharp grail
#

Dans le cas d'un menu, tu peux update le message en faisant message.edit()

keen narwhal
#

car l’interaction ce termine lors de la première action

charred lake
#

C’est peut être plus propre comme ça ?

keen narwhal
#

avec les mêmes valeurs des components

#

sa reviens au même en soi

sharp grail
#

Tu peux, en deferUpdate avec l'interaction puis follow up par exemple

keen narwhal
#

Déjà essayer et il me semble que ont peux pas Hareng

charred lake
#

Followup qu’est ce que ça fait ?

keen narwhal
#

a vérifier

keen narwhal
#

edit en followup

charred lake
#

Car deferUpdate c’est ce que j’utilisais tout à l’heure

keen narwhal
#

enfin tu m’a compris je pense

sharp grail
keen narwhal
#

Yep

#

A confirmer

#

mais fut un temps j’avais essayé et c’était impossible

sharp grail
charred lake
#

Oui mais je ne pourrais pas reply + deferUpdate

keen narwhal
#

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

sharp grail
#

Tu peux follow up

#

C'est le principe même

charred lake
#

Follow après le defer ?

sharp grail
#

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

charred lake
#

Je regarderai alors demain comment je peux implémenter le followup dans mon code

#

Merci 😉

sharp grail
#

Pas de soucis bongoTap

keen narwhal
#
await interaction.deferReply();
interaction.followUp("Message").then(message => {
    message.edit("Message modifié");
});```
#

un truc du genre Hareng

#

?

sharp grail
#

DeferUpdate pour le coup

keen narwhal
#

oui ok

#

je savais pas

#

je testerai aussi

sharp grail
#

Et pourquoi tu ajoutes un then?

keen narwhal
#

ç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

sharp grail
#

Ca n'a rien à voir

keen narwhal
#

c’est le meme principe

sharp grail
#

Ici la personne voulait edit le message du follow up après l'avoir envoyé

keen narwhal
#

mais pour son menu

sharp grail
keen narwhal
#

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

keen narwhal
#

cimer du conseil jvais tester ça dm

sharp grail
#

Oui mais qui se fait ici avec une update par l'interaction~

sharp grail
sharp grail
#

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 ?

past nimbus
#

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é

misty parcel
#

Salut à tous j'aimerais savoir ç quoi sert l'option default? dans un select menu

autumn glacier
misty parcel
#

Aaaaaaa

#

Ok ok

#

Merci

autumn glacier
#

no problem

wicked eagle
#

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 🙏

torn fog
sharp grail
past nimbus
exotic spoke
#

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

past nimbus
#

Pas de majuscule dans le nom de la commande

exotic spoke
#

Plus grosse blague que l'on m'est jamais faite

exotic spoke
#

Bah tout ca pour une maj

past nimbus
#

Ah bah... :/

sharp grail
past nimbus
sharp grail
#

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.

harsh snow
#

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

exotic spoke
#

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)```
red torrent
#

essaies de remplacer js const { Routes } = require("discord-api-types") par ```js
import { Routes } from "discord-api-types"

exotic spoke
#

Je l'ai installé pourtant

red torrent
#

mais je pense que tu peux carrément retirer l'import

#

tu n'as pas l'air de te servir de "Routes"

exotic spoke
red torrent
exotic spoke
#

Oui je sais j'essaie de mes régler

exotic spoke
# red torrent il va falloir me montrer les erreurs je vais avoir du mal à les deviner <:kappa:...
    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```
red torrent
#

tu trouveras pas plus explicite comme erreur

#

"An invalid token was provided"

exotic spoke
#

Bah oui

#

Mais

#

ou

#

J'en ai pas fourni qu'un de token xD

red torrent
#

le token du bot

red torrent
#
bot.login(token.token);
#

je vais pas te demander de montrer ton config.json mais tu devrais pouvoir trouver tout seul

exotic spoke
#

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

sharp grail
#

structure du fichier config.json ?

red torrent
#

tu peux envoyer un screen de ton config.json en masquant les valeurs

red torrent
exotic spoke
red torrent
# exotic spoke

donc tu vas remplacer bot.login(token.token); par bot.login(token);

sharp grail
#

et effectivement

exotic spoke
red torrent
exotic spoke
#
    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
sharp grail
past nimbus
sharp grail
#

Bah

#

Ah nan c'est bon

#

J'ai compris~

past nimbus
#

D'acc mdr

sharp grail
#

J'avais pas enregistré le insert/update

past nimbus
#

D'acc

misty parcel
#

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

autumn glacier
#

y'a un exemple

misty parcel
cyan iron
#

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

misty parcel
#

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

keen narwhal
#
.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

keen narwhal
misty parcel
#

ok mais du coup ça veut dire que y'a pas moyen de patcher ça 🤔

misty parcel
keen narwhal
misty parcel
#

patcher le fait que ça n'envoie pas à la fois le catch et le then

keen narwhal
#

bah utilise le code que je t’ai donné

cyan iron
#

Si tu as une erreur ton code ne va pas passer par le then ;)

keen narwhal
#

alors que seulement l’un des deux devraient être exécuté, mais je pense qu’il a mal fait le .then().catch()

cyan iron
#

Oula oui c'est pas normal, mais perso je ne l'ai pas compris comme ça

#

On verra bien quand il va revenir :')

keen narwhal
#

yes

keen narwhal
cyan iron
#

@misty parcel log ton erreur aussi

misty parcel
#

ah pardon x) oui en faite le .then et le catch s'executent en meme temps

keen narwhal
#

c’est quoi l’erreur que tu as en console s’il te plaît ?

misty parcel
#

d'ailleurs le catch s'envoie avant le then

#

attends

keen narwhal
#

oui mais ça c’est parce que tu as mal fait ton then catch

misty parcel
#

y'a pas d'erreur

#

j'ai fais ça

keen narwhal
#

retire le serv =>

#

il sert a rien ^^

#

entre le then et le catch

cyan iron
#

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... }

keen narwhal
#

surtout l’erreur aussi qui nous faut stp

misty parcel
#

attendez j'arrive 5 minutes

keen narwhal
misty parcel
#

y'a pas d'erreur

keen narwhal
#

d’accord

#

dans ce cas tu return la ligne

cyan iron
keen narwhal
#

ah c’est ce qu’il a fait pourtant 😂

cyan iron
#

Ouais bon j'arrive quand je suis sur PC les messages chargent pas :') désolé

keen narwhal
#

tkt

misty parcel
#

ok re

cyan iron
#

Re, oui effectivement je n'avais pas vu son screen du coup. Alors du coup ça fonctionne ?

misty parcel
#

euh non

#

l'emoji se crée correctement

#

mais le catch et le then s'envoient quand meme : (

#

enfin le catch du coup

cyan iron
#

Montre ton code

misty parcel
#
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")
                         });
cyan iron
#

Enlève le serv =>

#

Ça marche pas comme ça

keen narwhal
#

^

cyan iron
#

Skoozz te l'a dit au dessus en plus

keen narwhal
#

puis moi pour être sur je return toujours

astral thorn
#

Pas un bon réflexe

cyan iron
#

C'est pas utile là

astral thorn
#

Surtout dans un callback c’est inutile

misty parcel
#

ok

#

du coup avec l'update j'ai ça

keen narwhal
#

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é

keen narwhal
astral thorn
keen narwhal
#

ah oui, le then

misty parcel
#

.then((serv) =>

#

?

keen narwhal
#

yes

astral thorn
keen narwhal
#

retire moi le iconURL() du string au passage x)

astral thorn
#

Par contre la promise du emoji create contient un emoji, pas un serveur fyi

misty parcel
#

ça marche

#

Merci beaucoup : D

keen narwhal
#

les liens fonctionnent aussi @astral thorn 😉

keen narwhal
astral thorn
#

Et un peu la flemme de refaire toute l’architecture a la main je te cache pas 😅😂

keen narwhal
#

Ah problématique

#

Au niveau du lien je parlais surtout pour le paramètre attchment je pensais que tu parlais de sa

astral thorn
#

Ah nop

#

C’est juste que dans son callback il appelle son paramètre serv

keen narwhal
#

le « serv » va renvoyer le nom de l’emoji, l’id de l’emoji etc

astral thorn
#

Alors qu’il s’agit d’un emoji

keen narwhal
#

oui

astral thorn
#

Mais bon après d’un point de vue fonctionnel ça pose pas de soucis

keen narwhal
#

ouai mais visuellement c’est po fou

astral thorn
#

Yes 😂

exotic spoke
#

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: [] }```
misty parcel
#

ptn 😭

red torrent
#

Puis tu peux aussi lire la doc histoire de comprendre ce que tu fais et où est ton erreur

exotic spoke
#

Mais je crois savoir

red torrent
#

Si tu avais lu la doc tu aurais trouvé

exotic spoke
#

Ça serai pas à cause du fait que j'ai pas coché le truc commandes dans la génération du lien du bot ?

red torrent
#

C'est surtout la méthode de ta requête qui n'est pas la bonne

exotic spoke
#

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

red torrent
#

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

exotic spoke
#

Dans un dossier config, mon guild id est défini pourtant

#

Haaaa donc j'ai pas mis la bonne version ?

red torrent
#

Ç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

exotic spoke
#

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

exotic spoke
urban stream
#

#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/" 😦

viral nexus
#
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
floral bolt
#

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,
},

harsh snow
#

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});
        }
    }
})
floral bolt
harsh snow
# floral bolt 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

floral bolt
#

c'est quoi lerreur dans la console ?

harsh snow
#

la premiere ligne :

floral bolt
#

il trouve pas permissions

harsh snow
broken solar
#

Bonsoir, quelqu'un aurait fait un peu de js sur FiveM, j'aurais une petite question

ashen rapids
#

Pose ta question directement

misty parcel
#

Les copains

#

J'ai fais un programme (feat Zaros myman ) 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

misty parcel
#

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

misty parcel
# misty parcel

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 🤷‍♂️

sharp grail
misty parcel
#

non justement elle à pas realiser toutes les fonctions

sharp grail
misty parcel
#

Cet à dire crée les salons, les roles, les emojis etc

#

sauf que tout ça ben ça doit realiser beaucoup d'actions du coup

sharp grail
#

Oh d'accord, mais du coup quel est le problème ?

sharp grail
misty parcel
#

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

sharp grail
#

essaye de listen l'event

desert riverBOT
#

:event: (event) Client#rateLimit
Emitted when the client hits a rate limit while making a request

misty parcel
#

euh

#

c'est quoi la syntaxe ? 🤔

sharp grail
misty parcel
#

oui

sharp grail
misty parcel
sharp grail
#

comme quand tu .on l'event interactionCreate par ex

misty parcel
#

client.on('rateLimit') ?

sharp grail
#
Client.on('rateLimit', (ratelimit) => {
  console.log(ratelimit);
});

par ex

sharp grail
misty parcel
#

okok je vais tester

#

alors

#

ça ne doit pas etre ça

#

le rate limit ne se console.log pas

#

@sharp grail

sharp grail
#

Ah

#

T'as execute la commande ?

misty parcel
#

oui

#

ah attends

#

c'est pas ça ?

sharp grail
sharp grail
misty parcel
#

ah ok

#

et du coup quel est le pb ? x)

sharp grail
#

Tu send trop de requests pour créer des rôles

misty parcel
#

serieux ?

#

oof

#

Ce matin ça marchait très bien

#

JE comprends pas

#

J'en ai pas rejouter depuis