#javascript-typescript

1 messages · Page 22 of 1

glass cargo
#

Ensuite, GatewayIntentbit ?

desert riverBOT
glass cargo
#

là, ça serait déjà mieux

fleet scaffold
normal lichen
#

et alors ?

#

il est mal ecrit ton mot x)

fleet scaffold
#

Euh, tkt Trust me

normal lichen
#

ta mit Itent a la place de intent

glass cargo
fleet scaffold
#

ahh

#

ça fait longtemps j'ai pas dev de bots discord 😭

#

Canvas c'est + drôle

fleet scaffold
#

je dois en faire un en Rust harold

glass cargo
#

Déjà, même si ça existait, ça serait GatewayIntentBit

fleet scaffold
#

Je dois démontré la supériorité d'un langage compiler

fleet scaffold
glass cargo
#

Je n'avais même pas remarqué le itent kapp

fleet scaffold
#

il a voulu copier coller Youtube

glass cargo
#

ou instents

fleet scaffold
#

c'est sûrement pour ça

glass cargo
#

Yep

#

En mettant la vidéo en 144p

#

Donc chiant pour recopier harold

fleet scaffold
#

non en vrai, là je me moquerais pas, il a fait l'effort de voir une vidéo

fleet scaffold
#

c'est déjà mieux que celui qui va prendre un code github et dire "c'est mon code tkt" alors que c'est la version 2392i82 de discord.js

fleet scaffold
#

et qu'elle est déjà déprécier harold

glass cargo
fleet scaffold
#

je vais devenir un vrai dev Rust et adduler le langage vous êtes pas prêt

glass cargo
fleet scaffold
#

API Rust, site Web en Rust, websocket en Rust, bot en Rust...

glass cargo
#

Le tout avec un hommologue en go, et après, du peux dire que t'auras réussi dans la vie kapp

fleet scaffold
#

non

#

Go burk

glass cargo
#

oui

#

j'ai tenté discordgo, 80 lignes pour une cmd ping

#

J'ai abandonné mdr

red torrent
keen narwhal
#

oula

#

donc ya quoi qui ne passe pas??

keen narwhal
#

jais pas vrm compris mon erreurerreur

#

hello alors jai un autre blm

quand je faitnpm i discord.js

sa me fait sela

PS C:\Users\Utilisateur\Desktop\Nonibot> npm i discord.js [#########.........] \ idealTree: timing idealTree Completed in 283ms

red torrent
queen ocean
red torrent
#

C'est pas plus simple s'il comprend ce qu'il fait au lieu d'appeler à l'aide à chaque étape ou chaque petit problème ?

queen ocean
#

Il y a plein de manière d'apprendre, a lui de trouver la manière qu'il préfère

keen narwhal
queen ocean
keen narwhal
#

je regarde un tuto mais sa me genere se problem

rancid vapor
#

Bonjour, j'ai fait un système quand on fait une commande slash ça envoie dans un message dans un certain channel, le message contient un bouton "prendre", j'aimerais que quand on appuie sur "prendre" ça envoie un message à la personne qui à éxecuté la commande slash. j'ai déjà essayer mais ça n'a pas été convaincant, merci de votre aide ^^

interactionCreate.js :

const Discord = require("discord.js")

module.exports = async (bot, interaction) => {

    if(interaction.type === Discord.InteractionType.ApplicationCommand) {

    let command = require(`../Commandes/${interaction.commandName}`)
    command.run(bot, interaction, interaction.options)
    if(interaction.isButton()) {
        if(interaction.customId === "confirm") {
          let user = bot.users.cache.get(interaction.channel.topic)
          try {
              await interaction.user.send("Votre commande à été prise !")
          } catch(err) {console.log(err)}
        }
      }
    }
}
#

commander.js (part 1) :

#
const Discord = require("discord.js") 
const { EmbedBuilder } = require('discord.js');
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder } = require('discord.js');

module.exports = {

    name: "commander",
    description: "Commencer votre commande",
    permission: "Aucune",
    options: [
        {
            type: "string",
            name: "prenom",
            description: "Votre prenom",
            required: true
        },
        {
            type: "string",
            name: "nom",
            description: "Votre nom de famille.",
            required: true
        },
        {
            type: "string",
            name: "commande",
            description: "Que voulez vous commander ?",
            required: true
        },
        {
            type: "string",
            name: "position",
            description: "Ou voulez vous qu'on vous livre ?",
            required: true
        },
        {
            type: "string",
            name: "numero",
            description: "Comment vous contacter ?",
            required: true
        }
    ],

#

commander.js (part 2) :

 async run(bot, message, args)
    {await message.reply({ content: ':incoming_envelope: Votre commande a été envoyé avec succès !', ephemeral: true });
        const commandes = bot.channels.cache.get('1125885241689653299');
        const confirm = new ButtonBuilder()
            .setCustomId('confirm')
            .setLabel('Prendre')
            .setStyle(ButtonStyle.Success);

            const row = new ActionRowBuilder()
            .addComponents(confirm);

        let firstname = args.getString("prenom")
        let lastname = args.getString("nom")
        let order = args.getString("commande")
        let location = args.getString("position")
        let phonenumber = args.getString("numero")
        const order_embed = new EmbedBuilder()
        .setColor("Green")
        .setTitle(':bell: ** Nouvelle commande reçu ! ** :bell:')
        .setDescription('Une nouvelle commande à été reçu.')
        .addFields(
            { name: ':person_standing: Prénom :', value: `\`${firstname}\`` },
            { name: ':family: Nom de famille :', value: `\`${lastname}\`` },
            { name: ':bento: Commande :', value: `\`${order}\`` },
            { name: ':map: Localisation :', value: `\`${location}\`` },
            { name: ':iphone: Numéro de téléphone :', value: `\`${phonenumber}\`` },
        )
        
    
    commandes.send({ embeds: [order_embed], components: [row], });

    
} 



}
keen narwhal
#

une solution a ca ?

rancid vapor
keen narwhal
#

y'a une commande a ca ?

#

c sur replit

rancid vapor
#

$npm update

keen narwhal
#

je choisis lequelle

#

?

rancid vapor
#

je sais pas 😦

keen narwhal
#

je vais essayé le deuxième

dire latch
#

CTRL + C

keen narwhal
#

je copie le code ?

dire latch
#

Fait juste npm i discord.js@latest

keen narwhal
#

vasy

rancid vapor
#

ou essaye npm rebuild bcrypt --build-from-source

#

fait une backup aussi !

dire latch
#

Puis, l'erreur vient qu'il ne trouve pas le fichier

keen narwhal
#

désolé de ne pas être aussi fort 😭

#

c'est compliqué..

rancid vapor
keen narwhal
#

je fait la premiere commande

#

et je vais essayé

dire latch
#

Tu peux envoyé le code qui fais l'erreur 🤔

keen narwhal
#

tout desuite

rancid vapor
keen narwhal
#
/home/runner/BotDiscord/index.js:9
        Discord.Intents.FLAGS.DIRECT_MESSAGES,
                        ^

TypeError: Cannot read properties of undefined (reading 'FLAGS')
    at Object.<anonymous> (/home/runner/BotDiscord/index.js:9:25)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47
keen narwhal
dire latch
keen narwhal
#

/home/runner/BotDiscord/index.js:9
Discord.Intents.FLAGS.DIRECT_MESSAGES,
^

TypeError: Cannot read properties of undefined (reading 'FLAGS')
at Object.<anonymous> (/home/runner/BotDiscord/index.js:9:25)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47

#

oui c ca

#

l'erreur a changé

#

quand j'ai téléchargé le truc

dire latch
#

Faut mettre à jour le code

keen narwhal
#

comment faire ?

rancid vapor
#

désolé

dire latch
keen narwhal
#

a la base ca devait un truc qui démarre sans problème

#

je n'ai absolument rien touché

dire latch
#

Ba qui te la fournis ?

keen narwhal
#

tu veux le code ?

rancid vapor
#

AHHH

#

NE PRONONCE PLUS CE NOM

keen narwhal
#

😭

dire latch
#

Ah

keen narwhal
#

mais un truc bien rep

#

ducoup je sais pas si c'est de moi le soucis

#

ou replit

#

ou le code

dire latch
#

Envoi voir

keen narwhal
#

v

#

ici ptet

#

si t'arriver a voir

#

c en public

#

@dire latchje crois que je sais

#

le soucis c'est qu'il arrive pas a lire le flags

#

faut téléchargé le truc

#

qui execute

#

le flags

#

att jv voir

dire latch
#

Oui, faut l'adapter à la nouvelle version

keen narwhal
#

tu sais comment faire ?

dire latch
#

Oui, sinon, ya des tutos 🙂

keen narwhal
#

Tu peu m'aidé ou m'envoyé un tuto stp ?

keen narwhal
#

merci*

dire latch
#

Dr

dire latch
misty parcel
#

Plus long tu meurs

dire latch
keen narwhal
#

*** voici les erreur ecrit quand je fait npm test***

npm ERR! Missing script: "test"
npm ERR!
npm ERR! To see a list of scripts, run:
npm ERR! npm run

npm ERR! A complete log of this run can be found in:
npm ERR!

floral bolt
#

fait voir ton package.json

glass cargo
#

Salut 👋
J'aimerais créer une app electron qui aurait besoin d'interagir avec l'API de YouTube. Sauf que pour ça, j'ai besoin d'un token. Le problème étant qu'une fois build et publiée, est-ce qu'un utilisateur pourra accéder à mon token ? Si oui, suis-je obligé de faire une API externe ?

pallid plume
#

Bah si tu dois publier ton appli et que tu veux que tout le monde passe par ton token pour moi le plus simple c'est que tu fasses une API Gateway entre le client et l'api youtube. Donc oui 🙂

glass cargo
#

Je m'en doutais, mais je préférais être sûr x)

fleet scaffold
#

c'est fait en Rust c'est une preuve de qualité harold

torn fog
#

Enfin quelqu'un qui parle de Tauri

glass cargo
#

OMG, une doc en français

#

Ah ouais mais faut que j'apprenne rust dcp

past nimbus
glass cargo
cyan iron
fleet scaffold
fleet scaffold
glass cargo
fleet scaffold
#

bah ça dépend vraiment de tes besoins

glass cargo
#

Au cœur de chaque application Tauri se trouve un binaire Rust qui gère les fenêtres, la webview et les appels au système d'exploitation par le biais d'une crate Rust appelé tauri.

fleet scaffold
#

tu as un petit support nodejs en interne de souvenirs

slim anvil
#

putain c’est clair qu’est ce que t’es relous garder

#

ça fait 5 jours tu met le mot RUST dans toutes tes phrases alors que t’as jamais rien fais encore avec, c’est usant

#

j’ai eu peur d’être le seul à être gonflé, mais non ça me rassure

fleet scaffold
#

👀 Bah soit saouler, mais Tauri est mieux que Électron

slim anvil
#

ok mec c’est super bravo !!

fleet scaffold
#

Ça sert à rien d'argumenter avec vous sur ce sujet 👀restez avec Javascript ça vous convient mieux

slim anvil
#

aucun rapport, on cherche même pas à argumenter sur le fait que ce soit bien ou pas

#

on te dit juste que tu casses les co.uilled

#

automod relou

cyan iron
slim anvil
#

c’est sûrement beaucoup mieux et tant mieux

#

mais c’est toujours pareille on aura beau être 38 a dire un truc c’est les autres le problème ^_^

floral bolt
#

En même temps c’est à nous de nous conformer aux envie de garder, alors go apprendre rust

fleet scaffold
#

👀 oui

slim anvil
#

ça doit être ça oui

fleet scaffold
#

apprenez le Go aussi

cyan iron
#

Mais

fleet scaffold
#

Faut apprendre 5838e838 langages Trust me bro

slim anvil
#

tu fais du sarcasme là dessus

cyan iron
#

ouais et démarrer 50 projets sans les terminer

slim anvil
#

mais c’est clairement l’image que tu renvoies de toi c’est marrant

fleet scaffold
#

J'apprends juste Rust depuis peu car je sais faire que du JS et du PHP, désolé de vouloir apprendre un truc nouveau ? 👀

slim anvil
#

c’est cool d’apprendre un truc

cyan iron
#

on te reproche pas d'apprendre un truc nouveau on te reproche de le crier partout et de casser les couyes aux gens avec tous les jours

slim anvil
#

t’es juste pas obligé d’en parler à chacune de tes phrases depuis que t’as commences quoi

#

enfaite on te dit ça pour toi

#

tu vois bien qu’on est plusisurs à l’avoir remarque

#

sauf si t’as envie d’être le relou de service, c’est un choix comme un autre finalement

fleet scaffold
#

🤔 Je serais moins reloue quand Rust aura son propre salon

slim anvil
#

tu vois

#

je give up

cyan iron
#

en vrai c'est pas faux ça un salon rust ce serait bien

#

comme ça il dit plus rien dans le salon js Frog_chut_MJ

slim anvil
#

oui sauf que les salons ont toujours été créé si il y a un intérêt communs

#

pas si un mec en parle partout

queen ocean
slim anvil
#

le jour ou y a un groupe rust qui se forme etc et de la demandes évidemment qu’il va pop

fleet scaffold
#

Après j'aime peut être Rust car il y a "rus" dedans, et comme j'aime bien le russe...

