#javascript-typescript
1 messages · Page 22 of 1
:class: IntentsBitField (extends BitField)
Data structure that makes it easy to calculate intents.
là, ça serait déjà mieux
v13
Euh, tkt Trust me
ta mit Itent a la place de intent
je dois en faire un en Rust 
Déjà, même si ça existait, ça serait GatewayIntentBit
Je dois démontré la supériorité d'un langage compiler
j'avais même pas vu que c'était Itent
C'est plus la maj manquante sur bit qui m'a frappé x)
Je n'avais même pas remarqué le itent 
il a voulu copier coller Youtube
ou instents
c'est sûrement pour ça
non en vrai, là je me moquerais pas, il a fait l'effort de voir une vidéo
C'est sûr
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
x)
et qu'elle est déjà déprécier 
Et que "ça marche pas"
je vais devenir un vrai dev Rust et adduler le langage vous êtes pas prêt
Tu vas forcer zaros à ajouter le role à force de le répéter 
API Rust, site Web en Rust, websocket en Rust, bot en Rust...

Le tout avec un hommologue en go, et après, du peux dire que t'auras réussi dans la vie 
Il existe une autre lib plus sympa : arikawa
nn
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
J'ai bien peur que le réel problème c'est que tu n'y connais absolument rien à l'environnement pour faire du nodejs
C'est normal tqt, c'est juste que le package est occupé de s'installer
Je sais pas si ça aide de procéder comme ça
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 ?
Il y a plein de manière d'apprendre, a lui de trouver la manière qu'il préfère
bha dit moi pour vous ces la quelle la meilleur manière ?
Y a pas de "meilleur manière" ca dépend de chacun, certains préfère suivre un tuto, d'autres juste lire la doc, certains préfère modif un projet déjà crée, etc
je regarde un tuto mais sa me genere se problem
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], });
}
}
met à jour ton discordjs
$npm update
je sais pas 😦
je vais essayé le deuxième
CTRL + C
je copie le code ?
Fait juste npm i discord.js@latest
vasy
Puis, l'erreur vient qu'il ne trouve pas le fichier
nan tkt c'est normal
Tu peux envoyé le code qui fais l'erreur 🤔
tout desuite
c'est pas à cause d'un fichier qu'il ne trouve pas
c'est à cause de sa version de npm
/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
je vais essayé ca
Non, d'un fichier, c'est marqué sur l'erreur 🤔
/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
Faut mettre à jour le code
ah oui ptn, j'avais pas vu no such file or directory
désolé
Ta suivis un tuto pour ton code ?
non je ne vais pas te mentir
a la base ca devait un truc qui démarre sans problème
je n'ai absolument rien touché
Ba qui te la fournis ?
😭
Ah
mais un truc bien rep
ducoup je sais pas si c'est de moi le soucis
ou replit
ou le code
Envoi voir
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
Oui, faut l'adapter à la nouvelle version
tu sais comment faire ?
Oui, sinon, ya des tutos 🙂
Tu peu m'aidé ou m'envoyé un tuto stp ?
merci*
Dr
Il est long ce lien
Mdr tkt
Plus long tu meurs
Ya encore plus long si tu fais une autre recherche google
*** 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!
fait voir ton package.json
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 ?
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 🙂
Ok ok merci 👍
Je m'en doutais, mais je préférais être sûr x)
déjà, je te recommande Tauri + opti que Électron
c'est fait en Rust c'est une preuve de qualité 
Il serait temps de changer de disque 
OMG, une doc en français

Ah ouais mais faut que j'apprenne rust dcp
C'est le genre de mec qui aime bien flex :/
Léger
Putain mais premier degré mec t'es relou laisse les gens trql
c'est pas du flex
non pas besoin en vrai
Ben si
bah ça dépend vraiment de tes besoins
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.
Oui, mais la majorité des cas t'as pas besoin de l'utiliser
tu as un petit support nodejs en interne de souvenirs
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
👀 Bah soit saouler, mais Tauri est mieux que Électron
ok mec c’est super bravo !!
Ça sert à rien d'argumenter avec vous sur ce sujet 👀restez avec Javascript ça vous convient mieux
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
réel
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 ^_^
En même temps c’est à nous de nous conformer aux envie de garder, alors go apprendre rust
👀 oui
ça doit être ça oui
apprenez le Go aussi
Faut apprendre 5838e838 langages Trust me bro
tu fais du sarcasme là dessus
J'apprends juste Rust depuis peu car je sais faire que du JS et du PHP, désolé de vouloir apprendre un truc nouveau ? 👀
c’est cool d’apprendre un truc
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
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
🤔 Je serais moins reloue quand Rust aura son propre salon
en vrai c'est pas faux ça un salon rust ce serait bien
comme ça il dit plus rien dans le salon js 
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
Aucun rapport, #autres-sujets-dev-tech est déjà dispo comme je t'ai dit
le jour ou y a un groupe rust qui se forme etc et de la demandes évidemment qu’il va pop
Après j'aime peut être Rust car il y a "rus" dedans, et comme j'aime bien le russe...