cyan iron
#

Je te vois comme ça garder ( désolé )

fleet scaffold
#

étant donné que je suis en train de convertir tout mes projets en Rust, oui c'est une représentation correcte

queen ocean
#

@fleet scaffold si tu veux parler de rust, fais le dans #autres-sujets-dev-tech
La tu profiter de chaque sujet de conv pour parler de rust, c'est ca qui soule les gens, donc limite toi au channel #autres-sujets-dev-tech pour rust merci myman

keen narwhal
oak turret
#

le mot rust va finir blacklist du discord

cyan iron
#

mdrrr

keen narwhal
oak turret
keen narwhal
#

a ok

#

bha je vois quand meme pas le rapport

brittle agate
#

🤦

cyan iron
#

Les scripts sont utilisés pour raccourcir tes commandes, quand tu build un projet par exemple
Ca te permet simplement d'éxécuter npm start au lieu de tsc && node dist/index.js par exemple

#

Donc dans ton package, tu rajoutes simplement un truc comme ça :

 "scripts": {
    "start": "tsc && node dist/index.js"
  },
oak turret
#

Sinon utilise nodemon pour avoir un npm run dev qui te permettra de reload automatiquement ton bot à chaque fois que tu sauvegardes un fichier, c’est sympa comme tool

fleet scaffold
#

j'ai envie de dire d'utiliser swc, car ça compile + vite que tsc mais on va encore dire que je casse les couille car swc utilise du rust 🤷‍♂️

oak turret
oak turret
#
glass cargo
fleet scaffold
glass cargo
#

Je savais pas ça :p

fleet scaffold
#

C'est ce que j'utilise perso

#

en mode dev uniquement bien sûr

glass cargo
#

oui oui bien sûr

keen narwhal
#

Bonjour est ce que quelqun saurai m'aider sur cette erreur d'intents

#

C:\Users\sinax\Documents\Devs\ActuFrance\index.js:4
Intents.FLAGS.GUILDS,
^

TypeError: Cannot read properties of undefined (reading 'FLAGS')
at Object.<anonymous> (C:\Users\sinax\Documents\Devs\ActuFrance\index.js:4:17)
at Module._compile (node:internal/modules/cjs/loader:1256:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
at Module.load (node:internal/modules/cjs/loader:1119:32)
at Module._load (node:internal/modules/cjs/loader:960:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47

#
const { Client, Intents } = require('discord.js');
const client = new Client({
    intents: [
        Intents.FLAGS.GUILDS,
        Intents.FLAGS.GUILD_MESSAGES
    ]
});
ancient sonnetBOT
#
❓ Obtenir de l'aide

Tu as besoin d'informations ? Tu es au bon endroit !
Consulte la liste des sujets pour en savoir plus sur Creators Area.

💻 Comment on envoie du code ? 💻

Pour envoyer du code sur Discord c'est très simple !
||Il vous faut d'abord du code... Et deux cubes de Kubor ! bongoTap||

En vrai, il faut utiliser les blocs de code de Discord :
Pour cela entoure ton code de ceci : ```

Par exemple :
```js
console.log("Salut Creators Area !")
```

Le résultat sera le suivant :

console.log("Salut Creators Area !")
```*Si tu es sur téléphone, tu ne verras pas le bloc de code*

> *TIPS: Si ton code est trop long, tu peux le coller sur [pastebin.com](https://pastebin.com/) et envoyer le lien par message.*
civic skiff
keen narwhal
# civic skiff Tu es en quelle version discord.js ?

v13 mais c'est bon j'ai trouvé mais mon bot fonctionne pas mais plus d'erreur j'ai fait comme ca ```js
const { Client, GatewayIntentBits } = require('discord.js');
const { google } = require('googleapis');

const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMembers,
],
});

civic skiff
#

Normalement en v13 c'est censé fonctionner

keen narwhal
civic skiff
#

Ok c'est pour ça que ça marchait pas

keen narwhal
oak turret
#

Hello @neat lintel,

Dis moi, j'ai 2 inhibitors avec la dernière version de Sheweny.

Un qui target un Regex, et l'autre un string pûrement lambda, le problème étant que pour une raison inconnue l'inhiteur regex prend le dessus quand t'as pas de perms, et par contre l'autre est appliqué sur un mec qui a full perms, je comprends pas vraiment pourquoi, t'aurais une idée ?

Le code de l'inhibitor avec la regex :

const { Inhibitor } = require("sheweny");
module.exports = class Regex extends Inhibitor {
  constructor(client) {
    super(client, [/^btn_/], {
      type: ["BUTTON"],
    });
    this.config = client.options.config;
  }

  execute(_, interaction) {
    return interaction.user.id === this.config.founderId || interaction.member._roles.includes(this.config.roles.staff);
  }

  async onFailure(_, interaction) {
    return await interaction.reply({content: "Vous n'avez pas  la permission d'utiliser ce bouton !", ephemeral: true});
  }
};

Le code de l'autre sans regex :

const { Inhibitor } = require("sheweny");
module.exports = class extends Inhibitor {
  constructor(client) {
    super(client, "captcha", {
      type: ["BUTTON"],
    });
    this.config = client.options.config;
  }

  execute(_, interaction) {
    return !interaction.member._roles.includes(this.config.roles.member)
  }

  async onFailure(_, interaction) {
    return await interaction.reply({content: "Vous avez déjà validé le captcha !", ephemeral: true});
  }
};

Merci d'avance

glad spire
#

Salut, j'ai besoin d'aide ! Quelqu'un connais une API de traduction (Anglais -> Français / Français -> Anglais) utilisable en js ?
Merci

keen narwhal
rancid vapor
#

Bonjour ! Le message ne s'envoie que à la personne qui à appuyer sur le bouton, je voudrais que ça s'envoie à la personne ayant executer la commande slash

#

en fait, une personne fait la commande slash, ça envoie dans un channel "Nouvelle commande reçu..." et il y a deux bouton en dessous, je voudrais que quand on appuie sur un des deux boutons ça envoie le message à la personne ayant executer la commande slash et non appuyer sur les bouton !

neat lintel
# oak turret Hello <@611468402263064577>, Dis moi, j'ai 2 inhibitors avec la dernière versi...

Salut, les inhibiteurs sont executés dans l'ordre de chargement des fichiers. Si un inibiteur est déclenché alors les suivants ne le seront pas seule la fonction onFailure sera appelée. Si tu veux gérer les priorités alors tu as l'attribu priority qui prend en valeur un nombre pour changer l'ordre (l'importance, la priorité) des inhibiteurs. Si tu as d'autres questions hésites pas a me ping je verrai plus vite 😉

oak turret
neat lintel
#

peut etre un bugg

#

je vais partir en vacances demain j'aurais pas le temps de regarder en détail mais sinon en attendant ajoutes une petite condition pour être sur

oak turret
neat lintel
#

ouais je viens de voir le code j'ai juste filtré par le type je crois

oak turret
#

ah je vois, t'inquiète je ferai sans le temps pas de soucis, merci de ton temps !

neat lintel
#

pas de soucis

oak turret
rancid vapor
keen narwhal
oak turret
#
#

c'est écrit dessus

frosty sand
#

Bjr vous avez une doc pour faire que quand notre bot écris on va l’appeler Léon bah ça écrit « Léon est en train d’écrire » comme une vrai personne

#

Merci

queen ocean
frosty sand
#

Ah merci

keen narwhal
#

Bonjour qui sait comment reglé cette erreur persistante "Une erreur s'est produite lors de la création/mise à jour des commandes : TypeError: Cannot read properties of undefined (reading 'commands')
at updateCommand (C:\Users\sinax\Documents\Devs\ActuFrance\index.js:141:13)
at Client.<anonymous> (C:\Users\sinax\Documents\Devs\ActuFrance\index.js:31:15)
at Client.emit (node:events:513:28)
at WebSocketManager.triggerClientReady (C:\Users\sinax\Documents\Devs\ActuFrance\node_modules\discord.js\src\client\websocket\WebSocketManager.js:387:17)
at WebSocketManager.checkShardsReady (C:\Users\sinax\Documents\Devs\ActuFrance\node_modules\discord.js\src\client\websocket\WebSocketManager.js:370:10)
at WebSocketShard.<anonymous> (C:\Users\sinax\Documents\Devs\ActuFrance\node_modules\discord.js\src\client\websocket\WebSocketManager.js:200:16)
at WebSocketShard.emit (node:events:513:28)
at WebSocketShard.checkReady (C:\Users\sinax\Documents\Devs\ActuFrance\node_modules\discord.js\src\client\websocket\WebSocketShard.js:181:12)
at WebSocketShard.gotGuild (C:\Users\sinax\Documents\Devs\ActuFrance\node_modules\discord.js\src\client\websocket\WebSocketShard.js:155:10)
at WebSocketManager.<anonymous> (C:\Users\sinax\Documents\Devs\ActuFrance\node_modules\discord.js\src\client\websocket\WebSocketManager.js:240:15)
Une erreur s'est produite lors de la création/mise à jour des commandes : TypeError: Cannot read properties of undefined (reading 'commands')
at updateCommand (C:\Users\sinax\Documents\Devs\ActuFrance\index.js:141:13)
at Client.<anonymous> (C:\Users\sinax\Documents\Devs\ActuFrance\index.js:32:15)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"

timid loom
# rancid vapor

Ça fait ptet longtemps que j'ai pas fait de bot mais ça me paraît bizarre ça pour récupérer un user ?

let user = bot.users.cache.get(interaction.channel.topic)

Sinon pour répondre à ta question le principe c'est qu'il faut que tu stocke une collection des utilisateurs ayant fait des commandes (avec par exemple comme id un identifiant de commande, et en valeur l'interaction qui a été créée) et tu fais en sorte de répondre à l'interaction (dont tu auras deferReply une réponse) au moment où on appuie sur le bouton.

timid loom
rocky oar
#

Yop ✌️
J'ai un petit soucis, qui je crois est lié à TS mais pas sûre.
Actuellement je dev une app web avec NextJS en utilisant Typescript, et l'app consiste à :

  • Upload une Image
  • Transformer l'image en plusieurs formats de Favicons etc ....

Mon soucis viens du Module "Sharp" que du coup je voulais utiliser pour la manipulation d'image.

Le code : ```ts
import sharp from 'sharp'

type Favicon = {
name: string
data: Buffer
}

const generateFavicons = async (image: Buffer): Promise<Favicon[]> => {
const sizes = [16, 32, 64, 128, 192, 256, 512]

const favicons = await Promise.all(
sizes.map(async (size) => {
const data = await sharp(image)
.resize(size, size)
.toBuffer()

  return {
    name: `favicon-${size}x${size}.png`,
    data,
  }
})

)

return favicons
}

export default generateFavicons

Erreur :
rocky oar
#

Il est installé :/

#

Première solution que j'ai essayé justement

#

Après peut être que la lib n'est pas compat avec TS et qu'il y en a une meilleure

#

@fleet scaffold Il me semble que toi tu fais de la manip' d'image avec Typescript ?

past nimbus
#

Tu t'en sers en front par hasard ?

rocky oar
#

Oui en front c'est pour ça ?

past nimbus
#

Oui ^^'

fleet scaffold
past nimbus
#

Tu peux pas child process en front

rocky oar
#

Je ne savais pas que ça poserait problème ><

past nimbus
#

Place le sur un endpoint ou bien utilise une lib browser friendly

#

J'espère juste que tu utilise pas Next comme API 😢

fleet scaffold
rocky oar
rocky oar
fleet scaffold
rocky oar
#

Yes

fleet scaffold
#

et savoir aussi de quel coté tourne ta page nextjs ?

#

tu utilise next dev/next start ou next build ?

rocky oar
#

Next Dev

fleet scaffold
#

okay, donc tu as accès aux API

rocky oar
#
import { generateFavicons } from '@/utils/faviconGenerator'

const ImageUploadForm = () => {
  const { file, url, error, setFile } = useImageStore()

  const handleFileChange = (event: ChangeEvent<HTMLInputElement>) => {
    if (event.target.files && event.target.files[0]) {
      setFile(event.target.files[0])
      if (error) {
        setFile(null);
      }
    }
  }

  const handleSubmit = async (event: React.FormEvent) => {
    event.preventDefault()
    const datas = await generateFavicons(file);
    console.log(file,url);
  }
```(s'il te faut tout le component dis le moi mais c'est ici que j'utilise mon utilitaire)
#

En store j'utilise Zustand

#
import create from 'zustand'

type ImageState = {
  file: File | null
  url: string | null
  error: string | null
  setFile: (file: File | null) => void
}

const acceptedImageExtensions = ['jpg', 'jpeg', 'png', 'bmp', 'svg']

export const useImageStore = create<ImageState>((set) => ({
  file: null,
  url: null,
  error: null,
  setFile: (file) => {
    if (file) {
      const extension = file.name.split('.').pop()?.toLowerCase()
      if (!extension || !acceptedImageExtensions.includes(extension)) {
        set({ error: `Seul les formats ${acceptedImageExtensions.join(",")} sont acceptés.` })
        return
      }
    }
    const url = file ? URL.createObjectURL(file) : null
    set({ file, url, error: null })
  },
}))
fleet scaffold
#

je te conseille joami, mais si zustand fait le taf reste dessus

rocky oar
#

J'aime bien Zustand car il est simple de prise en main (j'en ai entendu que du bien)

fleet scaffold
#
#

Fin bref revenons à ton problème

rocky oar
fleet scaffold
#

natif, fonctionnel efficace...

rocky oar
#

Euh ... Je sais pas si ça correspondrait à mon besoin

#

Enfin juste la génération de Favicon

#

Du coup concrêtement :

  • J'upload une image
  • Le site génère plusieurs images en différents format
  • Je download soit un .zip, soit les images séparément
fleet scaffold
#
#

sinon

#

tu peux utilisez sharp et passer par le système API

past nimbus
fleet scaffold
past nimbus
fleet scaffold
#

même en 2 ans ?

past nimbus
#

C'est pas leur objectif principal

rocky oar
# fleet scaffold tu peux utilisez sharp et passer par le système API

En soit c'est déjà en place, je ne l'ai juste pas encore testé : ```ts
import type { NextApiRequest, NextApiResponse } from 'next'
import archiver from 'archiver'
import generateFavicons from '../../utils/faviconGenerator'

const handler = async (req: NextApiRequest, res: NextApiResponse) => {
if (req.method === 'POST') {
try {
const imageBuffer = await new Promise<Buffer>((resolve, reject) => {
const chunks: Uint8Array[] = []
req.on('data', (chunk) => chunks.push(chunk))
req.on('end', () => resolve(Buffer.concat(chunks)))
req.on('error', reject)
})

  const favicons = await generateFavicons(imageBuffer)

  const archive = archiver('zip')
  archive.on('error', (err) => {
    throw err
  })
  res.setHeader('Content-Type', 'application/zip')
  res.setHeader('Content-Disposition', 'attachment; filename=favicons.zip')

  archive.pipe(res)

  favicons.forEach((favicon) => {
    archive.append(favicon.data, { name: favicon.name })
  })

  await archive.finalize()

} catch (error) {
  res.status(500).send({ error: 'Erreur lors de la création de la favicon' })
}

} else {
res.status(405).send({ error: 'Seules les requêtes POST sont acceptées' })
}
}

export default handler

past nimbus
#

Tu peux pas comparer les features de Nest qui est spécialisée là dedans avec Next, mais du coup Next c'est vraiment merdique pour le coup, la techno n'apporte rien en API

rocky oar
past nimbus
#
if (req.method === 'POST')

C'est une abhération en 2023 de devoir faire ça

rocky oar
#

J'ai C/C un ancien projet comme d'hab' et j'ai adapté

past nimbus
#

Express n'inclus pas de décorateur, mais en 7mins tu peux t'ajouter des @Controller @Post/Get/Delete/Put @Params/Body/Query

rocky oar
#

Je ne connais pas du tout 🤔
Habituellement j'utilise un CMS (Strapi) ou une CLI pour les API Rest

#

Mais le soucis c'est que je vais encore devoir payer un hébergement pour un petit projet perso x)

past nimbus
#

Bah tu peux mettre ton API sur le même host que ton front
Toute manière il te faudra un host node pour ton front si tu fais du SSR avec Next

rocky oar
#

Ah mais j'host mon front sur Vercel justement

#

Mais c'est pour du front pas du back ?

fleet scaffold
#

vercel fait work next en SSR

rocky oar
#

Car la dernière fois que j'ai tester de mettre strapi dessus, c'était pas fonctionnel car il n'y a pas de service de DB

fleet scaffold
#

mais en gros, t'es facturé à l'execution de fonction

rocky oar
#

Ouais donc je vais passer par du canvas, j'ai déjà 50€ tout les mois à payer, ça attendra que je finisse mon serveur maison x)

past nimbus
#

Après tu peux garder l'API sur Next pour ton projet perso
Mais sache juste que pour un projet pro ou avec des ambitions de diffusions, tu pourras pas te le permettre
Techniquement si c'est ton site perso osef

fleet scaffold
fleet scaffold
rocky oar
rocky oar
past nimbus
rocky oar
past nimbus
#

Nom De Domaine

rocky oar
#

Aaaaah

#

Euh bah je gère ma zone DNS et mon serveur via Cloudflare

fleet scaffold
#

si il à setup son ssh il à déja le ndd je pense

rocky oar
#

Oui

#

D'ailleurs ça fonctionne super bien, le seul hic c'est que je n'arrivais plus à me co via terminal, uniquement navigateur Zero Trust, j'ai du foirer un truc

past nimbus
#

Ce que je lui soumets comme idée c'est d'host son API sur un service gratuit, comme on en retrouve un peu partout

rocky oar
#

Et en général, les services d'host te propose toujours un enregistrement CNAME vers leurs DNS pour ton ndd

past nimbus
#

Sur les offres gratuites c'est plutôt rare j'ai l'impression, mais en tout cas t'as pleins de solutions free pour host ton API

rocky oar
#

Je sais qu'il y a Railway, un Heroku like, mais c'est 500h par mois et pas moyen de stopper l'app

#

Enfin l'app ce stop, mais la BDD non, du coup j'ai déjà flingué mes 500h avec mon projet d'examen xD

past nimbus
#

Pas chez des gros groupes

rocky oar
#

Après là j'ai fini ma formation du coup je pense que je vais me remettre sur la config de mon serveur maison comme ça je ne serais plus emmerdé

#

Il me reste juste à configurer correctement l'env Docker avec une UI pour gérer mes containers sans me prendre la tête avec des commandes, et c'est tout

past nimbus
#

Portainer est sympas, je te le conseille

rocky oar
#

J'avais un peu peur de docker, mais en réalité, c'est simple à comprendre

fleet scaffold
#

il faut setup un proxy sur ton client

fleet scaffold
past nimbus
#

C'est pas du docker aaPanel non ?

fleet scaffold
#

tout en fait

past nimbus
#

Okok, après normalement si tu fais les choses bien, tout est dans des dockers :p

rocky oar
#

Les BDD si j'en ai besoin seront interne aux containers

fleet scaffold
#

ça work aussi

rocky oar
# fleet scaffold ça work aussi

Après pour tout ce qui est DB, je m'en sors bien sous linux les configs etc ... c'est surtout pour docker que j'ai besoin d'une UI, j'ai trop peur de faire des conneries en commandLine

past nimbus
#

Chaque service, peu importe ce qu'il est tourne dans un container, (api, front, database, ddns...)

civic fractal
#

Bonjour tout le monde !
J'ai effectué ce code permettant de créer un Canvas quand quelqu'un rejoint. Je voudrais utiliser une typographie (Police d'écriture) personnalisé mais j'ai tout essayé je n'y parviens pas.
Quelqu'un pourrait m'éclairer sur ce sujet ? Merci d'avance !

Ceci est mon code actuel :

const Discord = require('discord.js')
const { Client, Message } = require('discord.js')
const config = require('../../config.js')
const Canvas = require('canvas')

module.exports = {
    name: 'guildMemberAdd',

    /**
     * @param { Client } Client
     * @param { Message } message
     */
    async execute(member, client) {

        if (member.guild.id !== config.APP.GUILD_ID) return;

        const canvas = Canvas.createCanvas(555, 255)
        const context = canvas.getContext('2d')

        const background = await Canvas.loadImage('././WelcomeToTesla.png')

        context.drawImage(background, 0, 0, canvas.width, canvas.height)
        context.strokeRect(0, 0, canvas.width, canvas.height)

        const avatar = await Canvas.loadImage(member.user.displayAvatarURL({ extension: 'png' }));
        context.drawImage(avatar, 166, 15, 235, 153)

        context.font = "25px Tesla"
        context.fillStyle = '#FFFFFF'
        context.textAlign = "center";
        context.fillText(member.displayName, 285, 205)

        const attachment = new Discord.AttachmentBuilder(canvas.toBuffer('image/png'), { name: 'welcome.png' });
        client.channels.cache.get('1128331245504450630').send({ files: [attachment] }); //! CHANNEL ID
    }
}
civic fractal
drowsy ocean
civic fractal
#

v14

drowsy ocean
#

Change la taille de la police en plus petit et essaye

#

Il y a une chance pour que ta box Text sois trop petite pour afficher le texte

civic fractal
#

Toujours pas :/

signal night
#

Bonjour j'avais une petite question j'ai fait un bot music sauf que quand je mais une musique tout va bien et après 30sec la musique s'arrête toute seul vous avez des réponse pour ce problème ?

signal night
glass cargo
#

c'est ça que je veux dire

#

tu nous balance ton problème et on a pas plus d'infos

signal night
#

Oh ok

signal night
glass cargo
signal night
#

yep

glass cargo
#

quelle version de discord-player/discord.js ?

signal night
#

6.6.1

glass cargo
#

J'ai aussi eu des problèmes avec la v6 la dernière fois que j'ai utilisé discord-player 👀

#

Dcp, je sais pas quoi te conseiller x)

signal night
#

Ah bah pg je vais essayer autre chose

fleet scaffold
#

bah voilà le problème

#

t'utilise un module avec discord dans le nom mdr

signal night
fleet scaffold
#

Bah, ça a pas mal avoir.

#

C'est pas du tout optimisé, et ça bug forcément les implémentation sont mal fichu

#

si tu veux un truc scalable et qui tiens la route , utilise play-dl

signal night
fleet scaffold
#

Le mieux c'est de prendre un module qui ne dépend que de lui même, ou du minimum de module

signal night
#

Ok ça marche

cyan iron
#

Yo les gars, j'ai besoin de votre avis, pour vous c'est quoi la meilleure façon de faire un système de rate limit sur une API ?

drowsy ocean
cyan iron
#

Ah ouais pas mal ça

floral bolt
#

Sur nest ça te permet de définir un nombre d’appel par adresse ip

cyan iron
#

Ok merci je regarderais

#

Nest j'ai jamais regardé ça sert à quoi en fait

floral bolt
#

C’est pour faire du back, mais c’est une vrai galère … regarde adonisjs c’est vraiment pas mal si tu veux faire un bon back sans trop te prendre la tête

limber escarp
#

Perso pour gérer le rate limite, je fais un compteur par token (si API privée) ou bien par adresse IP (si API ouverte).

#

Après tout dépend de comment tu veux gérer le compteur, si c'est un rate limit /heure, /jour, /call (ou les trois) etc...

floral bolt
#

Du coup c'est du throttler

#
      ttl: 60,
      limit: 10,
    }),```

Genre ttl c'est la durée entre chaque reset et la limit je pense qu'il n'y a pas besoin de dessin
cyan iron
cyan iron
limber escarp
drowsy ocean
limber escarp
# drowsy ocean Non en cache

Tout dépend de ce que tu entends par cache (fichier/mémoire) et des conditions du rate limit, mais si tu as beaucoup d'appels via différents token/api, il vaut mieux le stocké en DB.

cyan iron
#

J'avais pas vu ton message 👀
En db ça me paraît très lourd, je pensais plutôt utiliser redis OU directement le stocker in memory donc dans un objet clé valeur tout simplement
Mais je ne sais pas si cette dernière solution est très bonne

drowsy ocean
#

Wailrone normalement pour le bon fonctionnement de ton api tu met un cache, il faut stocker ça dedans

limber escarp
drowsy ocean
cyan iron
limber escarp
#

Après c'est sûre que si tu fais des jointures avec des LEFT JOIN dans tous les sens, ton serveur va planté. Faut faire des requêtes optim.

cyan iron
#

D'habitude j'utilise redis, mais si je peux éviter ça m'arrange

drowsy ocean
cyan iron
limber escarp
drowsy ocean
limber escarp
#

J'ai un projet d'open-data avec des tables contenant plusieurs M d'enregistrements, nous n'avons pas encore basculer sur un système de clustering, mais ça tiens la charge 😉

drowsy ocean
limber escarp
#

Après tout dépend de ton applicatif, il faut voir si tu as beaucoup de requêtes d'écritures en parallèle de tes SELECT.

limber escarp
drowsy ocean
limber escarp
#

Stocker en mémoire je suis moins fan, en cas de plantage complet de ton infra, il va plus savoir ou il en est. Cela dit, il me semble que Redis fait toutefois des écritures disque pour conserver les infos donc cela revient au même (pour la reprise de données en cas de plantage). Par contre je connais pas du tout ElastiCache d'AWS

cyan iron
#

S'ils font de la m*rde à nouveau ils sont ban

#

Et puis bon un plantage complet ça arrive pas non plus tous les jours, 'fin j'espère pour toi

#

J'utilise fastify

#

Au passage

#

Je l'ai pas dit

hybrid berry
limber escarp
cyan iron
#

Non c'est pas le cas

drowsy ocean
#

Un seul serveur mysql tiens 50k req/s

hybrid berry
#

50k je comprend bien mais bon

#

pour un système de rate limiting en db j'aurai utilisé rédis perso

drowsy ocean
#

Oui redis c'est ce que je dis depuis le début

limber escarp
#

En vrai les deux solutions sont valables, reste plus qu'à faire un choix en fonction de ton appli 🙂

cyan iron
# hybrid berry pour un système de rate limiting en db j'aurai utilisé rédis perso

Same, c'est ce que je fais depuis toujours. Mais bon voilà c'est pour un projet d'études et ça compliquerais trop l'installation pour le client, surtout que si j'utilise redis c'est juste pour ça. Et je n'ai qu'un seul back, donc dans tous les cas si je stocke en mémoire direct ça me parait pas déconnant, en plus tous les différents codes / modules que j'ai pu trouver font ça aussi

drowsy ocean
limber escarp
#

Et de si tu as besoin d'avoir des stats particulières sur les requêtes API éffectués etc...

fleet scaffold
#

personne ici n'as réellement les moyens d'utiliser AWS

#

si vous utilisez AWS c'est juste un coup à vous ruiner à votre échelle

hybrid berry
#

pas vraiment, si tu gères plutôt bien ton scaling tu peux bien t'en sortir

#

après c'est pas non plus fait pour run des instances 24h/24

drowsy ocean
hybrid berry
#

sinon tu prends un serveur dédiée

fleet scaffold
hybrid berry
fleet scaffold
#

a aucun moment c'est une bonne idée

hybrid berry
#

ils ont des instances pas très chères qui font bien le taff

drowsy ocean
#

Tu peux avoir AWS gratuit pendant un an avec largement assez de fonctionnalitées pour un petit projet

hybrid berry
#

ça ce voit que tu as utilisé AWS @fleet scaffold kapp

limber escarp
fleet scaffold
#

oui j'ai utilisé gcp et Azure aussi

drowsy ocean
hybrid berry
fleet scaffold
#

et c'est pas des solutions adapté au particulier

#

les services Pay as you Go c'est pas pour nous

hybrid berry
#

après en soit ça dépend combiend de temps dure

cyan iron
hybrid berry
#

même pour un particulier

fleet scaffold
#

c'est trop cher pour un particulier 🤷‍♂️

limber escarp
drowsy ocean
#

Bref @cyan iron, en bonne pratique, on cache les données très souvent consulté et qui n'interfère pas avec d'autres services comme les rate limit etc.. En particulier si par la suite tu développe horizontalement ton infrastructure.

hybrid berry
#

ou que j'ai fait tourné des instances EC2 pour des bots et que ça m'a couté quelques centimes

fleet scaffold
#

Impossible

hybrid berry
#

après en vrai pour EC2 j'avais le free tier

cyan iron
#

Et sinon oui je suis d'accord avec toi, c'est ce que je fais déjà

drowsy ocean
cyan iron
#

Ok je vois

drowsy ocean
#

En gros si tu clusterise

fleet scaffold
#

mais

#

Vous avez combien de clients pour parler de clusters ?

drowsy ocean
#

Le truc c'est que là c'est bien tu stock ça en mémoire interne de ton app mais le jour ou tu a plusieurs serveurs tu sera confronté a des pb

fleet scaffold
#

merci wailrone

hybrid berry
#

vraiment > redis

cyan iron
#

En tout cas ça ne sera pas mon job

drowsy ocean
#

D'accord après je te dis ça dans un cas général pour des projets commun

cyan iron
#

Et même si c'est un jour le cas, je peux toujours configurer très facilement le module si j'utilise celui-là, j'ai juste à le mettre en mode redis et voilà

#

D'ailleurs leur doc le dit

#

D'autant plus que c'est une Api "privée", donc il faudra créer un compte sur la plateforme pour pouvoir utiliser l'api

drowsy ocean
#

D'accord comme tu le souhaite

cyan iron
#

Bon merci pour les points de vues de tout le monde, je prend note 👀

drowsy ocean
#

Ta question initiale était quelle est la meilleur façon de faire un système de rate limit, redis est la solution mais après tu fait comme tu le sent

cyan iron
drowsy ocean
cyan iron
#

Thanks 😄

fleet scaffold
limber escarp
#

Pour cette APP, elle est assez requiert beaucoup de ressource car beaucoup de traitement IA/Machine Learning on est sur du 20k clients

fleet scaffold
#

pour 20k client ça me semble raisonnable

limber escarp
#

Oui, c'est surtout parce qu'il y a beaucoup de traitement côté serveur ^^

fleet scaffold
#

Je trouve que ça fait beaucoup malgré tout, mais comme tu m'as dit qu'il y avait du ML

#

Je suis pas sûr que t'as vraiment de L'IA dans ton projet

limber escarp
#

Et encore il n'y a pas tout lol

#

l'infra comporte une 100ene de VM en totalité

fleet scaffold
#

Oui, fin t'es dans une société non ?

limber escarp
#

Oui oui ^^

#

Impossible de gérer ça solo

fleet scaffold
#

c'est pas un petit site, ou un bot discord

limber escarp
#

en effet lol, il y a plusieurs M€ de CA derrière tout ça lol

fleet scaffold
#

Oui, bah tu vois ça justifie l'utilisation de clusters ect dans l'infra

#

Mais pour un petit site qui débute à peine... Bref, setup une giga infra à perte ça vaut pas le coup

#

Toi pour ton infra, tu prévoit : Le CLUSTER ET la secu, soit le double de machine nécessaires

#

Pour faire des backup, reprendre la relève... ect

#

dans le cas d'un gros projet c'est des sécurité importante.

#

Dans un petit projet, toute ces sécurité bofb

#

Tu prend un google drive au quel t'envoie les backup, ça fait le taf (C'est ce que je fais perso)

limber escarp
#

Je suis d'accord ^^ C'est pour ça qu'à ce stade, Redis ou SQL, je pense pas qu'il y est une différences significative, mais faut réfléchir sur le long terme et prévoir dès le départ la meilleure solution ^^

fleet scaffold
#

Je pense pas que reflechir sur le long terme dès le début soit une bonne idée

#

fin

limber escarp
#

Oui on double tout, un node plante, ça prend la relève etc... Obliger afin d'avoir de la haute dispo sans interruption ^^

fleet scaffold
#

tu peux y réfléchir

#

Mais pas le mettre en place au lancement

limber escarp
#

et on fait des backups tt les soirs 😖

wicked wind
#

Bonjour, Je fais actuellement un moniteur d'activité, je cherche à faire un système de license pour que je puisse monétiser l'application ou la resteindre à un certains nombres d'utilisateurs, je ne sais pas comment m'y prendre, il me faut faire un système d'utilisateur, un système qui créez automatiquement une license ou des licenses pré-générés directement dans un serveur JSON avec JWT ? Il y a très peu de choses sur Internet sur cela donc si vous trouvez une solution pas trop compliqué et sécurisée je suis preneur, Merci !

limber escarp
drowsy ocean
wicked wind
#

J'ai déjà réussi à le faire mais c'est pas sécurisée et sa ne se génére pas automatiquement

drowsy ocean
#

Personellement je fais un UUID4 que je hash par la suite

fleet scaffold
#

?

wicked wind
fleet scaffold
#

tu compte distribuer ton code de quelle façon ?

limber escarp
wicked wind
fleet scaffold
drowsy ocean
fleet scaffold
#

il a donc utiliser la carte piège Électron...

wicked wind
fleet scaffold
#

Tu donne ton code en source ouverte ici 🤷‍♂️

wicked wind
fleet scaffold
#

je trouve que Électron est un choix risqué en terme de sécurité pour ton programme

drowsy ocean
#

Et concernant la vérification, tu check bien coté serveur avec un vérification en db

fleet scaffold
#

Tu vois à quel point c'est "sécurisé" 👀 ?

#

et bien ça utilise Électron derrière

limber escarp
# wicked wind Netlify par le biais d'un site car c'est sur Electron

Comme à dit Ori, tu fais en sorte de générer un hash unique (peut importe la longueur), ensuite pour la validation de ta clé tu le fais sur un serveur que tu héberges. En revanche, comme le dit garder, Electron, tu peux faire du reverse engeneering et donc consulter le code source... Il faut donc un système béton pour mémoriser l'info sur le PC client comme quoi il a bien une licence active (ou tu check la licence à chaque démarrage de l'app)...

drowsy ocean
#

Mais de tout facon son system de token n'est pas client

limber escarp
#

Mais faut que tu trouve une solution pour obfusquer le code (cas idéal)

fleet scaffold
wicked wind
wicked wind
wicked wind
# drowsy ocean Oui

Ah ok merci, mais ducoup j'utilise du Electron de base et je ne sais pas quel techno utilisé pour que mon système soit assez utilisé pour faire ceci

fleet scaffold
#

moi ce que je te recommanderais.

c'est ces 3 étapes :

  1. Minification du code
  2. obfuscation du code
  3. Compilation du code avec "PKG" (Outil développer par vercel pour avoir un exécutable qui utilise nodejs)
limber escarp
# wicked wind Ok c'est possible avec par exemple LocalStorage ou un système de sessions sécuri...

Oui tu peux stocké dans le localStorage la clé par exemple (après je ne suis pas spécialisé sur electron, je ne sais pas si le localStorage est automatiquement vider au bout d'un certain temps). Mais avec Electron, si tu décompile les sources, tu peux modifier le code source et tu peux très bien par la suite virer le bout de code qui permet de faire la vérification de la licence puis ensuite tu recompile ^^

limber escarp
drowsy ocean
#

Après là on est plus sur la sécuritée software en général

wicked wind
#

Ah mrd, avec Tauri c'est aussi faisable ?

fleet scaffold
#

comment ça avec Tauri c'est aussi faisable ?

wicked wind
#

Car j'avais vu Tauri mais je ne sais pas si c'est aussi sécurisée qu'Electron

wicked wind
fleet scaffold
#

Bah c'est sécurisé oui, car c'est directement compiler en code machine

#

c'est bien plus complexe de decompiler du code machine

limber escarp
fleet scaffold
#

AU MIEUX le mec aura de l'assembleur

#

mais tout ce que tu as fait côté nodejs avec Électron, je te recommanderais de l'écrire en Rust pour le coup 👀 (Si tu part sur Tauri)

wicked wind
fleet scaffold
#

car forcément ce qui utilise nodejs sur Tauri, ne sera pas forcément compilé en code machine, et tu aura le même problème qu'avec électron

limber escarp
#

En vrai, tu as beau faire ce que tu veux, tu pourras toujours trouver le moyen de cracké ton logiciel, il y a bien des gars qui crack des logiciels comme Adobe, Windows etc... Le but c'est surtout de décourager les personnes de cracké ton app ^^ Tu n'auras jamais de solution safe à 100%

#

Ou sinon , tu fais du SaaS directement 😄

wicked wind
fleet scaffold
limber escarp
wicked wind
limber escarp
#

Et non, c'est l'inconvénient...

wicked wind
#

Après je pense qu'avec des APIS Sécurisées sa reste entièrement faisable, mon app sera pas forcément celle qui aura besoin d'énormément de sécurité

modest condor
#

apres moi je te dirai.. est ce que tu as un réel besoin de secure ton app à ce point?
est-ce que tu penses vraiment que des gens vont sauter tes sécu de manière incontrolé (parce-que ça arrivera forcement un jour) ?
parce-que tu risques de te faire chier pour rien ^^

#

c'est sur oui en codant ton app en natif ça peut gener plus (et encore ça dépend en vrai comment tu fais ç) mais si un mec veut vraiment péter le truc il va le faire
le plus important ouais c'est juste de couvrir la grosse partie des brèches de sécu simples

autumn vector
#

@fleet scaffold donc tu peut m aider ?

fleet scaffold
#

ouais, mais renvoie le code dans les brakcet

#

```js
ton code ici
```

autumn vector
#
const { Client, GatewayIntentBits, MessageEmbed, MessageActionRow, MessageButton, MessageSelectMenu } = require('discord.js');
const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');

const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent,
        GatewayIntentBits.GuildMembers,
    ],
});

const commands = [{
    name: 'set-ticket',
    description: 'Commande pour gérer les tickets',
    options: [{
        name: 'envoyer-menu',
        description: 'Envoyer le menu des tickets',
        type: 1
    }]
}];

const rest = new REST({ version: '9' }).setToken('');

(async() => {
    try {
        console.log('Started refreshing application (/) commands.');

        await rest.put(
            Routes.applicationGuildCommands('1119605151594987580', '994879292964093962'), { body: commands }
        );

        console.log('Successfully reloaded application (/) commands.');
    } catch (error) {
        console.error(error);
    }
})();

client.on('ready', () => {
    console.log('Le bot est prêt !');
});

client.on('interactionCreate', async(interaction) => {
    if (!interaction.isCommand()) return;

    if (interaction.commandName === 'set-ticket') {
        if (!interaction.member.permissions.has('ADMINISTRATOR')) {
            return interaction.reply({ content: "Désolé, vous n'avez pas les permissions nécessaires pour utiliser cette commande." });
        }

        if (interaction.options.getSubcommand() === 'envoyer-menu') {
            const embed = new MessageEmbed()
                .setTitle('Menu des tickets')
                .setDescription('Cliquez sur le bouton ci-dessous pour afficher le menu des tickets.')
                .setColor('#0099ff');

            const button = new MessageButton()
                .setCustomId('ticket-menu-button')
                .setLabel('Afficher le menu')
                .setStyle('PRIMARY');

            await interaction.reply({ content: "Voici l'embed :", embeds: [embed], components: [new MessageActionRow().addComponents(button)] });
        }
    } else if (interaction.isButton() && interaction.customId === 'ticket-menu-button') {
        const selectMenu = new MessageActionRow()
            .addComponents(
                new MessageSelectMenu()
                .setCustomId('ticket-options')
                .setPlaceholder('Sélectionnez une option')
                .addOptions([{
                        label: 'Option 1',
                        value: 'option1',
                    },
                    {
                        label: 'Option 2',
                        value: 'option2',
                    },
                    {
                        label: 'Option 3',
                        value: 'option3',
                    },
                ])
            );

        await interaction.update({ content: "Voici le menu de sélection :", components: [selectMenu] });
    }
});


client.login('');
fleet scaffold
#

et ton problème ?

#

c'est quoi

autumn vector
#

quand je rentre la commande sa marche pas et sa me marque sa

fleet scaffold
#

l'erreur st simple

#

c'est pas un constructor

#

car il n'existe plus

#

honnétement ?

#

t'as juste copié/collé le code

#

?

autumn vector
#

oui

fleet scaffold
#

ça explique tout

fleet scaffold
#

tiens c'est cadeau

#

ça t'aidera à mieux comprendre

rocky oar
#

Yop ✌️
Dites je rencontre un petit soucis, je bosse sur la homepage d'un petit projet, et j'aurais aimé un effet stylé sur le Header, du coup j'utilise "TypeItJS", et je n'arrive pas à recommancer toute la séquence de Zéro une fois terminée, je ne sais pas si quelqu'un aurais la solution ?

Documentation de l'outil : https://www.typeitjs.com/docs/vanilla/instance-methods/#type
Code : ```ts
import Head from 'next/head'
import TypeIt from 'typeit-react'

export default function Home() {
return (
<div>
<Head>
<title>Creatools</title>
<meta name="description" content="Application d'outils en ligne pour vos créations !" />
</Head>
<div className="lg:container mx-auto">
<div>
<TypeIt element={"h1"}
getBeforeInit={(instance) => {
instance
.options({speed: 50, lifeLike: false})
.type("Besoin de Favicons ?")
.pause(500)
.move(-2, {instant: true})
.delete(8)
.type("Outil 2")
.pause(500)
.delete(7)
.type("Outil 3")
.flush(() => instance.reset().go());
return instance;
}}/>
</div>
</div>
</div>
)
}

thin scroll
fleet scaffold
rocky oar
rocky oar
fleet scaffold
#

bah

rocky oar
#

Typiquement j'ai tenté le : ```js
const HeaderTypeIt = () => {

const [rerender, setRerender] = useState(false);
return(
    <TypeIt element={"h1"} 
        getBeforeInit={(instance) => {
            instance
            .options({speed: 50, lifeLike: false})
            .type("Besoin de Favicons ?")
            .pause(500)
            .move(-2, {instant: true})
            .delete(8)
            .type("Outil 2")
            .pause(500)
            .delete(7)
            .type("Outil 3")
            .flush(() => setRerender(!rerender));
        return instance;
    }}/>
)

}

fleet scaffold
#

{value && component)

rocky oar
#

Mon composant : ```tsx
import TypeIt from 'typeit-react'
import { useTypeItStore } from '@/store/typeItStore';

const HeaderTypeIt = () => {
const { setStatus } = useTypeItStore();
const handleCompleteTypeIt = () => {
setStatus(true);
};
return(
<div>
<TypeIt element={"h1"}
getBeforeInit={(instance) => {
instance
.options({speed: 50, lifeLike: false})
.type("Besoin de Favicons ?")
.pause(500)
.move(-2, {instant: true})
.delete(8)
.type("Outil 2")
.pause(500)
.delete(7)
.type("Outil 3")
.pause(500)
.flush(() => {
handleCompleteTypeIt();
});
return instance;
}}/>
</div>
)
}

export default HeaderTypeIt;

Mon Store : ```tsx
import { create } from 'zustand'

type TypeItState = {
  complete: boolean,
  setStatus: (status :boolean) => void
}


export const useTypeItStore = create<TypeItState>((set) => ({
  complete : false,
  setStatus: (status) => {
    set({complete: status})
  },
}))

Ma page : ```tsx
import Head from 'next/head'
import HeaderTypeIt from '@/components/headerTypeIt/HeaderTypeIt'
import { useTypeItStore } from '@/store/typeItStore';

export default function Home() {
const { complete, setStatus} = useTypeItStore();
complete ? setStatus(false) : null;
return (
<div>
<Head>
<title>Creatools</title>
<meta name="description" content="Application d'outils en ligne pour vos créations !" />
</Head>
<div className="lg:container mx-auto">
<div>
{ !complete ? <HeaderTypeIt /> : null }
</div>
</div>
</div>
)
}

#

Je ne sais pas si j'ai fais sa proprement ou si j'ai fais une connerie quelque part mais sa me semble correcte

rocky oar
#

Oui biensûr

fleet scaffold
#

bah je te recommanderais de faire { !complete && <HeaderTypeIt> }

#

ça t'évitera la condition terciaire inutile ^^

rocky oar
#

Exacte 😄

floral bolt
#

Après si ça marche garde ce 🙂

rocky oar
#

Car en soit elle fonctionne, j'avais surtout du mal à faire Reset l'animation mais maintenant sa fonctionne correctement

floral bolt
#

Alors utilise ta lib 🙂

#

C’est juste que mois je suis friand de presque pas utiliser de lib 😉

rocky oar
#

Parce que bon, je me fais un petit projet pour reprendre React Tranquillement, mais je n'avais pas fais de Homepage KappaCringe

slim anvil
#

mais pourquoi tu fais un store pour ça

#

garder a raison tu return juste a ton parent quand l’animation est fini puis tu re render ton composant

#

mais du coup même pas besoin de return au parent tu le fais dans le composant direct

rocky oar
slim anvil
#

mais j’y crois 0 que le reset fonctionne pas dans la lib, je pense que t’as fucked up un truc pour sûr

#

et aussi Snox a raison tu ferais mieux de le faire à la main si tu veux vraiment t’entraîner en code, ce genre de petit truc c’est de l’entraînement

#

pour des gros projets ok je comprend flemme de focus la dessus mais la si c’est pour t’entraîner a ta place je le ferai

rocky oar
#

Concernant la lib, j'ai bien suivis la doc, mais sa n'a pas fonctionné comme prévu, le reset ce faisait, mais le .go() ne relance pas l'animation x)

Et pour l'utilisation de la lib, je vois approximativement comment faire en code, juste, en dehors de potentiel contraintes liés à un projet réel, je suis toujours partis du principe de ne pas réinventer la roue 😄

slim anvil
#

non mais réinventer la roue ok, mais la tu es en training, du coup le but c’est quand même d’apprendre à faire les choses, juste pour voir si t’en serais capable, de potentiellement rencontré des erreurs inattendu

#

c’est ça du training dev :p

rocky oar
slim anvil
#

c’est sur quoi

#

React ? non parce que spoil c’est du js kappa

rocky oar
#

React principalement avec l'utilisation de Zustand et Tailwind

slim anvil
#

les animations en react que tu vas créer seront différentes justement

rocky oar
#

Ce que j'ai voulu dire c'est sur la base de JS xD

slim anvil
#

ça va pas être là même logique qu’en vanilla

rocky oar
#

Ah ?

slim anvil
#

la base oui mais le container sera quand même différent

#

par exemple sur des animations de dom bah en react tu vas utiliser des refs tu vas pas faire du document.getElement blabla

#

c’est un petit exemple parmi d’autres

rocky oar
#

Ah mais sa je le sais xD

#

La manipulation de DOM en vanilla je ne le fais plus depuis longtemps

slim anvil
#

j’en doute pas je dis juste que c’est ça qui est cool pour pratiquer, utiliser des libs c’est facile, le mieux c’est quand même de savoir « ah ok c’est comme ça que ça fonctionne » ça aide à comprendre et à mieux utiliser la lib 200iq

rocky oar
#

Après juste pour savoir si j'avais la bonne logique en tête, à la main j'aurais fais un tableau de strings, puis j'aurais ittéré dessus, coupé les strings en tableau de charactères, pour les afficher 1 par 1 etc ...

#

Une fois a la dernière string, je retourne au début de la boucle, ce qui m'aurait évité de refresh le component

slim anvil
#

et pour ton soucis c’est parce que, au vu de la doc, la méthode reset est non-chainable

#

j’ai vu autre chose aussi tu as une méthode .is()

#

tu peux faire un useEffect sur ton instance, check si instance.is(« completed ») et reset a ce moment là 👌

#

plus propre que de re-render le component

rocky oar
#

Je vais ré-essayer, car j'avais essayé le reset().go() dans le is, mais je n'ai pas eu le résultat voulu, après là j'utilise la méthode Flush à la fin de l'animation

slim anvil
#

anyway dans tous les cas t’avais pas placé ton reset ou il faut je crois, à vérifier

rocky oar
#

Bon déjà j'ai jarté le store et utilisé useState, c'est + adapté x)

slim anvil
#

ça veut pas dire qu’il faut chain go() au reset

#

mais que lui sera appelle directement après le go

rocky oar
#

c'est pour sa que je faisais instance.reset().go();

slim anvil
#

c’est pas ce que j’ai vu 🤔 essaye sans

#

mais en dehors de l’unît

#

init*

#

mais sinon via le useeffect c’est good aussi

rocky oar
#

Le soucis c'est que avec la facon que j'ai de créer mon instance, j'ai du mal à visualiser la chose, car je la créé directement dans le return de mon composant : ```js
<div>
{ !complete && <TypeIt className='text-4xl font-bold text-violet-700'
getBeforeInit={(instance) => {
instance
.options({speed: 80, lifeLike: false})
.type("Favicons ?")
.pause(500)
.move(-2, {instant: true})
.delete(8)
.type("Outil 2")
.pause(500)
.delete(7)
.type("Outil 3")
.pause(500)
.move(2 , {instant: true})
.delete(9)
.flush(() => {
handleCompleteTypeIt();
});
return instance;
}}/> }
</div>

#

Après c'est si mal que sa de re-render le composant ? 😅

pallid plume
#

Déjà pourquoi tu fais pas une fonction parce que dans ton template v'la le bordel que ça soit être ?

slim anvil
#

setState juste dans ton init

#

puis tu y auras accès ensuite dans tout ton composant

slim anvil
pallid plume
#

fin ça reste à mon avis plus propre et ça coute surtout rien d'en faire une fonction ?

rocky oar
#

Oui c'est juste un composant xD
(avant que je modifie)

const HeaderTypeIt = () => {
    
    const [complete, setComplete] = useState(false);
    
    const handleCompleteTypeIt = () => {
        setComplete(true);
    };
    complete ? setTimeout(()=>{setComplete(false)},100) : null;

    return(
        <div>
            { !complete && <TypeIt className='text-4xl font-bold text-violet-700' 
                getBeforeInit={(instance) => {
                    instance
                    .options({speed: 80, lifeLike: false})
                    .type("Favicons ?")
                    .pause(500)
                    .move(-2, {instant: true})
                    .delete(8)
                    .type("Outil 2")
                    .pause(500)
                    .delete(7)
                    .type("Outil 3")
                    .pause(500)
                    .move(2 , {instant: true})
                    .delete(9)
                    .flush(() => {
                        handleCompleteTypeIt();
                    });
                return instance;
            }}/>  }
        </div>
    )
}

export default HeaderTypeIt;
pallid plume
#

Ok j'ai rien dis

rocky oar
#

Justement je l'ai fais en composant pour éviter le bordel dont tu parle dans ma page Home

slim anvil
#

c'est un composant d'une lib qu'il utilise

pallid plume
#

Il appelle bien une fonction de genre 15 ligne qu'il return à la fin ?

slim anvil
#

c'est les options de son component

pallid plume
#

Bah j'ai bien compris mais ducoup ça change pas le fais qu'en faire une fonction ça fais la même chose

slim anvil
#

il va créer un fichier juste pour mettre ça ?

#

bah si ca fait la meme chose c'est quoi l'utilité de l'externaliser

pallid plume
#

en mode il peut pas créer une fonction au dessus ? ( genre c'est pas plus propre )

slim anvil
#

sachant que tu t'en serviras nul part ailleurs car c'est linké a ce composant

rocky oar
#

Ah mais je sais pourquoi il parle de fonction, mais non c'est pas prèvu pour être utilisé ailleur sur le site

slim anvil
#
const HeaderTypeIt = () => {
  const [instance, setInstance] = useState(null);
  
  useEffect(() => {
    if (instance && instance.is('completed')) {
      instance.reset()
    }
  }, [instance])

  return(
      <div>
          <TypeIt className='text-4xl font-bold text-violet-700' 
              getBeforeInit={(instance) => {
                  setInstance(instance);
                  instance
                  .options({speed: 80, lifeLike: false})
                  .type("Favicons ?")
                  .pause(500)
                  .move(-2, {instant: true})
                  .delete(8)
                  .type("Outil 2")
                  .pause(500)
                  .delete(7)
                  .type("Outil 3")
                  .pause(500)
                  .move(2 , {instant: true})
                  .delete(9)
              return instance;
          }}/>
      </div>
  )
}

export default HeaderTypeIt;
#

essaye comme ça peut-être ca fonctionne

#

je peux pas tester j'ai pas de projet avec la lib

#

je crois que c'est 'completed' a vérifié

rocky oar
#

Je viens d'essayer, et le reset() n'est pas du tout pris en compte

slim anvil
#

mais enfaite pourquoi tu utilises pas juste options={{ loop: true }} en props

#

enfaite le reset c'est pas un restart

rocky oar
#

Attend il y avait une option loop ????

slim anvil
#

faut lire la doc

#

j'étais sur téléphone, mais le reset !== restart donc depuis tout à l'heure ca n'aurait rien changé

rocky oar
#

Attend depuis tout à l'heure je cliquais sur "Options" au lieu de "Usage" pour voir les options donc je ne l'ai pas vue cette page xD

slim anvil
#

t'as meme pas besoin de ton init, tu peux juste lui passer tes options

#

bon dieu

#

faut t'entrainer à la lecture la prochaine fois

#

1st step kappacap

rocky oar
#

Excuse moi c'est juste que je ne cherchais pas au bon endroit x)

#

Mais dans la nav quand je cliquais sur "Options" sa me ramenais ici :

#

Je n'avais pas la liste entière

slim anvil
#

c'est pas grave

#

je te note juste dans mon death note

#

^_^

rocky oar
#

xDDD

#

Pour ma défense depuis tout à l'heure je fais sa pour voir les options :

#

D'où le fait que j'étais dans le flou total

leaden prism
#

hey est ce que vous auriez une typo stylé a mettre sur un site?

drowsy ocean
slim anvil
leaden prism
#

ok merci

#

a oe mais elle est payante

drowsy ocean
leaden prism
#

a oe?

empty mauve
#

hey j'ais besoin d'aide

mon bot ne répond pas a mes commande il a le badge, mais il ne repond pas , pas de méssage d'éreur rien

quel fichier serais responssable de cela et veuiller me l'indique svp

frosty sand
#

Tu peut screen stp

empty mauve
#

Screen quoi ?

drowsy ocean
# empty mauve Screen quoi ?

Salut, enfaite par là il veut dire que tu demande de l'aide mais tu ne donne même pas tes fichiers source donc impossible pour nous de te dire ce qui ne va pas.

torn fog
cyan iron
#

Y'en a qui le font donc je préfère préciser

near saddle
cyan iron
#

Ah my bad j'avais oublié, c'est vrai Kappa

keen narwhal
#

Quelqu'un peut m'aider s'il vous plaît j'aimerais faire un bot auth2 ou quand les utilisateurs autorisent le bot à accéder à leur compte ça les redirige vers une page ou leur token acces est dans dans page web puis que sa recupère le code et que sa le stocks dans une base de donner et redirige l'utilisateur vert un page pour keur dire que la vérification est terminerj'ai déjà mis ce système en place mais le problème c'est que mon pote était sur repli avant et que tu replie tout automatique et maintenant mon bot est sur un hébergeur qui n'autorise pas la modification de leurs URL et mon site web est sur Netlifi mais ne pas envoyer de requête à l'API car justement mon hébergeur de mon pote qui est aussi mon hébergeur de mon API n'autorise pas la modification de leur URL quelqu'un aurait une autre solution car cela fait une semaine que je suis sur ce projet je n'arrive toujours pas à réparer ce problème cordialement merci de me ping si vous avez une solution

drowsy ocean
#

Du calme Eminem

fleet scaffold
keen narwhal
#

Je cherche un dev en js de toute urgent pour demain pour m’aider sur un code que j’arrive pas merci de me svp c’est pour un projet je suis sur une erreur depuis hier

drowsy ocean
torn fog
#

J'avoue

neat raft
#

const Discord = require("discord.js");
const Gamedig = require("gamedig");

module.exports = {
  name: "status",
  description: "Permet d'envoyer les status du serveur.",

  async run(bot, message) {
    const ip = "Statut_Du_Serveur";
    const port = "Port_Du_Serveur";

    const embed = new Discord.MessageEmbed()
      .setColor("#272424")
      .setTitle(`[FR] Naria Roleplay | Exclusivité | Semi - Serious | soon`)
      .setDescription(`**steam://connect/142.124.214.543.321**`)
      .setTimestamp()
      .addFields(
        {
          name: "Map du Serveur 🗺️",
          value: "EvoCity V4B1",
          inline: true,
        }
      )
      .addFields(
        {
          name: "Adresse IP 📡",
          value: "",
          inline: true,
        }
      );

      message.channel.send({ embeds: [embed] });

    setInterval(() => {
      Gamedig.query({
        type: 'garrysmod',
        host: "",
        port: "27015",
      }).then((state) => {
        embed.spliceFields(2, 1, {
          name: `Joueurs connectés :busts_in_silhouette:`,
          value: `${state.players.length}/${state.maxplayers}`,
          inline: true,
        });

        sentMessage.edit({ embeds: [embed] });
      }).catch((error) => {
        const Embed = new Discord.MessageEmbed()
          .setColor("#272424")
          .setTitle(`Voici le statut du Serveur de Naria Roleplay !`)
          .setTimestamp()
          .addFields(
            {
              name: `:bar_chart: Statut du Serveur`,
              value: `🔴 Hors Ligne`,
              inline: true,
            }
          );

        message.channel.send({ embeds: [Embed] });
      });
    }, 3000); 
  },
};

#

Bonjour, je rencontre actuellement un problème. Je suis en train de réaliser un système de status pour mon serveur gmod, cependant, mon système de rafraichissement automatique ne fonctionne pas vraiment et j'aimerai savoir pourquoi. Quelqu'un pourrait m'aider svp ? Merci d'avance (j'aimerai que l'embed se raffraichisse automatiquement toutes les x secondes)

neat raft
drowsy ocean
#

Discord.MessageEmbed n'est pas un constructeur, il faut que tu utilise Discord.EmbedBuilder

neat raft
#

Or, j'aimerai que le même embed se modifie chaque minute

drowsy ocean
#

Et bien c'est normal, tu fait un message.channel.send a chaque boucle

#

C'est pas EmbedBuilder le problème

neat raft
#

Il faut donc que j'enlève le message.channel.send à un endroit précis ?

neat raft
oak yoke
#

Bonjour, je suis en train de faire un projet qui sera hébergé sur un vps car il fonctionne avec un bot et un site web. J'ai besoin d'un serveur express pour réaliser des requêtes etc, mais je dois faire un serveur pour le bot et un pour le site ou juste un serveur global que je met à la racine de mon projet ?

drowsy ocean
past nimbus
#

Même serveur machine ?

#

Ou même "serveur" en parlant du code nodejs ?

azure saddle
#

les gars svp j'ai un vieux serveur de 200 membres que j'aimerais recommencer à 0, qlq a un petit script pour ban tt le monde ?

oak yoke
past nimbus
oak yoke
#

ok merci

empty mauve
#

hey petite éreure quelqun pour m'aider svp

C:\Users\Angelo\Desktop\Angelo bot - Copie\Events\interactions\interactionCreate.js:7
        if (interaction.ischatInputCommand()) return;
                        ^

TypeError: interaction.ischatInputCommand is not a function
    at Object.execute (C:\Users\Angelo\Desktop\Angelo bot - Copie\Events\interactions\interactionCreate.js:7:25)
    at Client.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\Handlers\eventHandler.js:25:63)
    at Client.emit (node:events:513:28)
    at InteractionCreateAction.handle (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12)
    at module.exports [as INTERACTION_CREATE] (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\WebSocketManager.js:354:31)
    at WebSocketManager.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\WebSocketManager.js:238:12)
    at WebSocketManager.emit (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@vladfrangu\async_event_emitter\dist\index.js:282:31)
    at WebSocketShard.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@discordjs\ws\dist\index.js:1103:51)
    at WebSocketShard.emit (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@vladfrangu\async_event_emitter\dist\index.js:282:31)