étant donné que je suis en train de convertir tout mes projets en Rust, oui c'est une représentation correcte
@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 
{
"dependencies": {
"d": "^1.0.1",
"discord.js": "^14.11.0"
}
}
le mot rust va finir blacklist du discord
mdrrr
cool mais sa repond pas a mla question mdr
j’avais pas l’intention de répondre à ta question
🤦
Il a pas non plus dit qu'il y avait un rapport, tout ne tourne pas autour de ton problème tu sais 
Cependant, concernant ton problème, voici la solution : https://docs.npmjs.com/cli/v9/using-npm/scripts
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"
},
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
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 🤷♂️
Honnêtement là je pense qu’il cherche juste à compile son bot tranquillement, à mon humble avis le plus simple et le plus intuitif à utiliser c’est nodemon pour lui, il est pas dans une course de ms d’opti, mais c’est bon à savoir !
je le trouve ou
Faut installer ts-node aussi si tu fais nodemon + typescript 👀
pas forcément, tu peux faire un script d'auto-build via node mon
👀
Je savais pas ça :p
oui oui bien sûr
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
]
});
Pour envoyer du code sur Discord c'est très simple !
||Il vous faut d'abord du code... Et deux cubes de Kubor !
||
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.*
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,
],
});
Normalement en v13 c'est censé fonctionner
Ca c'est les intents de la V14
ah oui enfaite je suis en 14.11
Ok c'est pour ça que ça marchait pas
oui
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
Salut, j'ai besoin d'aide ! Quelqu'un connais une API de traduction (Anglais -> Français / Français -> Anglais) utilisable en js ?
Merci
et une fois avec un compt sa marche comment?
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 !
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 😉
Ok je vois, je vais essayer de me débrouiller avec priority dans ce cas, mais je trouve ça bizarre que sur un même bouton 2 actions distinctes soient appelées sur 2 utilisateurs différents (avec des perms bien différentes), alors que les 2 inhibiteurs n'ont rien à voir l'un avec l'autre
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
Je vais faire sans inhibitor yes pour le moment, mais ça me paraissait bizarre yes
ouais je viens de voir le code j'ai juste filtré par le type je crois
ah je vois, t'inquiète je ferai sans le temps pas de soucis, merci de ton temps !
pas de soucis
Une fois que tu as installé le package sur ton projet, tu n'as plus qu'à faire npm run dev
🆙
ok mais comment listeler ya un document qui le dit ou pas?
c'est écrit dessus
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
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.
Ah merci
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)"
Ç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.
il faudra le contenu du fichier C:\Users\sinax\Documents\Devs\ActuFrance\index.js pour te donner une réponse exacte
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 :
essaye d'installer child_process
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 ?
Tu t'en sers en front par hasard ?
Oui en front c'est pour ça ?
Oui ^^'
manip d'image avec typescript ?
Tu peux pas child process en front
Je ne savais pas que ça poserait problème ><
Place le sur un endpoint ou bien utilise une lib browser friendly
J'espère juste que tu utilise pas Next comme API 😢
tu utilise la fonction ou ?
Alors oui ET non, de base c'est via le site web que tu peux le faire, mais je vais servire aussi le service via API pour pouvoir en profiter via un bot discord par exemple, mais la fonctionnalité de base c'est via Browser
dans mon component react en front
moyen d'avoir le code de la page ?
Yes
et savoir aussi de quel coté tourne ta page nextjs ?
tu utilise next dev/next start ou next build ?
Next Dev
okay, donc tu as accès aux API
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 })
},
}))
je te conseille joami, mais si zustand fait le taf reste dessus
J'aime bien Zustand car il est simple de prise en main (j'en ai entendu que du bien)
Fin bref revenons à ton problème
Le problème je pense que c'est parce que Sharp n'est pas fait pour tourner en Front
sinon, tu veux pas t'essayé à canvas ?
natif, fonctionnel efficace...
Euh ... Je sais pas si ça correspondrait à mon besoin
C'est ce site là que je copie : https://realfavicongenerator.net
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
change dimensions of an html5 canvas element, resizing from a relative position on canvas (center by default) and preserving image data. Latest version: 1.0.0, last published: 8 years ago. Start using resize-canvas in your project by running npm i resize-canvas. There is 1 other project in the npm registry using resize-canvas.
sinon
tu peux utilisez sharp et passer par le système API
Je veux dire, utilise pas l'outil API de Next, c'est la pire solution d'API du monde, toute techno confondu
Je ne savais pas 🤔
c'est toujours aussi pourris ?
Pourtant on le voit de loin vu la gueule de ce qu'ils proposent
même en 2 ans ?
C'est pas leur objectif principal
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
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
Pourtant next pour le côté API c'est pas express qui est utilisé ?
Express t'as un vrai système de Router au moins
Next ils ont pris express, ils ont cassé les seules bonnes features et ils ont fait "regardé on a un système d'API"
Fais toi une API Express à côté, tu seras beaucoup plus libre et tu seras bien plus performant (aussi bien en productivité qu'en runtime de ton code)
if (req.method === 'POST')
C'est une abhération en 2023 de devoir faire ça
J'ai C/C un ancien projet comme d'hab' et j'ai adapté
Express n'inclus pas de décorateur, mais en 7mins tu peux t'ajouter des @Controller @Post/Get/Delete/Put @Params/Body/Query
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)
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
vercel fait work next en SSR
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
mais en gros, t'es facturé à l'execution de fonction
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)
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
c'est gratuit jusqu'à 100 000 requêtes tkt
tu va passer par cloudflared du coup xd ?
Ah oui c'est du perso 100%, histoire d'avoir mon petit outil personnel
Yep, c'est déjà en place le SSH etc ... mais je n'ai pas encore configurer le Hosting avec l'exam que je devais préparer
Si tu t'en fou du ndd de ton API tu peux le mettre sur un Pterodactyl free également
Tu peux me dire ce que c'est que le NDD ? car moi et les noms :x
Nom De Domaine
si il à setup son ssh il à déja le ndd je pense
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
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
Après généralement je fais des redirect, comme par exemple l'app que j'essai de faire c'est https://creatools.creartcom.fr/
Generated by create next app
Et en général, les services d'host te propose toujours un enregistrement CNAME vers leurs DNS pour ton ndd
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
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
Pas chez des gros groupes
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
Portainer est sympas, je te le conseille
C'est ce que je comptais utiliser justement 🙂
J'avais un peu peur de docker, mais en réalité, c'est simple à comprendre
nope, c'est comme ça que sa work, c'est fait exprès
il faut setup un proxy sur ton client
pour l'UI je te recommande aaPanel ^^
C'est pas du docker aaPanel non ?
il permet de géré docker, les domaines, les base de donnée...
tout en fait
Okok, après normalement si tu fais les choses bien, tout est dans des dockers :p
En fait je comptais use portainer pour la gestion des containers, et si j'ai besoin de gerer les db etc ... je le ferais en command line en rentrant dans le container, en dehors des container je ne setup pas de BDD etc ...
Les BDD si j'en ai besoin seront interne aux containers
ç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
J’envoie ça
Chaque service, peu importe ce qu'il est tourne dans un container, (api, front, database, ddns...)
oui mais comment ?
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
}
}
Tu a une erreur quelque part ?
La typo ne s'applique pas sur l'image
Version de discord.js stp
v14
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
Toujours pas :/
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 ?
erreur, code, stack...
comment ça ? j'ai aucune erreur de code