Node.js v18.14.1
[nodemon] app crashed - waiting for file changes before starting...

et le code:

drowsy ocean
#

Essaye en l'écrivant correctement 😉

empty mauve
# drowsy ocean Essaye en l'écrivant correctement 😉

ah oui 😅

maintenant j'en revien au meme problème que l'autre jour

Je lance ma commande, ça m'écrit "l'interaction de répond plus" et je n'ais toujour pas d'éreur bref je suis bloqué comme ça depuis deux semaine

drowsy ocean
#

@empty mauve C'est bon ?

empty mauve
#

merci

#

bon je suis chiant mais...

C:\Users\Angelo\Desktop\Angelo bot - Copie\Commands\Admin\ping.js:12
            .setDescription(`Voici la latence du bot: \`${client.ws.ping}\` ms`)
                                                          ^

ReferenceError: client is not defined
    at Object.execute (C:\Users\Angelo\Desktop\Angelo bot - Copie\Commands\Admin\ping.js:12:59)
    at Object.execute (C:\Users\Angelo\Desktop\Angelo bot - Copie\Events\interactions\interactionCreate.js:15:17)
    at Client.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\Handlers\eventHandler.js:25:63)
    at Client.emit (node:events:513:28)
    at InteractionCreateAction.handle (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12)
    at module.exports [as INTERACTION_CREATE] (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\WebSocketManager.js:354:31)
    at WebSocketManager.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\WebSocketManager.js:238:12)
    at WebSocketManager.emit (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@vladfrangu\async_event_emitter\dist\index.js:282:31)
    at WebSocketShard.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@discordjs\ws\dist\index.js:1103:51)

Node.js v18.14.1
[nodemon] app crashed - waiting for file changes before starting...
visual sequoia
drowsy ocean
#

@empty mauve Lis les erreurs par pitié c'est plutot simple

empty mauve
#

bon... déso mais

C:\Users\Angelo\Desktop\Angelo bot - Copie\Commands\Admin\ping.js:12
            .setDescription(`Voici la latence du bot: \`${interaction.client.ping}\` ms`)
                                                                             ^

TypeError: Cannot read properties of undefined (reading 'ping')
    at Object.execute (C:\Users\Angelo\Desktop\Angelo bot - Copie\Commands\Admin\ping.js:12:78)
    at Object.execute (C:\Users\Angelo\Desktop\Angelo bot - Copie\Events\interactions\interactionCreate.js:15:17)
    at Client.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\Handlers\eventHandler.js:25:63)
    at Client.emit (node:events:513:28)
    at InteractionCreateAction.handle (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12)
    at module.exports [as INTERACTION_CREATE] (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\WebSocketManager.js:354:31)
    at WebSocketManager.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\WebSocketManager.js:238:12)
    at WebSocketManager.emit (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@vladfrangu\async_event_emitter\dist\index.js:282:31)
    at WebSocketShard.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@discordjs\ws\dist\index.js:1103:51)