c'est ça que je veux dire
tu nous balance ton problème et on a pas plus d'infos
et dans la console il n'y a pas d'infos supp
Et tu dis que la musique s'arrête au bout de 30s ?
yep
quelle version de discord-player/discord.js ?
6.6.1
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)
Ah bah pg je vais essayer autre chose
ça a rien avoir 😑
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
Mh ok mais je dois tout changer
bahh, t'as choisis un module qui ne jure que par ces propres dépendances, c'est le risque
Le mieux c'est de prendre un module qui ne dépend que de lui même, ou du minimum de module
Ok ça marche
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 ?
Tu peux définir un poid par type de requetes en fonction de son impact sur ton réseau, et ensuite donner une limite de poid utilisable par minutes/heure/jours
Ah ouais pas mal ça
Perso j’utilise énormément les debounces sinon tu as un truc qui s’appel throttler je crois
Sur nest ça te permet de définir un nombre d’appel par adresse ip
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
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...
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
Le compteur tu le gères comment ?
Ok faut que je me renseigne sur ça
Dans une table d'une bdd
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.
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
Bah non les stocker en DB c'est juste térrible, ton api doit vérifier a chaqu'une des requetes si oui ou non tu a le droit de faire l'appel, imagine 1000 utilisateurs faire 100 requetes /s c'est énorme en charge DB
Wailrone normalement pour le bon fonctionnement de ton api tu met un cache, il faut stocker ça dedans
MySQL est largement capable d'encaisser cela par exemple, ce n'est pas un SELECT qui va planter ton serv. Si je dit ça c'est qu'aujourd'hui nous avons ça en production sur nos APIs avec >10M requêtes/jour
Et après tu te retrouve avec des tables de + de 100M d'entrée c'est wtf
Mon cache est directement géré par typeorm, en gros le cache fonctionne avec la db 👀
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.
D'habitude j'utilise redis, mais si je peux éviter ça m'arrange
Je vois après ça dépend de ton projet mais AWS reste quand même une bonne solution
Comment ça AWS, c'est un host non ?
Pas forcément, mais dans notre cas on défini une clé API / utilisateur, si on a 100M utilisateurs ca serait le rêve 🤣 Mais ne sous-estime pas MySQL 🙂
Non vraiment pas ils propose une énorme gamme de solutions comme des caches, des db etc.. auto scalable sur plusieurs régions
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 😉
Je veux bien entendre qu'utiliser une DB pour stoker le rate limit est réalisable mais clairement pas la meilleur solution
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.
Oui, tout dépend des conditions du rate limit. Si c'est un usage relativement restreint, un système de cache (fichier) suffit largement.
Non mais là je te parle pas de stocker dans des fichiers c'est encore pire, moi je te parle de cache comme Redis ou ElastiCache chez AWS
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
Après en cas de plantage ton serveur est redémarré, je vois pas trop le problème si pendant quelques instants les gens rate limit peuvent revenir
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
Sinon j'ai trouvé ça 👀 https://github.com/fastify/fastify-rate-limit
J'utilise fastify
Au passage
Je l'ai pas dit
en réalité 100 req/s c'est rien du tout, une db peut largement traiter cela
Bah genre si tu limite à 1000 requêtes / jour et que ton système plante au bout de la 999e requête, ben ca repart à zéro et ainsi de suite. Si tu as un modèle économique derrière, vaut mieux avoir un truc béton ^^
Non c'est pas le cas
Avec 1000 user a 100req/s non
Un seul serveur mysql tiens 50k req/s
50k je comprend bien mais bon
pour un système de rate limiting en db j'aurai utilisé rédis perso
Oui redis c'est ce que je dis depuis le début
Avant de faire 1000 * 100req/s il en faut. Si t'es requêtes sont bien optim avec des index bien fait, t'arrive à avoir des requêtes à 0,03ms donc bon ^^
En vrai les deux solutions sont valables, reste plus qu'à faire un choix en fonction de ton appli 🙂
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
Oui on est d'accord que pour des petits projets c'est suffisant mais clairement pas tenable au long therme
Et de si tu as besoin d'avoir des stats particulières sur les requêtes API éffectués etc...
personne ici n'as réellement les moyens d'utiliser AWS
si vous utilisez AWS c'est juste un coup à vous ruiner à votre échelle
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
Après redis tu peux aussi l'utiliser pour cacher des requêtes avec une date d'expiration
sinon tu prends un serveur dédiée
c'est pas du tout fait pour les petits projets
ça peut l'être
a aucun moment c'est une bonne idée
ils ont des instances pas très chères qui font bien le taff
Tu peux avoir AWS gratuit pendant un an avec largement assez de fonctionnalitées pour un petit projet
ça ce voit que tu as utilisé AWS @fleet scaffold 
C'est pour ça qu'il faut faire des estimations de charge et prendre une décision en fonction de ça aussi, si ton serveur SQL est en PLS sur le long terme, tu peux toujours monter un cluster par la suite.
oui j'ai utilisé gcp et Azure aussi
Non mais stop faire un cluster Mysql juste pour gérer un limit rate c'est dumb
après ça me semble pas déconnant de stocker en mémoire les ratelimits
et c'est pas des solutions adapté au particulier
les services Pay as you Go c'est pas pour nous
après en soit ça dépend combiend de temps dure
Comme je l'ai dit je le fais dans la db, fin mon ORM le fait pour moi
Et étant donné que je compte utiliser des triggers et events dans ma db ça m'arrange pour aussi gérer le cache
je vois pas en quoi c'est mauvais, c'est justement super pratique
même pour un particulier
c'est trop cher pour un particulier 🤷♂️
Je pars du principe ou son système de rate limit et inclus dans son app et que si son nombre de requête augmente sur l'API, cela va augmenter sur son app en général également (car + d'utilisateurs). Si il y a un API Manager en amont on en arrivera pas là.
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.
Oui c'est bien aussi
c'est pour ça que j'ai hébergé un serveur MC (7-8 personnes) pour 1,20€ /mois
ou que j'ai fait tourné des instances EC2 pour des bots et que ça m'a couté quelques centimes
tu l'as pas ouvert h24 dans ce cas
Impossible
après en vrai pour EC2 j'avais le free tier
Comment ça " horizontalement " ?
Et sinon oui je suis d'accord avec toi, c'est ce que je fais déjà
Si tu rajoute plusieurs serveurs API pour faire face a la demande
Ok je vois
En gros si tu clusterise
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
Ce sera pas le cas
merci wailrone
vraiment > redis
En tout cas ça ne sera pas mon job
D'accord après je te dis ça dans un cas général pour des projets commun
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
D'accord comme tu le souhaite
Bon merci pour les points de vues de tout le monde, je prend note 👀
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
Yep, j'utilise redis dans tous mes projets perso c'est déjà ce que je fais, mais là ça va bien plus compliquer qu'autre chose
Ok en tout cas bon courage ^^
Thanks 😄
Qlqs-un 😅
Pour combien de clients ?
Pour cette APP, elle est assez requiert beaucoup de ressource car beaucoup de traitement IA/Machine Learning on est sur du 20k clients
pour 20k client ça me semble raisonnable
Oui, c'est surtout parce qu'il y a beaucoup de traitement côté serveur ^^
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
Oui, fin t'es dans une société non ?
c'est pas un petit site, ou un bot discord
en effet lol, il y a plusieurs M€ de CA derrière tout ça lol
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)
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 ^^
Je pense pas que reflechir sur le long terme dès le début soit une bonne idée
fin
Oui on double tout, un node plante, ça prend la relève etc... Obliger afin d'avoir de la haute dispo sans interruption ^^
On utilise Veam pour les backups, on a un cluster de backup dédié car un backup fait minimum 40To
et on fait des backups tt les soirs 😖
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 !
Tout dépend, si c'est rapide tu peux. Après tu peux très bien ajuster plus tard de toute façon.
Salut quels sont les points ou tu galère ? La génération ? Le stockage ?
Génération, et la facon dont je pourrais facilement le réglementer et le sécuriser
J'ai déjà réussi à le faire mais c'est pas sécurisée et sa ne se génére pas automatiquement
Bah au niveau de la génération il y a pas de solutions commune, tu peux le faire a ta sauce tant que le token est unique et plutot long pour éviter les failles de sécu
Personellement je fais un UUID4 que je hash par la suite
ton programme est en Javascript donc
?
Oui
tu compte distribuer ton code de quelle façon ?
S'il y a une notion de licence à mon avis c'est pas du SaaS , ca doit être compiler ensuite en mode executable ^^
Netlify par le biais d'un site car c'est sur Electron