Node.js v18.14.1
[nodemon] app crashed - waiting for file changes before starting...
fleet scaffold
keen narwhal
#

par pitié la doc existe

empty mauve
#

anglais?...

keen narwhal
#

LA doc

#

lis la doc

#

tu vérra que CLient existe pas dans interaction ^^

cyan iron
#

Qu'on pourrait traduire par " TypeError : Impossible de lire les propriétés d'un indéfini ( lisant 'ping' ) "
Ce qui signifie que interaction.client est undefined, donc non défini

Dans ton cas, interaction ne possède pas de propriété client

cyan iron
wicked wind
#

Bonjour, j'essaye de faire un éditeur en bloc, sauf que je n'arrive pas à le faire simplement avec d3, j'ai essayer avec svelvet mais je le trouve pas assez procédurale pour mon utilisation, donc si quelqu'un aimerait ou pourrait m'aider, je dirais pas non. Merci d'avance.

J'utilise Svelte sur Tauri

rancid vapor
#

salut les gars

#

j'ai un bot discord hébéger et regardez mon erreur

#

en local ça fonctionne très bien je précise

#

si vous pouviez répondre vite ce sera adorable (bon je sais il est 02:25)

fleet scaffold
#

pterodactyl ce que tu montre là

buoyant bough
#

problème d'installation d'un module faut toujours faire attention aux différences OS/Version entre local et server

fleet scaffold
rancid vapor
past nimbus
#

Ta startup command j'imagine

fleet scaffold
#

le truc où y a écrit "BOT_JS_FILE"

rancid vapor
fleet scaffold
#

ayaa

#

bah tout s'explique maintenant

rancid vapor
#

dis-moi

fleet scaffold
#

ton hebergeur ce fou de toi

rancid vapor
#

pourquoi?

fleet scaffold
#

il manque des choses là

#

dans les variables tu devrais avoir un truc qui permet d'écrire le fichier de start du bot

#

mais y a nada

rancid vapor
#

ah ouais ?

fleet scaffold
#

yup

rancid vapor
#

donc je leur dis quoi ?

fleet scaffold
#

bah tu leur demande où son les variables

rancid vapor
#

ok ok

fleet scaffold
#

j'espère que t'as pas payé pour un service aussi lamentable

rancid vapor
#

après je vais pas chipoter, l'hebergeur ils me le mettent gratuit

fleet scaffold
#

ouais je me disais bien

rancid vapor
#

je viens clairement de trouver

#

y'a pas besoin de variable

#

j'avais juste a rename mon main.js en client.js

#

ils pensent que tout le monde à ça

fleet scaffold
#

💀

#

chelou leur script

rancid vapor
#

mdr

past nimbus
fleet scaffold
past nimbus
#

100% dans une autre vue il a la variable à config

fleet scaffold
#

c'est en dessous de startup normalement

#

ça fait longtemps j'ai pas use pterodactyl après

past nimbus
#

Au pire check si ton host a pas une doc @rancid vapor

rancid vapor
empty mauve
#

svp quelqun

C:\Users\Angelo\Desktop\Angelo bot - Copie\Commands\Admin\ping.js:12
            .setDescription(`Voici la latence du bot: \`${bot.ws.ping}\` ms`)
                                                          ^

ReferenceError: bot is not defined
    at Object.execute (C:\Users\Angelo\Desktop\Angelo bot - Copie\Commands\Admin\ping.js:12:59)
    at Object.execute (C:\Users\Angelo\Desktop\Angelo bot - Copie\Events\interactions\interactionCreate.js:15:17)
    at Client.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\Handlers\eventHandler.js:25:63)
    at Client.emit (node:events:513:28)
    at InteractionCreateAction.handle (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12)
    at module.exports [as INTERACTION_CREATE] (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\WebSocketManager.js:354:31)
    at WebSocketManager.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\discord.js\src\client\websocket\WebSocketManager.js:238:12)
    at WebSocketManager.emit (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@vladfrangu\async_event_emitter\dist\index.js:282:31)

    at WebSocketShard.<anonymous> (C:\Users\Angelo\Desktop\Angelo bot - Copie\node_modules\@discordjs\ws\dist\index.js:1103:51)

Node.js v18.14.1
drowsy ocean
empty mauve
#

oui mais je trouve pas

drowsy ocean
#

c'est pas la première fois que tu a cette erreur

#

"bot is not defined"

empty mauve
#

oui

#

oui mais ça veux dire quoid

drowsy ocean
#

Bah que bot n'est pas défini

empty mauve
#

ah comme celle d'hier de client qui n'est pas définit

#

c juste que j'ais rien def

drowsy ocean
#

Oui c'est comme hier

empty mauve
#

bah tu peut mexpliquer comment faire stp 😅

drowsy ocean
#

Non

empty mauve
drowsy ocean
#

C'est la base de JS quand même

empty mauve
#

...

drowsy ocean
#

Suis un cours sur javascript sérieusement

empty mauve
#

t'en as un a me conseiller?

drowsy ocean
#

Il y en a des tas sur youtube

empty mauve
#

ok merci

#

jme sens...

#

bref bonne journée sinon

empty mauve
#

problème résolu j'ais récup les fichier sur un autre de mes bot en V14 et jsp se que j'aiavis foutu mais j'ais récup les fichier et c bon

#

encore désolé pour le dérangement je sais que je suis relou 😅

past nimbus
#

Ouais un de tes autres bots hein

fleet scaffold
empty mauve
#

le nom ct white rabbit

empty mauve
delicate river
#

J'y connais rien à D.js mais t'es sur de ton paramètre dans ta méthode .setColor ?

#

Exemple trouvé sur la doc, ton paramètre n'a pas l'air bon ...

empty mauve
#

ok meci

keen narwhal
#

pour ton setcolor rajoute juste un # devant ta couleur

empty mauve
#

hey c'est encore moi...

pour mon "setvérify" mon message ne s'envoit pas et il ny a pas d'érreur voici l'interactionCreate et la commande

#

||ping svp||

drowsy ocean
empty mauve
#

...

#

non papa

slim anvil
#

c'est pour ça qu'il existe des bots public

#

car là t'es pas sortis, donc Ori a raison fais toi un bon rush javascript histoire de comprendre comment ça fonctionne

empty mauve
#

oui... mais sinon vous pouvez pas m'aider au lieu de m'envoyer balader quand même?

drowsy ocean
#

Non mais tu comprend pas qu'on te dit ça c'est pour t'aider toi, parce que si on te donne les réponses a chaque fois tu ne fera jamais de progrès

slim anvil
#

on t'envoie pas balader, c'est juste qu'a un certains moment ce n'est pas des bugs que tu viens essayer de fixer, tu envoies juste des fichiers et "do it"
c'est pour ça que je te dis que si c'est pour ça, utilise des bots publics, ils l'ont déjà fais pour toi

#

ou sinon si tu veux vraiment qu'on t'aide, aide nous aussi a t'aider en allant apprendre un minimum de javascript pour comprendre ce que tu fais

drowsy ocean
#

Si je peux te donner un conseil Angelo, cela fait un petit moment que je suis sur ce discord donc je vois la progression de chaqu'un des membres, te concernant j'ai remarqué que tu a appris certaines choses c'est indéniable, cependant j'ai bien l'impression que tu a quelques barrières qui t'empêchent vraiment de progresser, comme l'Anglais, dès qu'il y a de l'anglais j'ai l'impression que ça te bloque alors que la programmation c'est quasi 95% de l'anglais que ce sois le langage ou les docs. Ensuite il te faut suivre des cours sur JS parce que même si en pratiquant ça t'apporte des connaissances, cela ne peut compenser un cours qui te permettra d'apprendre tout les tenants et aboutissants.

feral sorrel
#

Bonsoir tout le monde, je bosse actuellement sur un tout de nouveau système de captcha avec la v2 du recaptcha de google mais me voilà bloquer.
En effet, je veux enregistrer le paramètre guildId dans la session express de l'utilisateur afin d'avoir le paramètre dans mon /captcha pour pouvoir envoyer des informations à ma db avec le guildId. Malheureusement, je ne sais pas du tout comment on enregistre un paramètre dans la session, j'ai essayé quelques trucs, mais sans franc succès... Voici mon code et merci à vous !

const express = require("express");
const session = require("express-session");
const passport = require("passport");
const Strategy = require("passport-discord").Strategy;
const bodyParser = require("body-parser")
const axios = require("axios")
const app = express();

module.exports = async (bot, db) => {

    passport.use(new Strategy({
        clientID: bot.user.id,
        clientSecret: process.env.SECRET,
        callbackURL: process.env.CALLBACK_URL,
        scope: ["identify", "guilds"],
    }, async (accessToken, refreshToken, profile, done) => {
        return done(null, profile);
    }));
    
    passport.serializeUser((user, done) => done(null, user));
    passport.deserializeUser((obj, done) => done(null, obj));
    
    app.use(session({
        secret: "votre_secret",
        resave: false,
        saveUninitialized: false,
    }));
    
    app.use(passport.initialize());
    app.use(passport.session());
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    app.set("view engine", "ejs");
    app.set("views", __dirname);
    
    const checkAuth = async (req, res, next) => {
        if(req.isAuthenticated()) return next();
        req.session.backURL = req.url;
        res.redirect("/login");
    }
    const renderPage = (res, page, data = {}) => {
        let initData = {
            user: res.req.isAuthenticated() ? res.req.user : null
        }
        res.render(page, Object.assign(initData, data));
    }
    
    app.get("/login", passport.authenticate("discord"));
    app.get("/callback", passport.authenticate("discord", {
        failureRedirect: "/error"
    }), (req, res) => {
        res.redirect(`/${req.params.guildId}`)
    });
    
    app.post("/captcha", async (req, res) => {
        console.log(req.params.guildId)
        const { "g-recaptcha-response": recaptchaResponse } = req.body;
        
        const secretKey = process.env.CAPTCHA_SECRET_KEY;
        const verificationURL = "https://www.google.com/recaptcha/api/siteverify";
        
        const params = new URLSearchParams();
        params.append("secret", secretKey);
        params.append("response", recaptchaResponse);
        
        const axiosInstance = axios.create({
            baseURL: verificationURL,
            headers: {
                "Content-Type": "application/x-www-form-urlencoded"
            }
        });
        
        let response = await axiosInstance.post("", null, {
            params: {
                secret: secretKey,
                response: recaptchaResponse
            }
        })
        let { success } = response.data;
        
        console.log(success)
    })
    
    app.get("/:guildId", checkAuth, (req, res) => {
    
        renderPage(res, "index.ejs")
    })
    
    app.listen(8600, () => console.log("Captcha démarré avec succès !"));
}```
tacit smelt
#

Bonjour, je fais actuellement un bot Discord avec js et je rencontre un problème dès la première étape. J'ai fais un command handler avec les command slash, mais problème, celles n'apparaissent pas. Voici le code index

const { Client, GatewayIntentBits, Collection } = require('discord.js');
const fs = require('fs');
const path = require('path');

const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages] });
client.commands = new Collection();

const commandFolders = fs.readdirSync('./commands');

for (const folder of commandFolders) {
  const commandFiles = fs.readdirSync(path.join('./commands', folder)).filter(file => file.endsWith('.js'));
  for (const file of commandFiles) {
    const command = require(path.join(__dirname, 'commands', folder, file));
    if ('data' in command && 'execute' in command) {
      client.commands.set(command.data.name, command);
    } else {
      console.log(`[WARNING] The command in ${file} is missing a required "data" or "execute" property.`);
    }
  }
}

client.once('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('interactionCreate', async interaction => {
  if (!interaction.isCommand()) return;

  const command = client.commands.get(interaction.commandName);

  if (!command) return;

  try {
    await command.execute(interaction);
  } catch (error) {
    console.error(error);
    await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true });
  }
});

// Replace 'YOUR_BOT_TOKEN' with your actual bot token
client.login("");

Ayant déjà fais quelques bots auparavant avec slash et n'ayant aucune erreur dans la console, je penche plutot sur les problemes de permissions, pourtant je l'ai invité avec ce lien https://discord.com/oauth2/authorize?client_id=ID&scope=applications.commands bot&permissions=1099511627775 et donc avec toutes les permissions. Merci d'avance

fleet scaffold
#

les fameux "commandHandler"

tacit smelt
fleet scaffold
#

Celon 90% des dev JS c'est pas mauvais, mais depuis que j'ai arrête d'utilisé les commandHandler, j'ai BEAUCOUP moins d'erreurs dans mon code

fleet scaffold
tacit smelt
#

Forcément si je ne la crée pas elle risque pas de s'afficher. Merci pour cette révélation haha, en revanche je prends en compte ta remarque sur les commandHandler

fleet scaffold
tacit smelt
#

C'est vrai

glass cargo
#

ça m'a déjà permis d'améliorer énormément le commandHandler :p

fleet scaffold
glass cargo
fleet scaffold
#

C'est sûr, mais ça devrait pas trop être une solution

glass cargo
fleet scaffold
fleet scaffold
#

tu ne deviendra pas un bon développeur graçe à la flemme

past nimbus
#

carton jaune csc là

pure tiger
#

En vrai les child process pour les taches lourdes c'est incroyable pour de l'opti

keen narwhal
#

Salut à toi et merci pour l'aide que tu pourrais m'apporter,

Aujourd'hui j'essaye de codé un bot qui interchat un message donc sur un salon specifique dans tout les serveurs ou il se trouve

J'ai commencé un code du style

bot.channels.cache.find(ch => ch.name === 'u-chat').send("Test")

Cependant ça ne l'envoie que sur le serveur mais pas tout les serveurs ou il y a 'u-chat'

Aucune erreur dans la console

J'espère qu'une personne pourra me mettre sur une piste 🙂

(Me ping pour que je puisse voir si il a un réponse 🙂 )

queen ocean
keen narwhal
#

Il existe plus le findAll ?

queen ocean
cyan iron
#

C´est .filter

#

Pour cherche plusieurs éléments

#

Mais ça va te renvoyer un tableau fait gaffe

queen ocean
cyan iron
#

Bah ouais ça dépend ce qu'il veut faire

keen narwhal
#

Je cherche a faire que si un utilisateur fait exemple /message Text ça envoie un Embed avec des infos mais aussi le message écrit et potentiellement un image aussi mais ça je vais le géré juste pour envoie un embed en gros 🙂

queen ocean
#

Je sais plus si c'est .each ou .forEach sur les collections discordjs

#

donc test

#

mais la ton "test" sera envoyé sur tout tes channels avec le nom "u-chat"

blazing wadi
#
let modalTicket = new Discord.ModalBuilder()
      .setCustomId("modalTicketReason")
      .setTitle("Need help ?! ⚠️")

  const subjectInput = new Discord.TextInputComponent()
      .setCustomId('subjectInput')
      .setLabel("Describe your problem !")
      .setStyle("SHORT");

  const reasonInput = new Discord.TextInputComponent()
      .setCustomId('reasonInput')
      .setLabel("Describe your problem !")
      .setStyle("PARAGRAPH");

  const subjectActionRow = new Discord.ActionRowBuilder().addComponents(subjectInput);
  const reasonActionRow = new Discord.ActionRowBuilder().addComponents(reasonInput);

  console.log(modalTicket);
  modalTicket.addComponents(subjectActionRow, reasonActionRow);

Bonjour y aurait il des gens pouvant m'aider à règler ce soucis, je voudrai simplement faire un modal et récupérer les données. ayant suivi la doc de discord je comprends pas pour ça ne marche pas

#

merci de votre aide

ashen rapids
#

Si quelqu'un a une solution pour ce problème, je suis preneur
La mienne était pas viable finalement

ashen rapids
drowsy ocean
ashen rapids
#

Je préfère par écrit si possible !

drowsy ocean
ashen rapids
#

Alors je stocke l'ID de l'event directement. Du coup 2 questions se posent :

  • Comment faire le lien entre le start d'un évent et l'instance ?
  • Comment faire le lien entre un disconnect et un stage instance qui est à null ?
drowsy ocean
# ashen rapids Alors je stocke l'ID de l'event directement. Du coup 2 questions se posent : - ...

Il y a l'event guildScheduledEventCreate (https://discord.js.org/#/docs/discord.js/main/class/Client?scrollTo=e-guildScheduledEventCreate) qui permet d'avoir l'event et donc son channel associé et la période de l'évenement

discord.js

discord.js is a powerful Node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend.

#

Je te conseille aussi de faire un déclencheur sur guildScheduledEventUpdate en cas de mise a jour

#

Es ce que tu vois la solution ?

ashen rapids
#

Je vois un peu mieux que ! Mais quand je mets fin à un évent Discord, le property stage du salon est à null. En fait ça met fin à l'évent et ensuite ça déco tout le monde

#

Tu vois le problème ?

drowsy ocean
#

Non je ne vois pas le problème, étant donné que tu a sauvegarder l'id du channel par avance

ashen rapids
#

Du coup c'est pas fiable du coup vu que tu fais le lien via le Channel et pas le stage instance ?

drowsy ocean
#

Bah si puisque les deux sont les même ^^

#

Quand un des user disconnect, le voicestateupdate va te donner l'id du channel, tu n'as qu'a check si c'est l'id d'un channel d'un event

#

C'est tout ^^

ashen rapids
#

Mais si 3h après j'ai un autre évent dans le même channel ?

drowsy ocean
#

Bah quand l'event guildScheduledEventCreate ou guildScheduledEventUpdate se déclenchent, tu peut récupérer la période début/fin de l'event, tu a juste une vérification a faire sur l'heure

ashen rapids
#

Du coup à chaque déco d'un participant, vérifier si c'est dans un certain intervalle de temps

drowsy ocean
#

Oui exactement

ashen rapids
#

Ok je vois le truc

drowsy ocean
#

Si il déco dans le chan d'un event à l'heure de cet event bah tu sais qu'il y a participé

#

Bon c'est cool si tu vois ce que je veux dire, n'hesite pas si tu a d'autres questions

ashen rapids
#

Merci à toi pour cette solution possible !
Si les gens en ont d'autres, je suis preneur 😇

dusky silo
# blazing wadi ```js let modalTicket = new Discord.ModalBuilder() .setCustomId("modalTick...

        const InvitServeur = new TextInputBuilder()
            .setCustomId( 'InvitServeur' )
            .setLabel( `Lien d'invitation de votre serveur :` )
            .setStyle( TextInputStyle.Short )
            .setRequired( true );

        const Pub = new TextInputBuilder()
            .setCustomId( 'Publicite' )
            .setLabel( `Publicité du serveur :` )
            .setStyle( TextInputStyle.Paragraph )
            .setRequired( true );

        const InvitRow = new ActionRowBuilder().addComponents( InvitServeur );
        const PubRow = new ActionRowBuilder().addComponents( Pub );

        const ModalPartner = new ModalBuilder()
          .setCustomId( 'Modal-1' )
          .setTitle( `Votre demande :` )
          .addComponents( InvitRow, PubRow );

            interaction.showModal( ModalPartner );

            client.on( Events.InteractionCreate, interaction => {
                if ( !interaction.isModalSubmit() ) return;

                const InvitServer = interaction.fields.getTextInputValue('InvitServeur');
                const Publicité = interaction.fields.getTextInputValue('Publicite');
    
                const PartnerEmbed = new EmbedBuilder()
                    .setDescription( `> Nouvelle demande de partenariat !` )
                    .addFields(
                        { name: `Membre affectuant la demande :` , value: `\`\`\`${interaction.user.tag}\n${interaction.user.id}\`\`\`` , inline: false },
                        { name: `Lien d'invitation du serveur :` , value: `${InvitServer}` , inline: false },
                        { name: `__Publicité du serveur :__` , value: `${Publicité}` , inline: false}
                    )
                    .setColor("#7900d3");
    
                const Salon1 = client.channels.cache.get( Partner );
                Salon1.send( { content: `${InvitServer}` , embeds: [ PartnerEmbed ] } ).then(() => {
                  interaction.reply( { content: `Votre demande vient d'être envoyé avec succès !` } );
                }
              );
            }
          );

Voici un exemple, en espérant que cela puisse t'aider à trouver là où tu bloques

oak yoke
#

Hello, j'essaie d'appeler un fichier js avec un serveur express sauf que cela ne fonctionne pas quelqu'un saurait pourquoi ?

const express = require('express');
const router = express.Router();

const afficherImage = require('../campagne/voggt/user/37/script');

// Appeler la fonction pour afficher l'image
router.get('/afficher-image', (req, res) => {
  afficherImage();
  console.log('fonction envoyé !');
});

module.exports = router;
#

si je fait la fonction de le fichier c'est bon mais des que je met la fonction ailleur sa fontionne plus

glass cargo
oak yoke
past nimbus
#

Montre la fonction

#

Tu veux "afficher" où ?

#

Car là, juste en voyant le code, peu importe ce que contient la fonction afficherImage tu vas pas afficher grand chose en réponse à la requête

oak yoke
oak yoke
amber ivy
#

Bonsoir, ma première ici !
j'ai passé l'après-midi sur un problème... Je voulais définir le statut et l'activité de mon bot au démarrage de ce dernier mais ça me fait un comportement aléatoire : des fois ça s'affiche une seconde puis plus, des fois ça s'affiche du premier coup, des fois un statut s'affiche après avoir redémarrer mon script ; bref wtf
Quelqu'un aurait une idée de pourquoi ça me fait ça svp ?
Voilà le code de l'event ready si ça peut aider.
PS : je démarre plusieurs instance de clients Discord (bots) avec chacun un token unique.

drowsy ocean
#

Mais créer un class juste pour ça c'est pas ouf

lyric saddle
#

Bonsoir, ca va pour moi aussi une après-midi sur un problème : j'ai fait 2 commandes : addgoodbye.js (où sera le message) et setgoodbye.js ( l'embed du message) et 1 event : guildMemberRemove.js
Mon problème : Les info du setgoodbye.js ne se stock pas dans ma db, pourtant je n'ai aucunne erreur concernant guildMemberRemove.js (la où le code fait que ces infos vont dans ma db)