Personellement je fais un UUID4 que je hash par la suite.
il a donc utiliser la carte piège Électron...
Dsl mais pour ce que j'utilise Electron est la solution la plus proche de la machine
Tu donne ton code en source ouverte ici 🤷♂️
Pourquoi ?, ce n'est pas un problème mais pour l'instant j'ai aucune gestion de license donc bon
je trouve que Électron est un choix risqué en terme de sécurité pour ton programme
Et concernant la vérification, tu check bien coté serveur avec un vérification en db
mhh, regarde comment fonctionne discord
Tu vois à quel point c'est "sécurisé" 👀 ?
et bien ça utilise Électron derrière
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)...
Mais de tout facon son system de token n'est pas client
Mais faut que tu trouve une solution pour obfusquer le code (cas idéal)
ça change rien au fait que son programme peut être utilisé sans license ici
Ok c'est possible avec par exemple LocalStorage ou un système de sessions sécurisée ?
Avec des minifiers commme Lighting CSS ou WebPack c'est possible ?
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
moi ce que je te recommanderais.
c'est ces 3 étapes :
- Minification du code
- obfuscation du code
- Compilation du code avec "PKG" (Outil développer par vercel pour avoir un exécutable qui utilise nodejs)
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 ^^
Et pour aller plus loin, tu compile en plus ton exe avec un outil d'obfuscation et t'es béton :p
Après là on est plus sur la sécuritée software en général
Ah mrd, avec Tauri c'est aussi faisable ?
comment ça avec Tauri c'est aussi faisable ?
Car j'avais vu Tauri mais je ne sais pas si c'est aussi sécurisée qu'Electron
De décompiler et recompiler une appli comme on le veut
Bah c'est sécurisé oui, car c'est directement compiler en code machine
c'est bien plus complexe de decompiler du code machine
Oui, ça a toujours été la compliquer ça ^^
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)
Tauri est mieux en tout point donc pourquoi pas franchement
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
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 😄
SaaS ? Je ne connais pas se terme attendez
Oui fin y a pas d'outil magique en ligne "read code of this App" 😂 avec du C++/C
Tu heberge ton app sur des serveurs et accessible via le navigateur
Ah ok, mais après le problème c'est que ducoup il y aura pas de renderer, je peux pas changer des informations de fenetres ou connaitres des infos sur l'ordinateur de la personne comme le stockage etc...
Et non, c'est l'inconvénient...
Ah oui donc je pourrais pas le faire puisque j'en ai besoin directement donc obliger de le compiler avec tout dedans
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é
pas forcement, il y a pas de support mobile par exemple sur Tauri
ça peut etre deal breaker pour certains apps
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
@fleet scaffold donc tu peut m aider ?
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('');
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.
l'erreur st simple
c'est pas un constructor
car il n'existe plus
honnétement ?
t'as juste copié/collé le code
?
oui
ça explique tout
tiens c'est cadeau
ça t'aidera à mieux comprendre
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>
)
}
Yo j'aimerais faire du back-end sur ma page de connexion avec expressJS j'aimerais un avis sur : https://dev.to/jahongir2007/creating-a-login-and-registration-form-with-nodejs-expressjs-and-mysql-database-160n
une idée serais de rerender le composant à chaque fin d'animation
Ça roule, du coup je vais le dégager de mon index.ts et en faire un componant à part
Je ne sais plus comment re-render un component React :x
Je sais l'update mais là pour le coup j'ai besoin de le re-render complètement x)
bah
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;
}}/>
)
}
{value && component)
C'est tout good, j'ai use un store etc .. pour gérer l'état de TypeIt et agir en conséquence
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
ça work ?
Oui biensûr
bah je te recommanderais de faire { !complete && <HeaderTypeIt> }
ça t'évitera la condition terciaire inutile ^^
Exacte 😄
Utilise pas de library pour faire ça tu peux le faire en quelques ligne de code
Après si ça marche garde ce 🙂
Ça fonctionne bien mais ces "quelques" lignes de code sont aussi concises que la lib ?
Et pour avoir autant de personnalisation sa ne risque pas de me prendre + de temps que nécessaire ?
Car en soit elle fonctionne, j'avais surtout du mal à faire Reset l'animation mais maintenant sa fonctionne correctement
Alors utilise ta lib 🙂
C’est juste que mois je suis friand de presque pas utiliser de lib 😉
Yep je comprend ton point de vue 😉
Mais comme ce n'est pas une fonctionnalité essentielle j'ai préféré gagné du temps dessus
Parce que bon, je me fais un petit projet pour reprendre React Tranquillement, mais je n'avais pas fais de Homepage 
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
J'étais justement en train de faire sa xD
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
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 😄
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
Je suis entièrement d'accord avec toi, mais ce n'est pas sur JS que je m'entraine 😉
React principalement avec l'utilisation de Zustand et Tailwind
les animations en react que tu vas créer seront différentes justement
Ce que j'ai voulu dire c'est sur la base de JS xD
ça va pas être là même logique qu’en vanilla
Ah ?
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
Ah mais sa je le sais xD
La manipulation de DOM en vanilla je ne le fais plus depuis longtemps
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 
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
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
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
anyway dans tous les cas t’avais pas placé ton reset ou il faut je crois, à vérifier
Bon déjà j'ai jarté le store et utilisé useState, c'est + adapté x)
et pour ça:
The following methods are intended to be used after an instance has been initialized and kicked off with go():
ça veut pas dire qu’il faut chain go() au reset
mais que lui sera appelle directement après le go
J'ai vu sa sur leur doc en faite : ```js
instance.type("some one-off stuff!").flush();
// Later... reset & re-run from the beginning.
instance.reset().go();
c'est pour sa que je faisais instance.reset().go();
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
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 ? 😅
Déjà pourquoi tu fais pas une fonction parce que dans ton template v'la le bordel que ça soit être ?
?? c’est juste un composant son truc doit y avoir 30 lignes max
fin ça reste à mon avis plus propre et ça coute surtout rien d'en faire une fonction ?
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;
Ok j'ai rien dis
Justement je l'ai fais en composant pour éviter le bordel dont tu parle dans ma page Home
mais fonction de quoi
c'est un composant d'une lib qu'il utilise
Il appelle bien une fonction de genre 15 ligne qu'il return à la fin ?
c'est les options de son component
Bah j'ai bien compris mais ducoup ça change pas le fais qu'en faire une fonction ça fais la même chose
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
en mode il peut pas créer une fonction au dessus ? ( genre c'est pas plus propre )
sachant que tu t'en serviras nul part ailleurs car c'est linké a ce composant
Ah mais je sais pourquoi il parle de fonction, mais non c'est pas prèvu pour être utilisé ailleur sur le site
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é
Je viens d'essayer, et le reset() n'est pas du tout pris en compte
mais enfaite pourquoi tu utilises pas juste options={{ loop: true }} en props
enfaite le reset c'est pas un restart
Attend il y avait une option loop ????
faut lire la doc
j'étais sur téléphone, mais le reset !== restart donc depuis tout à l'heure ca n'aurait rien changé
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
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 
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
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
hey est ce que vous auriez une typo stylé a mettre sur un site?
Degular est super sympa
j'avoue elle est cool je viens de checker, je note, thx!
Tu peux avoir une démo pour les projets perso non commerciaux
a oe?
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
Tu peut screen stp
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.
Ce n'est plus de l'aide que tu demande là, c'est une solution à une énigme 😂
Alors précisons, il faut envoyer le code qui cause le problème, pas tous les fichiers 
Y'en a qui le font donc je préfère préciser
ultra importants les node-modules, comment tu veux réussir à debug sans 🤡
Ah my bad j'avais oublié, c'est vrai 
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
Du calme Eminem
Raccourci stp 😮
solution : change d'hébergeur
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
Met ton pb ici ça sera plus simple
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)
Tu as un message d'erreur ?
non, pas de message d'erreur au départ, cependant, quand j'éxecute la commande /status, un message d'erreur apparait
Oui donc tu a bien un message d'erreur, il est même plutot explicit
Discord.MessageEmbed n'est pas un constructeur, il faut que tu utilise Discord.EmbedBuilder
Bref ça pourra t'aider: https://discordjs.guide/popular-topics/embeds.html#embed-preview
j'ai déjà essayé cependant avec Discord.EmbedBuilder, plusieurs embed s'envoient chaque minute
Or, j'aimerai que le même embed se modifie chaque minute
Et bien c'est normal, tu fait un message.channel.send a chaque boucle
C'est pas EmbedBuilder le problème
Il faut donc que j'enlève le message.channel.send à un endroit précis ?
Bon parfait, merci de ton aide 😁
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 ?
Salut, tu peux tout mettre sur un seul serveur
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 ?
Créer un autre serv
en parlant du code niveau machine se sera forcément le même sur un vps ?
-> instance node
Pour la réponse, sur la même machine physique, osef
Sur la même instance node, non
ok merci
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:
L'erreur est plutot explicit
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
Bah normal tu return
@empty mauve C'est bon ?
yep
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...
Tu n'as pas importer ton client
@empty mauve Lis les erreurs par pitié c'est plutot simple
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...
interaction, n'inclus pas "client".... tu sais lire l'anglais ?
par pitié la doc existe
anglais?...
TypeError: Cannot read properties of undefined (reading 'ping')
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
J'imagine que ça dépend de la version alors 👀
https://old.discordjs.dev/#/docs/discord.js/main/class/BaseInteraction?scrollTo=client
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.
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
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)
tu peux montré variable d'environnement please ?
pterodactyl ce que tu montre là
problème d'installation d'un module faut toujours faire attention aux différences OS/Version entre local et server
/home/container c'est son root sur pterodactyl
ma variable d'environnement ?
Ta startup command j'imagine
le truc où y a écrit "BOT_JS_FILE"
dis-moi
ton hebergeur ce fou de toi
pourquoi?
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
ah ouais ?
yup
donc je leur dis quoi ?
bah tu leur demande où son les variables
ok ok
j'espère que t'as pas payé pour un service aussi lamentable
après je vais pas chipoter, l'hebergeur ils me le mettent gratuit
nan tkt
ouais je me disais bien
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
mdr
Bah c'est la variable mec, c'est le script de base hein ^^'
sauf que y a pas de variables la
100% dans une autre vue il a la variable à config
c'est en dessous de startup normalement
ça fait longtemps j'ai pas use pterodactyl après
Au pire check si ton host a pas une doc @rancid vapor
yep je vais check
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
Angelo réfléchis deux secondes stp
oui mais je trouve pas
Bah que bot n'est pas défini
Oui c'est comme hier
bah tu peut mexpliquer comment faire stp 😅
Non