#

PS : j'avais fait les même code pour le message de bienvenue (addwelcome.js, etc) et cela marche très bien

lyric saddle
#

guildMemberRemove.js

#
const Discord = require('discord.js');
const { EmbedBuilder } = require('discord.js');

module.exports = async (bot, member) => {
    
    let db = bot.db;
    try {
        db.query(`SELECT * FROM goodbye WHERE guild = '${member.guild.id}'`, async (err, req) => {
            if (req.length < 1) {
                return;
            } else {
                const title = req[0].titre;
                const description = req[0].description;
                const footer = req[0].footer;
                const timestamp = req[0].timestamp;
                const image = req[0].image;

                const embed = new EmbedBuilder()
                    .setTitle(`${title} 👋`)
                    .setDescription(`${member}, ${description} \nNous somme désormais **${member.guild.memberCount}**`)
                    .setColor(bot.color)
                    .setFooter({ iconURL: bot.user.displayAvatarURL({ dynamic: true }), text: `${footer}` })
                    .setImage(`${image}`)
                    .setThumbnail(member.displayAvatarURL({ dynamic: true }));

                if (timestamp === 'oui') embed.setTimestamp();
                if (!timestamp === 'oui') return;

                db.query(`SELECT * FROM server WHERE guild = '${member.guild.id}'`, async (err, del) => {
                    let goodbye = del[0].goodbyeChannel;
                    const goodbyechannel = bot.channels.cache.get(goodbye);
                    if (!bot.channels.cache.get(goodbyechannel)) return goodbyechannel.send({ content: `${member}`, embeds: [embed] });
                });
            };
        });
    } catch (err) {
        console.log(err);
    };
}
#

setgoodbye.js

#

addgoodbye.js

drowsy ocean
lyric saddle
#

mais je vais essayer

#

ça change rien

amber ivy
glass cargo
#

Si je lis dans tes pensées, je dirais que ça vient de...ah ben non en fait, je peux pas savoir vu que je lis pas dans les pensées !

glad spire
#

Bonjour,
J'ai cherché longtemps sur le web mais le ne trouve rien. Comment peut-on faire pour supprimer toutes les classes des tous les éléments enfants d'un div ?
Voici mon code html :

<div id="listGroupes">
  <span onclick="changementGroupe('Yo')" class="active">Yo</span>
  <span onclick="changementGroupe('Test')" class="active">Test</span>
  <span onclick="changementGroupe('cat')">cat</span>
  <span onclick="changementGroupe('testest')" class="active">testest</span>
  <span onclick="changementGroupe('CC')">CC</span>
</div>

En css, la class active permet juste de mettre en vert le texte.
Je voudrais supprimer toutes les classes 'active' en javascript.
Merci

EDIT : J'ai réussi mais c'est pas propre, donc je suis toujours preneur de solution... Veuillez me mentionner sinon je recois pas de notif

rocky oar
#

Tu as fais comment actuellement ?

glad spire
#

J'ai finalement trouver merci quand même

amber ivy
clever bane
plain raven
#

des gens serraient assez bon en tsx pour m'aider sur un truc, je préfère voc en l'occurrence mais si vous ne pouvez pas je ferrais de mon mieux pour rédiger mon problème

slim anvil
amber ivy
cyan iron
#

De rien

plain raven
# slim anvil je pense que tu auras + de réponse si tu postes ton problème 👌même si quelqu’un...

Très bien, je suis entrain de réaliser une application next, je travaille dans un formulaire en ce moment et je voulais rendre l'input de type date plus simple pour l'expérience utilisateur, j'ai réussi.
Simplement, vous vous doutez bien qu'il y a quelques problèmes, j'ai crée ce fameux input dans un autre fichier mais je veux le remplacer par l'autre input de simple type="date", le problème est que la value qu'utilise l'input qui doit être remplacé permet de faire des conditition si si il y a une erreur à cette endroit alors on ne peut pas submit.
En conclusion, je veux remplacer les deux input pour pouvoir utiliser et rendre fonctionnel les validations du nouvel input.
J'ai essayé d'être le plus clair, je vais vous fournir les deux fichiers, le premier qui serra celui ou contient les deux input (PersonaleInfos.tsx) et l'autre qui est l'input fonctionnel (DateInput.tsx)

#

DateInput.tsx

import React, { useState, ChangeEvent, useRef, useEffect, MouseEvent } from 'react';
import { parse, differenceInYears, isValid } from 'date-fns';

export const DateInput: React.FC = () => {
  const [value, setValue] = useState("MM / DD / YYYY");
  const inputRef = useRef<HTMLInputElement>(null);

  useEffect(() => {
    if (inputRef.current) {
      inputRef.current.setSelectionRange(0, 0);
    }
  }, []);

  const handleMouseDown = (e: MouseEvent<HTMLInputElement>) => {
    e.preventDefault();
    if (inputRef.current) {
      inputRef.current.focus();
    }
  };

  const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
    const val = e.target.value.replace(/\D/g, '');
    let newVal = 'MM / DD / YYYY';

    if (val.length > 0) newVal = val.slice(0, 2) + 'M / DD / YYYY';
    if (val.length > 1) newVal = val.slice(0, 2) + ' / DD / YYYY';
    if (val.length > 2) newVal = val.slice(0, 2) + ' / ' + val.slice(2,4) + 'D / YYYY';
    if (val.length > 3) newVal = val.slice(0, 2) + ' / ' + val.slice(2,4) + ' / YYYY';
    if (val.length > 4) newVal = val.slice(0, 2) + ' / ' + val.slice(2,4) + ' / ' + val.slice(4,8) + 'YYY';
    if (val.length > 5) newVal = val.slice(0, 2) + ' / ' + val.slice(2,4) + ' / ' + val.slice(4,8) + 'YY';
    if (val.length > 6) newVal = val.slice(0, 2) + ' / ' + val.slice(2,4) + ' / ' + val.slice(4,8) + 'Y';

    setValue(newVal.slice(0, 14));
  };

  const dateRegex = /^(0[1-9]|[12]\d|3[01])\s\/\s(0[1-9]|1[0-2])\s\/\s\d{4}$/;
  let isYoung = false;
  let isOlder = false;

  if (dateRegex.test(value)) {
    console.log('Format de date valide :', value);
  
    const enteredDate = parse(value, 'dd / MM / yyyy', new Date());
    console.log('Date analysée :', enteredDate);
  
    if (isValid(enteredDate)) {
      const age = differenceInYears(new Date(), enteredDate);
  
      if (age < 18) {
        isYoung = true
      }

      if (age > 80) {
        isOlder = true
      }
    }
  }```
#
  return (
    <>
        <input
            ref={inputRef}
            value={value}
            required
            onMouseDown={handleMouseDown}
            onChange={handleChange}
            className='text-white bg-transparent border-2 border-gray-400 rounded-md px-4 py-2 focus:outline-none focus:border-gray-300 w-[300px]'
        />
        {isYoung && (
            <span className='text-xs text-red-500'>You must be 18 years old or older to apply.</span>
        )}
        {isOlder && (
            <span className='text-xs text-red-500'>You must be under 80 years old to apply.</span>
        )}
    </>
  );
};