C'est la base de JS quand même
...
Suis un cours sur javascript sérieusement
t'en as un a me conseiller?
Il y en a des tas sur youtube
Petite vidéo pour vous annoncer et présenter la nouvelle formation JavaScript édition 2022 https://grafikart.fr/formations/formation-javascript
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 😅
Ouais un de tes autres bots hein
merci github ❤️
nan vraiment ct un bot que je devait faire pour un pote et que je lui es jamain fini en plus il m'a enlevé les perm sur son serv
le nom ct white rabbit
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 ...
ok meci
pour ton setcolor rajoute juste un # devant ta couleur
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||
Angelo ça deviens plus possible de demander de l'aide toute les 30 minutes, tu as suivis la playlist de cours JS que je t'ai passé ?
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
oui... mais sinon vous pouvez pas m'aider au lieu de m'envoyer balader quand même?
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
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
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.
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 !"));
}```
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
les fameux "commandHandler"
C'est mauvais ?
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
bon + simplement, ou est ce que tu crée les commandes ici ?
Je suis bien débile
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
Bah c'est + facile à debug sans commandHandler, et tu verra rarement ça dans des langages compilé par exemple
C'est vrai
Les class 👀
ça m'a déjà permis d'améliorer énormément le commandHandler :p
c'est pareil, les commandHandler c'est unsafe, car ça fait confiance au fs
je dis pas le contraire, mais le fait d'utiliser les class permet d'éviter un grand nombre d'erreurs :p
C'est sûr, mais ça devrait pas trop être une solution
Non bien sûr x)
en vrai essaye sans commandHandler une fois, tu va voir ça va changé ta perception du code
La flemme 
tu ne deviendra pas un bon développeur graçe à la flemme
carton jaune csc là
En vrai les child process pour les taches lourdes c'est incroyable pour de l'opti
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 🙂 )
.find te renvoie que le premier element qu'il trouve
Il existe plus le findAll ?
surement que si
C´est .filter
Pour cherche plusieurs éléments
Mais ça va te renvoyer un tableau fait gaffe
autant boucler directement sur les channels 
Bah ouais ça dépend ce qu'il veut faire
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 🙂
bot.channels.cache.each(ch => {
if (ch.name === 'u-chat') {
ch.send("test")
}
})
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"
forEach
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
Si quelqu'un a une solution pour ce problème, je suis preneur
La mienne était pas viable finalement
Dispo voc dans la soirée ?
Pas du tout
Ah bah dis moi quand tu es dispo je pense pouvoir t'aider
Je préfère par écrit si possible !
D'acc, je te lance une piste, je pense que tu devrais sauvegarder en avance l'id de l'event, cela t'évitera de l'avoir null
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 ?
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
Je te conseille aussi de faire un déclencheur sur guildScheduledEventUpdate en cas de mise a jour
Es ce que tu vois la solution ?
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 ?
Non je ne vois pas le problème, étant donné que tu a sauvegarder l'id du channel par avance
Du coup c'est pas fiable du coup vu que tu fais le lien via le Channel et pas le stage instance ?
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 ^^
Mais si 3h après j'ai un autre évent dans le même channel ?
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
Du coup à chaque déco d'un participant, vérifier si c'est dans un certain intervalle de temps
Oui exactement
Ok je vois le truc
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
Merci à toi pour cette solution possible !
Si les gens en ont d'autres, je suis preneur 😇
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
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
quand tu la "met" ailleurs ?
Enfaite si j'écris ma fonction directement dans le fichier que j'ai envoyé mais si je la met dans un autre dossier sa ne fonctionne plus
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
pour être sur que sa venait pas du code de la fonction j'avais mis juste un console.log mais sa fonctionnait pas quand même
sa doit modifier le code css d'un fichier
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.
Faut voir comment tu appel ton code
Mais créer un class juste pour ça c'est pas ouf
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

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
Bah normal, tu aurais pas oublier d'importer le module mysql dans ton guildMemberRemove ?
Le truc c'est que j'ai fais exactement le même fichier pour le guildMemberAdd.js (avec les modifs nécessaire) et ça marche
mais je vais essayer
ça change rien
même en faisant ce code ça marche pas, j'ai le même problème...
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 !
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
Je suis pas encore sur mon pc je viens de me réveiller, mais dès que je l'allume je te montre comment tu peux faire et je t'envois la Doc adéquat
Tu as fais comment actuellement ?
J'ai finalement trouver merci quand même
du coup personne à une idée ? 🥲
c.user.setStatus("idle");
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
je pense que tu auras + de réponse si tu postes ton problème 👌même si quelqu’un peut voc faudrait qu’il sache déjà quel est ton problème
ok j'ai trouvé le problème... je crois, j'avais fait 2 fois un client.login() dans un fichier différent 😑
Merci pour votre aide en tout cas !
De rien
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>
)}
</>
);
};
dsl j’ai pas trop compris


