#javascript-typescript

1 messages · Page 35 of 1

keen narwhal
#

je veux absolument que ca se passe par des roles

plucky nymph
#

en code tu peux fonctionner avec des opérations binaires

#

un peu comme les permissions discord

keen narwhal
plucky nymph
#

faire un système de permissions simple 🤷‍♂️

white knoll
#

Je voulais savoir comment modifier un graphe en ligne. J’ai une courbe sur un site et je cherche comment la modifier, un peu comme quand on fait “Inspecter” et qu’on modifie du texte simple. Sauf que là, je veux modifier le graphe directement. Je suis conscient que ça ne sera visible que chez moi.

keen narwhal
#

Bonsoir , des personnes on déjà fait un système d'oauth discord ? si oui j'aurais besoin de votre aide

plucky nymph
#

L’oauth2 de discord est certes très simple, mais c’est un sujet assez vaste, donc on gagnera du temps si tu donnes directement la partie concernée par ton problème

plucky nymph
lethal salmon
#

bien le bonjour, est-ce que quelqu'un pourrait m'aider ? j'ai une rreur sur vsc Uncaught Error Error: ENOENT: no such file or directory, scandir elle renvoie a ça fs.readdirSync(handlersPath).forEach((file) => { la partie en entière : ````fs.readdirSync(handlersPath).forEach((file) => {
require(path.join(handlersPath, file))(client); // Utilise path.join pour inclure chaque fichier//-
if (file.endsWith('.js')) {//+
const handler = require(path.join(handlersPath, file));//+
if (typeof handler === 'function') {//+
handler(client);//+
} else {//+
console.error(Le fichier ${file} n'exporte pas une fonction.);//+
}//+
}//+
});```
(j'ai bien un dossier qui s'apelle handlers)

lethal salmon
#

j'ai éssayé avec dirname ca me dit que jai pas de dossier qui s'apelle handlers...

late tinsel
# lethal salmon bien le bonjour, est-ce que quelqu'un pourrait m'aider ? j'ai une rreur sur vsc ...

deux trois questions, pourquoi utiliser //+ à la fin de tes lignes, pourquoi tu importes deux fois ton fichier require(path.join(handlersPath, file))(client); et const handler = require(path.join(handlersPath, file)); ligne 2 et 4?

en deux : ton path.join donne dirname/file ce qui ne peut être importé; je te conseille un path.resolve qui te sors le chemin absolue de ton fichier C:\\le\chemin\tres\long\de\ton\dossier\dirname\file ce qui est importable
Ou alternative, tu ajoutes __dirname à ton path.join

#

l'alternative s'écrit path.join(__dirname, handlersPath, file); je précise car des gens m'ont déjà mis path.join(premierarg, narg)__dirname

dire latch
#

Hello, petite question, on ne peut pas savoir les permissions d'un threads 🤔

nimble grotto
dire latch
plucky nymph
#

la propriété habituelle pour récupérer les permissions n'est pas présent ?

#

et après pour savoir si un membre est dans le thread, tu peux taper par là

dire latch
#

Je pose une question pour avoir une réponse et tu me réponds par une question 🤔

plucky nymph
chrome heart
#

C'est pas idiot dans l'absolu comme façon de faire, ça t'ouvre d'autres recherches à faire ahah

plucky nymph
#

ce sera plus rapide si tu essaye directement, qu'attendre que j'ai le temps de faire un bot de test, et essayer

dire latch
plucky nymph
#

si tu n'as pas réponse à ma question, alors c'est que tu n'as pas essayé de chercher 🤓 *

#

c'est la première chose qu'on regarde quand on veut savoir si un channel a des permissions

dire latch
#

Le rapport ? AUCUN

#

Bref

plucky nymph
#

bon courage, et désolé

chrome heart
#

aigri kappa

plucky nymph
#

et aussi si tu tapes sur /channels/{channel.id}/thread-members/{user.id} tu peux recup un objet guild member, apparement il y a une propriété pour les permissions, si tu veux les permissions d'un membre sur un thread

dire latch
acoustic hazel
dire latch
acoustic hazel
# dire latch Je ne vois toujours pas le rapport mais bon mdr

Revois ton comportement envers les gens plus simplement, il te donne des pistes pour t'aider à résoudre ton problème, tu es sans doute brute de décroffrage et j'entends bien mais essaie de faire attention à ça, tu demandes une aide pour rappel, les gens te répondent de bonne foi rien ne les y force. De plus, il t'a même envoyé des liens comportant des ressources. De la même manière, je vais te filer une piste moi aussi, comme preuve de bonté malgré le ton désagréable que tu emploies :

const thread = message.channel; // S'il s'agit bien d'un thread, attrape un message pour ton action et choppe son channel, ça devrait ressortir le thread normalement
const userPermissions = thread.permissionsFor(message.member);
console.log(userPermissions.toArray());
dire latch
acoustic hazel
wet temple
plucky nymph
#

Au pire passons à autre chose 🤓

queen ocean
#

J’ai clear, passez à autre chose les gars

serene tangle
#

Bonjour, une personne qui connait bien next js est disponible pour un problème de typage concernant les metadatas en dynamique ? L'erreur : Type error: Type '{ searchParams: { type: string; }; }' does not satisfy the constraint 'PageProps'.
Types of property 'searchParams' are incompatible.
Type '{ type: string; }' is missing the following properties from type 'Promise<any>': then, catch, finally, [Symbol.toStringTag]

32 |
33 | // Check the prop type of the entry function

34 | checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>()
| ^
35 |
36 | // Check the arguments and return type of the generateMetadata function
37 | if ('generateMetadata' in entry) {

plucky nymph
#

pourquoi props est une promesse ?

#

enfin, params de props*

serene tangle
serene tangle
plucky nymph
#

Type '{ searchParams: { type: string; }; }' does not satisfy the constraint 'PageProps'.

#

si tu regardes bien, ton typage n'est pas le même que celui de la doc

#

il faut que searchParams aie le même typage que dans la doc

#

enfin props

serene tangle
#

Le truc c'est que dans ma page je n'ai pas besoin d'utiliser searchParams c'est pour ça que je l'ai retiré des Props, de base je voulais le rendre optionnel avec searchParams? mais même en le supprimant, supprimant le cache il me sort une erreur avec searchParams

#

c'est une erreur qui sort lors du build

plucky nymph
#

si il attends ce typage alors il faut le mettre

#

sinon oui il y aura une erreur ts

serene tangle
#

Il me semble pas que ca soit obligatoire et j'ai essayer différente manière, en le mettant sans l'utiliser mais ca me sort toujours cette erreur de typage

plucky nymph
#

typescript est stricte sur le typage, s'il attends un typage particulier le transpiler crachera une erreur si ce typage n'est pas respecté

#

ou alors je n'ai pas bien cerné le problème, mais de ce que je vois il faut tout mettre :/

serene tangle
#

et tu mettrais quoi sur la page pour utiliser le searchParams car je n'en ai pas besoin ?

plucky nymph
#

honnêtement j'en sais rien, je sais pas comment Next fonctionne

plucky nymph
#

tu appelles où cette fonction ?

serene tangle
#

Je déclare seulement generateMetadata au dessus de la fonction pour ma page le reste est gérer par next

plucky nymph
#

ah

#

bah dcp il acceptera rien d'autre que ce qu'il attend

serene tangle
#

Il faudrait que ce soit générer via une fonction générique mais bon pas le temps de tout casser kappo2

serene tangle
#

Et vu que y'a l'air d'avoir eu des changements plutôt récents par rapport à ça y'a pleins d'info obselète

plucky nymph
#

si tu suis l'exemple

#

il le type mais ne l'utilise pas

#

tu type comme lui et tu test

#
export async function generateMetadata({ params, searchParams }: Props, parent: ResolvingMetadata): Promise<Metadata> {
#

par contre jsp si y'a vrm besoin du parent, a voir si il peut dégager

serene tangle
#

Non le parent pas nécessaire et j'ai déja essayer de déclare searchParams sans l'utiliser après peut être que le export default a la fin a son importance mais en soi j'ai déja eu des erreurs sur params a peu près la même que searchParams au final de cette manière ca semblait valide vu que maintenant j'ai cette erreur

serene tangle
fierce grotto
# serene tangle La je l'ai déclarer sans l'utiliser comme sur l'exemple, j'ai toujours l'erreur ...

Yo le souci c'est que searchParams n'a pas la structure que PageProps attend regarde dans la définition de PageProps (fichier types) pour voir ce qui est attendu par exemple si c'est une promesse tu peux faire : const searchParams = Promise.resolve({ type: 'string' }); sinon adapte directement searchParams pour inclure toutes les propriétés nécessaires une fois que tu auras aligné les types l'erreur devrait disparaître

serene tangle
fierce grotto
serene tangle
smoky fog
#

Hello, quelqu’un pourrait m’expliquer comment faire pour qu’û bot discord puisse avoir un statut personnalisé ?

#

Comme @terse geyser

unkempt sun
smoky fog
#

Je trouvais pas ca m’enervais j’ai tapé mon bureau

serene tangle
autumn tendon
#

Salut tout le monde !
J'ai fais une commande ban, mais j'aimerais envoyé un mess au ban à l'aide de mon bot sauf que ça ne fonctionne pas :

            guild.members.ban(member, { reason: `✅ Cette personne a été exclue définitivement pour la raison suivante : ${raison}.` });

            const kickedEmbed = new EmbedBuilder()
                .setTitle("Un membre à été banni !")
                .setDescription(`${member} a bien été banni du serveur par **${interaction.user}** pour la raison suivante : **${interaction.options.getString('raison') || 'Aucune raison fournie.'}**`)
                .setFooter({ text: 'Aucun débannisement ne sera effectué automatiquement, il devra être fait manuellement.' });
            
            interaction.reply({ embeds: [kickedEmbed] });

            const resultbanpermEmbed = new EmbedBuilder()
            .setTitle("Vous avez été banni !")
            .setDescription(`Vous avez été banni définitivement par ${interaction.user} pour la raison suivante : **${interaction.options.getString('raison') || 'Aucune raison fournie.'}**`)
            .setFooter({ text: "**Vous ne serez pas** débanni tant que votre bannisement ne sera pas révoquer par l'équipe staff de ce serveur."});

            // send ban result to the banned member
            const msg = client.users.send({ id: `${member}`, embeds: [resultbanpermEmbed]});
            console.log("ban result envoyé :" + msg)

Je précise que c'est pas le code entier, la commande ban marche de base, c'est à cause mon ajout qu'il ne fonctionne plus donc normal qu'il n'y pas les accolades de la fin.

#

erreur :

ReferenceError: client is not defined
    at Object.execute (C:\Users\andsl\Documents\ctOS\commands\moderation\ban.js:95:25)
    at Client.<anonymous> (C:\Users\andsl\Documents\ctOS\index.js:40:17)
    at Client.emit (node:events:524:28)
    at InteractionCreateAction.handle (C:\Users\andsl\Documents\ctOS\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12)
    at module.exports [as INTERACTION_CREATE] (C:\Users\andsl\Documents\ctOS\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (C:\Users\andsl\Documents\ctOS\node_modules\discord.js\src\client\websocket\WebSocketManager.js:348:31)
    at WebSocketManager.<anonymous> (C:\Users\andsl\Documents\ctOS\node_modules\discord.js\src\client\websocket\WebSocketManager.js:232:12)
    at WebSocketManager.emit (C:\Users\andsl\Documents\ctOS\node_modules\@vladfrangu\async_event_emitter\dist\index.cjs:287:31)
    at WebSocketShard.<anonymous> (C:\Users\andsl\Documents\ctOS\node_modules\@discordjs\ws\dist\index.js:1190:51)
    at WebSocketShard.emit (C:\Users\andsl\Documents\ctOS\node_modules\@vladfrangu\async_event_emitter\dist\index.cjs:287:31)
(node:16100) Warning: Supplying "ephemeral" for interaction response options is deprecated. Utilize flags instead.
(Use `node --trace-warnings ...` to show where the warning was created)
node:events:502
      throw er; // Unhandled 'error' event
weary torrent
autumn tendon
#

j'ai mis client

#

a la place de member

weary torrent
autumn tendon
#

nope

#

j'en ai une autre

weary torrent
autumn tendon
#

TypeError: Cannot read properties of undefined (reading 'send')

#

pourtant j'ai ça :
const member = interaction.options.getMember('utilisateur');

weary torrent
#

Tu le ban avant de lui envoyer un message ?

autumn tendon
#

faut que je fasse l'inverse ducoup?

weary torrent
#

Je pense, essaye

autumn tendon
#

j'essaye

weary torrent
#

Récupère le membre, envoie lui un message et ban le dans la foulée

autumn tendon
#

toujours pas

#
TypeError: Cannot read properties of undefined (reading 'send')
    at Object.execute (C:\Users\andsl\Documents\ctOS\commands\moderation\ban.js:84:42)
    at Client.<anonymous> (C:\Users\andsl\Documents\ctOS\index.js:40:17)
    at Client.emit (node:events:524:28)
    at InteractionCreateAction.handle (C:\Users\andsl\Documents\ctOS\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12)
    at module.exports [as INTERACTION_CREATE] (C:\Users\andsl\Documents\ctOS\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (C:\Users\andsl\Documents\ctOS\node_modules\discord.js\src\client\websocket\WebSocketManager.js:348:31)
    at WebSocketManager.<anonymous> (C:\Users\andsl\Documents\ctOS\node_modules\discord.js\src\client\websocket\WebSocketManager.js:232:12)
    at WebSocketManager.emit (C:\Users\andsl\Documents\ctOS\node_modules\@vladfrangu\async_event_emitter\dist\index.cjs:287:31)
    at WebSocketShard.<anonymous> (C:\Users\andsl\Documents\ctOS\node_modules\@discordjs\ws\dist\index.js:1190:51)
    at WebSocketShard.emit (C:\Users\andsl\Documents\ctOS\node_modules\@vladfrangu\async_event_emitter\dist\index.cjs:287:31)
(node:7132) Warning: Supplying "ephemeral" for interaction response options is deprecated. Utilize flags instead.
(Use `node --trace-warnings ...` to show where the warning was created)

queen ocean
#

Après comme on vois pas tout ton code c'est compliqué de te donne une solution précise meh

queen ocean
autumn tendon
#

oui

queen ocean
autumn tendon
#

je te dis ça

#

14.17.2

queen ocean
autumn tendon
#

je regardais la dernière version comme un golmon

queen ocean
#

C'est pareil dans la dernière version meh

autumn tendon
#

ils ont pas update le wiki ducoup

queen ocean
autumn tendon
queen ocean
autumn tendon
#

d'acc

#

merci

#

si quelqu'un peut test le système de bannisement svp

#

car jpp voir si ça send un message

serene tangle
fierce grotto
serene tangle
fierce grotto
serene tangle
wet temple
#

Est ce que vous conseiller vercel pour heberger un site web en prenant un abonnement ?

#

Je vais y placer mon projet next contenant mon dossier api, je vais mettre la db postgresql sur vercel si utilisation

serene tangle
wet temple
serene tangle
wet temple
#

Pour mettre ton front end sur un hebregment et stocker ton backend node js si jamais tu bosses avec

serene tangle
#

Il te fait une preview pour chaque branche push dont la main qui est le projet en prod

serene tangle
plucky nymph
#

CloudFlare Pages/Workers, gratuit à un certain seuil et super rapide

keen narwhal
#

Salut , j'aimerais faire un sorte que les embeds de mon help fasse tous la même taille en largeur pour rendre ça plus agréable visuellement est ce possible?

Voici mon code : ```js
const { EmbedBuilder } = require('discord.js');
const config = require('../config.json');

module.exports = {
name: 'help',
description: 'Affiche la liste des commandes',
ownerOnly: false,
execute: async (message, args, client) => {
const categories = {
"👑 Owner": client.commands.filter(cmd => cmd.ownerOnly),
"🛡️ Modération": client.commands.filter(cmd => !cmd.ownerOnly && ['addrole', 'delrole', 'derank', 'lock', 'lockall', 'unlock', 'unlockall', 'hide', 'hideall', 'unhide', 'unhideall'].includes(cmd.name)),
"🔍 Utilitaires": client.commands.filter(cmd => !cmd.ownerOnly && ['serverinfo', 'snipe', 'role', 'vocinfo', 'timeout'].includes(cmd.name)),
"🖼️ Images": client.commands.filter(cmd => !cmd.ownerOnly && ['pic', 'banner', 'serverpic', 'serverbanner'].includes(cmd.name)),
"📊 Information": client.commands.filter(cmd => !cmd.ownerOnly && ['help', 'allbots', 'alladmins'].includes(cmd.name)),
"🛠️ Configuration": client.commands.filter(cmd => !cmd.ownerOnly && ['antilink', 'antimassmention', 'antispam'].includes(cmd.name))
};

const embeds = [];

for (const [category, commands] of Object.entries(categories)) {
  if (commands.size > 0) {
    const commandList = commands.map(cmd => `\`${config.prefix}${cmd.name}\`\n${cmd.description}`).join('\n\n');
    
    const embed = new EmbedBuilder()
      .setTitle(category)
      .setDescription(commandList)
      .setColor(config.color)
      .setTimestamp();

    embeds.push(embed);
  }
}

message.reply({ embeds: embeds });

}
};

plush lava
#

ça rend comment actuellement ? @keen narwhal

#

Le problème c'est que l'embed ne fera jamais la même taille en largeur même si tu rajoute des espaces ou si tu utilise une technique lugubre

#

Tout simplement à cause de la taille des écrans et des types de format d'écrans (monitor, laptop, tablet, mobile)

unkempt sun
#

Tu peux forcer la taille avec des images

#

@keen narwhal

#

genre ca (l'image est juste sous le message)

compact shoal
#

Hey vous me conseillez quoi pour apprendre JavaScript (principalement pour faire des bot discord)

plush lava
#

Déjà, les bases de JS

#

Ensuite tourne toi vers NodeJS/Deno qui sont des "moteurs" qui sont des environnements moteur en JS ("runtime environment"). Tu as besoin d'utiliser ce genre d'outil pour faire des bots Discord)

#

Ensuite, tu devras utiliser une librairie pour créer ton bot discord. La plus connue et celle que je recommande c'est Discord.JS. Cependant, je te conseil de bien te documenter sur la manière dont fonctionne une librairie.

En l'occurrence, DiscordJS fournis un ensemble d'outils (classes, méthodes..) pour faire des appels à l'API de Discord. C'est essentiellement et pratiquement que ça.

#

En même temps, tu dois aussi savoir comment fonctionne un bot sur Discord. Comment il intéragit, comment Discord a façonné son système (qui s'est complexifié de plus en plus en fonction des années). Ca te permet d'être à l'aise avec l'environnement que tu utilise

keen narwhal
unkempt sun
sick lagoon
#

Vous connaissez des bons frameworks vue (like vuetify) pour créer un protfolio clean un peu dans les thèmes sombres qu'on a aujourd'hui avec des petites animations etc

#

?

plush lava
compact shoal
#

Hey c'est quoi le lien de la documentation ?

keen narwhal
autumn tendon
compact shoal
dire latch
#
discord.js

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

unkempt sun
#

Genre une photo de 900px par 1px

#

Transparente

keen narwhal
opaque coral
#

c'est la manière la plus simple de resize des embes

keen narwhal
keen narwhal
opaque coral
#

oula, alors la c'est une bien bonne question, je vais regarder si je trouve quelque chose

opaque coral
#

D'après mes tests, une image de 400pixel est suffisant pour resize au max un embed, au delà l'embed ne gagnera pas en taille, mais rien ne t'empêche de mettre plus grand

#

Intéressant a savoir mais, j'ai mis une image de 400 pixel quand on sélectionne en grand on vois l'image, mais avec une image de 1000 pixel on la vois plus

unkempt sun
#

On en apprend tous les jours

junior kelp
#

0+

keen narwhal
#

Bonsoir à tous , j’ai une question vous avez un bon hébergeur nodejs/ ou VPS à me conseiller pour mes bots Discord

ocean bluff
#

ou achète un rasberry pi au pire

keen narwhal
glass cargo
#

ça consomme rien en électricité donc ça te coutera bien moins cher qu'un hébergeur

fierce grotto
glass cargo
#

Dans la réalité t’es plutôt à 10W donc ~2€/mois pour 4 cœurs 8Go de ram et jusqu’à 512Go de stockage

#

Imbattable face à un hébergeur

#

Bon après chez l’hébergeur du paye une garantie et un SAV

#

Et faut voir le coût d’amortissement du raspberry aussi

#

Si ton projet d’arrêté dans 6 mois c’est pas rentable

echo oxide
#

La raspberry tu la gardes trop longtemps

#

J’en ai acheté une en mai pour un peu plus de 100€ ( 110 ou 115) elle m’a servi pour pas mal de truc différents ( parfois plusieurs en même temps ) actuellement j’en fait rien depuis 3-4 semaine mais je sais que je vais re commencer à en servir

#

Hormis la puissance qui sur certains truc ça doit être relou c’est le meilleur investissement

fierce grotto
#

sa a augmenté autant que ça

echo oxide
#

Mais une raspberry 5 de base tu la trouve pour 60 je pense

fierce grotto
#

ah oui ok je comprend mieux

#

nn parce que là dans ma tête on passait de 30€ à 110€ 🤣

echo oxide
#

Mdrrrr ça change

#

Après si c’est juste de l’host de bot une raspberry 3 fait large l’affaire pour 30 sur Amazon je crois

#

De mémoire

fierce grotto
#

oui clairement si c'est que pour du bot discord un rpi est largement suffisant

glass cargo
glass cargo
#

De mémoire pour le pi 5 on est entre 45 et 90€ pour uniquement la carte

#

Donc 110€ c’est pas déconnant

glass cargo
#

Perso, j’ai choisis un ptit PC comme ça pour avoir plus de flexibilité

#

x2 emplacements de disques et x2 slots de RAM avec pas mal de ports à l’arrière

#

Et j’ai comparé avec un pote, et malgré que le CPU ai moins de cœurs que le pi 4, il reste plus puissant

fierce grotto
glass cargo
fierce grotto
#

oui mdr

glass cargo
#

En vrai si t’as pas de problème à acheter d’occasion, je recommande le mini pc plus que le pi

#

Moins cher plus modulable

#

Mais faut s’y connaître parce qu’il y a beaucoup de merdes

fierce grotto
#

bas surtout que pour le même prix t'as un vrai CPU quoi

glass cargo
#

Le 1GHz du pi fait mal

echo oxide
fierce grotto
#

après rpi sa reste des micro contrôleur(si je dit pas de connerie) pour faire de la dom ou des bornes d'arcade on leur demande pas d'être surpuissant sinon dans ce cas là autant ce tourner sur un rack/blade ou même un pc simple quoi mdrr

glass cargo
#

Et le CPU est à 35W donc c’est pas beaucoup plus haut que le rpi en utilisation normale

#

Sauf que quand t’as des pics d’utilisation des ressources, ben t’as ces ressources alors qu’avec le pi…

glass cargo
fierce grotto
glass cargo
fierce grotto
#

90 x le nombre de rpi que tu souhaite

glass cargo
#

Et puis pas dit que ça fonctionne pour tous les usages

fierce grotto
#
  • le prix du boitier ptdr
fierce grotto
glass cargo
#

😂

#

Et puis niveau stabilité, je sais pas trop ce que ça donne un cluster de rpi…

fierce grotto
#

mais tu peux tous faire avec un rpi même un routeur wifi 🤣 mais bon

glass cargo
#

Ben en soit tu peux faire tout ce que le rpi fait sur n’importe quel PC. C’est juste que de part sa taille, le rpi est très utilisé dans le monde de la bidouille

fierce grotto
glass cargo
#

🤔

#

C’est rentable de miner sur un truc aussi peu puissant ?

fierce grotto
#

au tous début oui

#

enfin rentable

glass cargo
#

Oui j’imagine que la durée d’amortissement de l’investissement doit être assez longue 😂

fierce grotto
#

Oui mdrr après un bon compris pour les personnes qui ne pouvait pas lâcher 2k dans un miner mdr

glass cargo
echo oxide
glass cargo
final osprey
#

Vous savez que c’était possible de miner du bitcoin avec un papier et un stylo ? 👀

plucky nymph
#

dommage

ornate dock
#

Par contre tu peux miné en dormant ça c'est good 😴

#

Grand question quelqu'un si connais réellement en crypto ici ? 🪙

arctic cairn
#

Salut à tous, est ce que quelqun ici sait brièvement faire fonctionner les API de vinted moi ça merde je sais pas pourquoi

red torrent
sick lagoon
#

c'est du reverse, c'est totalement legit

#

Ton PC accède à l'api "pirate" dès que tu va sur vinted, juste tu l'utilise sans l'UI

fierce grotto
red torrent
# sick lagoon c'est du reverse, c'est totalement legit

Jamais, c'est (entre autres) une violation du droit d'auteur. l'API que tu utilises sur "l'UI" elle est privée elle n'est pas faite pour être utilisée ailleurs. L'exploiter ailleurs est illégal car ça enfrunt :

  • Article L335-2-1 et L335-3 du code de la propriété intellectuelle.
  • Article 323-1, 323-2, 323-3, 323-3-1 du code pénal
#

Code de la propriété intellectuelle

Article L335-2-1 : Punit de trois ans d'emprisonnement et de 300 000 euros d'amende le fait d'éditer, de mettre à la disposition du public ou de communiquer au public, sciemment et sous quelque forme que ce soit, un logiciel manifestement destiné à la mise à disposition non autorisée d'œuvres ou d'objets protégés.

Article L335-3 : Considère comme délit de contrefaçon toute reproduction, représentation ou diffusion d'une œuvre de l'esprit en violation des droits de l'auteur, y compris la violation des droits relatifs aux logiciels.

fierce grotto
#

y'a pas de propriété intellectuel sur la logique d'un logiciel

red torrent
#

Code pénal

Article 323-1 : Sanctionne l'accès frauduleux à un système de traitement automatisé de données (STAD) par deux ans d'emprisonnement et 60 000 euros d'amende.

Article 323-2 : Punit de cinq ans d'emprisonnement et de 150 000 euros d'amende le fait d'entraver ou de fausser le fonctionnement d'un STAD.

Article 323-3 : Réprime de cinq ans d'emprisonnement et de 150 000 euros d'amende l'introduction, la suppression ou la modification frauduleuse de données dans un STAD.

Article 323-3-1 : Punit des mêmes peines le fait, sans motif légitime, de détenir ou de mettre à disposition un programme informatique conçu pour commettre les infractions précédentes.

red torrent
red torrent
fierce grotto
# red torrent La propriété intellectuelle elle est sur la **propriété** de Vinted. Comme son A...

Tu confond plusieurs concepts là:

Propriété intellectuelle != Logique d’un logiciel

  • La logique d’un programme n’est pas protégée par la propriété intellectuelle (CPI, Art. L122-6-1) ce qui est protégé c'est le code source et l'expression de cette logique pas la manière dont fonctionne l’algorithme sous-jacent.

Reverse engineering et API privée

  • Le reverse engineering est légal dans certains cas, comme pour l’interopérabilité.
  • Ici ce n’est pas du reverse engineering mais l’utilisation non autorisée d’une API privée, ce qui relève davantage d'une violation contractuelle (CGU) et potentiellement d’un accès frauduleux (Art. 323-1 du Code pénal)

Exploitation d'une API privée != contrefaçon

  • L'utilisation d'une API privée sans autorisation ne relève pas directement du droit d’auteur (contrairement à la contrefaçon).
  • Cependant cela peut être sanctionné, si ça viole des restrictions contractuelles (CGU) ou implique un accès frauduleux à un système (Art. 323-1 et suivants du Code pénal)
red torrent
red torrent
fierce grotto
# red torrent Mais en fait j'ai travaillé pour une entreprise qui utilisait l'API privée de Li...

Ton expérience ne prouve rien juridiquement un procès peut être perdu pour violation des CGU, concurrence déloyale ou accès frauduleux, pas forcément pour du droit d’auteur tu mélanges tout.
Si l’API privée était protégée par la propriété intellectuelle, montre-moi un article du Code de la Propriété Intellectuelle ou une directive européenne qui dit que la logique d’un logiciel est protégée comme une œuvre sinon ton argument repose juste sur une expérience personnelle qui n’a pas de valeur légale

red torrent
#

Si à l'avenir je pouvais débattre avec un être humain plutôt qu'un bouton copier/coller sur ChatGPT sans même relire la réponse (vu que tu utilises des arguments que ChatGPT démonte dans les réponses que tu me copie/colle) j'apprécierais.

fierce grotto
#

j'en ai vu des choses mais là, c'est iconique parler de gpt parce que t’as plus d’argument pour défendre ton ineptie, c'est juste une manière d’éviter d’admettre que t’as tort.

#

m'enfin niveau compréhension du français c'est pas trop ça visiblement, d'autant qu'à aucun moment je me suis contredit, j'ai dit que le reverse engineering est légal dans certains cas, j'ai également dit que l'exploitation d'une API privée sans autorisation n'est pas du reverse engineering mais une potentielle violation des CGU et dans certains cas un accès frauduleux m'enfin bon

red torrent
#

Depuis le début tu veux me convaincre que c'est pas illégal mais tes réponses argumentent le fait que ce soit illégal

#

Lis au moins ce que chatGPT te répond avant de l'envoyer bêtement, par respect au moins

marsh cedar
fierce grotto
#

Bon, je vais arrêter le débat ici, moi parce que visiblement tu ne fais aucun effort de compréhension

marsh cedar
red torrent
unborn wedge
#

et en effet pour l'avoir fait quelque temps avec l'api Vinted, tu risques aussi d'autres petits soucis

#

Et c'est pas du "reverse" c'est du scrapping déjà

#

et scrap et rediriger le contenu d'une API privée ça s'appelle bel et bien du vol.

main badger
#

j'ai pas lu tt la conv, mais l'étude d'un logiciel n'est pas illégale

#

part contre t'as pas le droit de l'utiliser pour le profit

#

et l'API tierse de Vinted ne devrait pas être illégale car elle est protégée par

#

en particulier l'interopérabilité

#

mais c'est limite quand même

ps: je ne suis pas juriste, faut voir avec des gens qui sont experts pour être sur

plucky nymph
#

Utiliser une API sans documentation n’est pas illégal, ce qui l’est c’est de spam cette API (cas possible en n’utilisant pas l’interface fournie), sinon c’est juste une violation des CGU

C’est le même principe que l’API user de discord, elle n’est pas documentée mais rien ne t’interdit de l’utiliser comme ça, par contre tu risques de te faire ban, et si tu spam ça peut aller plus loin car considéré comme du ddos

#

Et il y a aussi les wrappers open source, les sociétés peuvent te mettre des coups de pression ou faire fermer les dépôts en ligne par les plateformes, car ça donne la possibilité de spam l’API

#

Par exemple Index éducation avait fait supprimé les repos de wrappers API pronote

main badger
#

normalement c'est pas illégale, mais je ne suis plus trop sur parceque c'est un accès non autorisé sur leurs serveurs.
Si c'est justifié avec l'interop ça devrait passer

#

y'a eu des dingueries comme ça dans mon uni

#

et l'admin n'a rien pu faire car c'est protégé par la loi

#

par ça

plucky nymph
#

Tant que tu ne sors pas du cadre prévu, ils ne peuvent pas savoir

plush lava
#

on part du principe que c'est illégal car la plupart des gens qui utilisent l'API pirate transgressent des lois (sûrement celles qui ont été citées au dessus). Du coup en règle général on évite d'en parler et d'aider les gens qui veulent l'utiliser, car on ne connait pas leur réelles intentions

glass cargo
glass cargo
plucky nymph
plush lava
#

sauf que comme l'a dit nolhan, c'est pas ToS friendly

plucky nymph
#

je parlais hors contexte

#

tu ne peux pas dire "car on ne connait pas leur réelles intentions", car si tu suis cette logique tu n'aides personne, ou tu forces les gens à dire ce qu'ils comptent faire, et le vérifier ^^

plush lava
#

je vois pas le rapport

plucky nymph
plush lava
#

on parle de bot vinted, qui sont souvent utilisé par des gens malintentionné

plucky nymph
ancient sonnetBOT
#
Citation du message de derpinou posté dans #javascript-typescript

quoteStart je parlais hors contexte quoteEnd

➜ [Voir le message original](#javascript-typescript message)

glass cargo
plush lava
#

sauf que tu peux pas omettre le contexte là

#

ma réponse était dans ce contexte précis

glass cargo
#

"extraire des données" que tu le fasse via l’API ou via le site c’est la même finalité

plucky nymph
#

copier coller un texte sur un site c'est extraire des données

plush lava
#

C'est du data scraping, ça revient à la même au final

plucky nymph
#

donc copier coller est interdit

plush lava
#

mais ta tout mélangé là

plucky nymph
#

j'le fais ou pas ?

#

non je rigole, j'avais juste envie de contredire KaPOP

queen ocean
plucky nymph
keen narwhal
#

Environnement : Node.JS
Module : Discord.JS

Bonjour , j'aurais une question est t'il possible de faire un sorte que dans toute mes commandes etc si il a un embed mais qu'il y a pas de footer alors le footer sera un footer que j'aurais défini

unkempt sun
#

Qu’est-ce que tu entends par la ? Le footer n’est pas obligatoire, tu peux simplement ne pas en définir

cursive sail
unborn wedge
#

j'imagine qu'il parle d'un footer préfait en mode 2025 - MonServeurbizarre.com mais ne le définir qu'une seule fois, donc oui c'est possible soit tu fais une const ou si il est voué à changer peut-être penser à le stocker

#

et après tu appelles cette constance

keen narwhal
unkempt sun
#

Je regarde dans 10mn

keen narwhal
unkempt sun
#

Comme ça j’aurai fait une classe pour la création d’embed plutôt que celle par défaut

#

Et j’aurais mis une valeur par défaut au footer si il est nul

cursive sail
# keen narwhal
const { EmbedBuilder } = require('discord.js');
const config = require('./config.json');

function addDefaultFooter(embed) {

  if (!embed.data.footer) {
    embed.setFooter({ 
      text: config.defaultFooterText || '𝙿alma Bot', 
      iconURL: config.footerIconURL 
    });
  }
  return embed;
}

module.exports = { addDefaultFooter };

--

const { addDefaultFooter } = require('../vers/le/fichier/avec/la/fonction/embedUtils');

const embed = (page) => {
  const embed = new EmbedBuilder()
    .setTitle('Liste des Bots')
    .setDescription(pageContent)
    .setColor(config.color)
    .setTimestamp();

  return addDefaultFooter(embed);
};

Essai un truc comme ça

keen narwhal
cursive sail
#
module.exports = (client) => {
  client.on('embedCreate', (embed) => {
    if (!embed.data.footer) {
      embed.setFooter({ 
        text: config.defaultFooterText || '𝙿alma Bot', 
        iconURL: config.footerIconURL 
      });
    }
  });
};
#

Tu peux essayer un truc comme ça

#

Mais pas sûr que ça fonctionne, faut tester

keen narwhal
#

J'ai un soucis avec ma commande giveway quand je selectionne le salon ça me dit "Salon invalide! Mentionnez un salon."

graceful sonnet
# keen narwhal J'ai un soucis avec ma commande giveway quand je selectionne le salon ça me dit ...

Yo cette parti :

case 'channel':
  const channel = message.mentions.channels.first();
  if (!channel) {
    return interaction.followUp({
      content: 'Salon invalide! Mentionnez un salon.',
      ephemeral: true
    });
  }
  giveawayData.channel = channel;
  embed.data.fields[2].value = channel.toString();
  break;

Tente de la modifié comme ça :

case 'channel':
  const mentionedChannel = message.mentions.channels.first();
  if (!mentionedChannel || mentionedChannel.type !== 'GUILD_TEXT') {
    return interaction.followUp({
      content: 'Salon invalide! Mentionnez un salon textuel valide (#salon).',
      ephemeral: true
    });
  }
  giveawayData.channel = mentionedChannel;
  embed.data.fields[2].value = mentionedChannel.toString();
  break;
ocean bluff
urban sage
#

normalement quznd tu essaye d’envoyer une requete en djs

#

tu peux lintercepter

#

et donc la modifier

#

ya un évent spécial pour ça

worthy stone
#

Salut alors j'ai installer un template avec **vite ** en local host avec npm run dev sa marche très bien mais sur mon site en host je n'y arrive pas sa fait 2h que je galère quelqu'un peux m'aider svp ?

plucky nymph
#

Il me semble que lorsque tu démarre l’app sur ta machine distante tu dois préciser le port (et peut être l’adresse ip à avoir)

#

Ou alors ça a changé depuis

fierce grotto
#

sinon build puis preview

plucky nymph
#

J’ai toujours cru qu’il fallait faire le node .output/truc.js avec les variables d’env en mode pas propre

fierce grotto
worthy stone
fierce grotto
#

mais oui normalement quand tu npm run build tu dois déployer le résultat dist ou output

plucky nymph
#

Ou alors reverse proxy 🤔

fierce grotto
#

Perso reverse proxy pour tous mais j'ai un doute sur le fait que la preview de vite expose automatiquement

#

je sais que nuxt expose automatiquement la preview sur http://[::]

worthy stone
fierce grotto
#

pour faire vraiment très gros comme explication

#

donc normal que tu n'aies plus tes .tsx, tout a été retranscrit en js minifier (si je dis pas de connerie)

#

donc si tu npm run build utilise la commande npm run preview (si tu n'a pas la commande dans ton package.json) la cmd vite : vite preview

plucky nymph
fierce grotto
#

après c'est une preview de la production comme j'ai dit

plucky nymph
#

Partager*

worthy stone
# fierce grotto en gros le build ça compile ton projet

Donc si j'ai bein compris en local il faut juste faire npm run dev pr avoir la preview maissi c'est en web ( host ) il faut faire
npm run dev --host mais si tu veux utiliser ton site ne production tu fait le build et tu mais sa seul et le reste on en a pas besoin; c'est sa ?

fierce grotto
# plucky nymph Tu peux me montrer ton process de dev et de mise en prod avec une app nuxt ?

Bas comme à peu près tout le monde je suppose (exemple pour mon site backend en Nest):

npx create-nuxt-app
npm run dev (pour tous les test locaux / développement ect)

arch:
assets/ (contiens mes assets css)
public/ (contiens mes assets img de base, robots.txt, sitemap...)
pages/ (contiens toutes les pages de l'app (slugs/id)
composable/ (contiens ma logique d'intégration restAPI) (useUser / useProject...)
components/ (contiens tous les composants de l'app (séparer en layout / ui (composant par page & shared))
middleware/ (contiens mes middlewares clients (vérification du rôle / l'authentification avant l'accès à une page...)

puis pour la prod actuelle :

npm run build
npm run preview ou node .output/server/index.mjs (dépend de si c'est un MVP que je lance)

puis reverse proxy pour link mon domaine à l'adresse de l'app

#

Ah j'ai oublié j'ai un layouts aussi

keen narwhal
#

Pourquoi je ne peux pas installer dotenv? (sur mes autres projets je l'ai)

compact shoal
charred timber
compact shoal
charred timber
#

|| C'était une blague hein ||

compact shoal
#

Il y a une odeur de tempban

compact shoal
charred timber
#

Et je sais toujours pas si je vais être ban

#

J'vais relire le règlement en attendant

compact shoal
charred timber
compact shoal
gusty coral
#


module.exports = {
    name: 'setup_auto',
    description: 'Allows you to easily configure the bot',
    type: ApplicationCommandType.ChatInput,
    execute: async (client, interaction, args) => {

        interaction.reply('Allows you to easily configure the bot');
    }
};
#

comment je peux faire pour que ma commande accepte setup auto

#

sans que ça crash

#

car j'ai l'erreur:

      throw new DiscordAPIError(data, "code" in data ? data.code : data.error, status, method, url, requestData);
            ^

DiscordAPIError[50035]: Invalid Form Body
2.name[STRING_TYPE_REGEX]: String value did not match validation regex.
    at handleErrors (D:\project\ticket-bot\node_modules\@discordjs\rest\dist\index.js:727:13)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async SequentialHandler.runRequest (D:\project\ticket-bot\node_modules\@discordjs\rest\dist\index.js:1128:23)
    at async SequentialHandler.queueRequest (D:\project\ticket-bot\node_modules\@discordjs\rest\dist\index.js:959:14)
    at async _REST.request (D:\project\ticket-bot\node_modules\@discordjs\rest\dist\index.js:1272:22)
    at async ApplicationCommandManager.set (D:\project\ticket-bot\node_modules\discord.js\src\managers\ApplicationCommandManager.js:171:18)
    at async Timeout._onTimeout (D:\project\ticket-bot\src\handler\loadCommands.js:28:13) {
  requestBody: {
    files: undefined,
    json: 
      {
        name: 'setup auto',
        name_localizations: undefined,
        description: 'Allows you to easily configure the bot',
        nsfw: undefined,
        description_localizations: undefined,
        type: 1,
        options: undefined,
        default_member_permissions: undefined,
        dm_permission: undefined,
        integration_types: undefined,
        contexts: undefined
      }
    ]
  },
  rawError: {
    message: 'Invalid Form Body',
    code: 50035,
    errors: {
      '2': { name: { _errors: [ [Object] ] } }
    }
  },
  code: 50035,
  status: 400,
  method: 'PUT',
  url: 'https://discord.com/api/v10/applications/1334771494881984512/commands'
}
glass cargo
#

Tu peux pas mettre d'espaces dans le nom d'une commande

gusty coral
#

pourtant j'ai vu des bot avec

glass cargo
#

Nop

gusty coral
glass cargo
#

Ce sont des sous-commandes. C'est pas pareil

gusty coral
#

comment ça ?

glass cargo
#

C'est la commande /setup qui a des sous commandes limit, transcripts, etc

gusty coral
#

comment je peux réaliser donc ça ?

glass cargo
gusty coral
#

possible d'avoir un repo github directement avec l'exemple ?

glass cargo
#

Tu scroll un petit peu et t'as les exemples

#

C'est fou de juste vouloir copier coller bêtement sans même lire un peu de docs...

glass cargo
# gusty coral le rapport ?

Y'a que t'as même pris le temps de regarder ce que je t'ai envoyé que tu demande un truc tout fait que tu peux copier coller....

gusty coral
#

j'ai pas dis que j'allais pas regarder ?

#

un exemple github ça me permet de mieux visualiser la structure

glass cargo
pearl stone
#

t’as directement tout dans la doucementation, comment l’utiliser, et l’exemple ? que vient faire github ici ? mise à part que tu veux juste copier ? et même pas faire d’effort de ton coter ? 🤦🏼‍♂️

#

la personne qui t’expliquer ta littéralement donner la "base" juste à toi de creuser un petit peu

compact shoal
compact shoal
gusty coral
gusty coral
#

en mode tu regarde jamais un code déjà existant quand ta la flemme de lire une doc avec 47 trucs différents ?

#

smehli le 1337 hein

sinful solar
sinful solar
#

😹

pearl stone
#

en quoi regarder un code github peut t’apprendre ?

gusty coral
pearl stone
#

nn

#

c’est tjr mieux de regarder la doc réfléchis

#

tu va pas regarder un truc que tu comprends pas ??

#

😭

gusty coral
#

donc jamais regarder de code github pour comprendre comment il fonctionne ?

pearl stone
#

mais avant tu regardes la doc

#

ou en même temps limite

gusty coral
sinful solar
pearl stone
gusty coral
#

mais je vois pas trop le rapport avec moi

pearl stone
#

les bases en question

#

t’as les bases mais t’as la flemme de regarder une doc

#

faut m’expliquer

#

t’as appris a "dev" sur snap ?

gusty coral
#

j'suis censé chouiner ?

sinful solar
#

MDR

sinful solar
#

l'odeur du mec

#

pitié

pearl stone
#

j’ai dev le bot gen pour un mec ?

#

t’as jamais eu de client ?

gusty coral
#

sacré mec alors

pearl stone
#

😭

#

et jvois pas le rapport, on me demande de faire un code j’le fais

gusty coral
#

et surout des projets légal 😄

#

mais vas-y

#

reste dans le dénis stp

pearl stone
#

att att t’essaye dme faire la ?

gusty coral
#

kiffant

pearl stone
#

alors que tu ne sais même pas lire une erreur ??

gusty coral
gusty coral
pearl stone
#

c’est l’hôpital qui ce fou de la charité là 🤣

gusty coral
#

AHAHAHAHHAHAHAA

#

JE DEV JAMAIS DE BOT DISCORD

#

JE SUIS PAS CENSE TOUT SAVOIR HYN

#

😭

pearl stone
#

🤦🏼‍♂️🤦🏼‍♂️

#

t’as essayé de dev sans même regarder la doc 😱😱

gusty coral
#

heureusement qu'on est sur un serveur "entraide"

pearl stone
gusty coral
#

^^

gusty coral
# pearl stone donc ?

donc premièrement évite de juger, et ensuite si t'es pas content tu peux aussi partir

#

😄

sinful solar
#

quand tu vois 1337

#

tu comprend vite

#

bon aller les enfants

pearl stone
#

mais jvois pas le rapport 🤣

sinful solar
#

j'ai du C à opti moi

pearl stone
#

wtf

pearl stone
sinful solar
#

oui oui

#

va faire du js

#

comme tout les mec sans personnalité

pearl stone
#

🤣🤣

sinful solar
#

et retourne faire des selfbot

#

au passage

pearl stone
#

c un langage comme un autre wtf

#

mr fait du C il ce sent plus 😱😱

sinful solar
#

j'fais pas que du C

#

mais oui c'est un mérite

#

et moi je passe pas par une IA 🙂

#

ton code il est vrm bancale

#

j'pose ça ici

sinful solar
#

^^

pearl stone
#

🤣🤣

#

ça juge sur un "code" hallucinant

gusty coral
#

le mec n'a jamais dev autre chose que de sb ou de bot

#

faut pas trop lui en vouloir

#

😄

pearl stone
gusty coral
#

🤓☝🏽

pearl stone
#

c vrai que jvais leak tt mes projets 🤓☝🏽

#

très ingénieux

gusty coral
#

d'ailleurs les rich precense sur discord

#

sont interdite

pearl stone
#

🤣🤣?

#

vrmt pas

sinful solar
#

relis les TOS

#

l'utilisation de Client sont interdite

#

ta carrément enlever

pearl stone
#

pourquoi discord mettrait en avant quelque chose d’interdit ?

#

🤔

gusty coral
weary torrent
#

Pas tout lu mais j’ai rarement vu des propos aussi stupides concernant le dev mdr

glass cargo
#

L'app émet juste une rich prensence comme le ferait un jeu ou n'importe quoi. Rien d'interdit jusque là 🤷‍♂️

glass cargo
#

Redescends, jsuis pas là pour te défendre

pearl stone
#

juste tu relis mes faits

gusty coral
glass cargo
#

Nop

gusty coral
#

je parle pas de euro truck

glass cargo
#

Ton client discord reçoit via le websocket les données

gusty coral
#

il avait une rich crunchyroll

#

^^

glass cargo
#

C'est comme ça que fonctionne la rich presence

gusty coral
#

ou un truc dans le style

glass cargo
gusty coral
glass cargo
gusty coral
glass cargo
#

Dans mon cas, j'ai un ptit tool rust & une extension webstorm

gusty coral
#

c'est load par quoi..

#

mais je parle pas de ça ?

#

il avais une rich par rapport à un site de streaming

#

hors discord n'ont jamais implementé ce gerne de rich..

#

mise à part pour spotify

glass cargo
#

ça peut être intégré à crunchyroll comme ça peut être un tool externe

#

Rien d'anormal à ça

#

J'ai exactement la même chose avec Jellyfin :

pearl stone
#

ct anime sala

plucky nymph
pearl stone
plucky nymph
pearl stone
#

🦧🦧

#

ça fais bcp deja

plucky nymph
#

Ouais mais jsp quoi mettre

pearl stone
#

met ta tête 🥰🥰

plucky nymph
#

C’est trop simple

gusty coral
plucky nymph
#

Sur les exemples de code oui et non

#

Tout ce qui est shardingManager avec DJs je sais pas si ça a changé

#

Tout ce qui est internal Sharding ça marche encore

gusty coral
#

j'irais voir

#

merci qd mm

charred timber
mighty fossil
#

Hola, vous savez s'il est possible de lancer une activité discord à partir d'un bot discord ?
Une activité déjà sur discord, elle n'est pas développé pour l'occasion.

clear elbow
#

Bonjour, est ce que quelqu'un pourrais m'aider ? Le probleme c'est que j'ai une OAuth2 discord sur mon site web nextjs à l'aide de Nextauth, mais je n'arrive pas a gérer le cas ou l'utilisateur clique sur le bouton annuler, la ça me redirige vers http://localhost:3000/api/auth/signin?error=Callback et je ne sais pas comment faire poru juste me rediriger juste vers / a la place. Merci de votre aide !

cold moth
#

je ne sais pas si tu utilises le routeur next mais si oui c'est juste redirect('/')

#

Sinon res.redirect('/') avec express

clear elbow
cold moth
clear elbow
cold moth
clear elbow
#
import NextAuth, {
  type NextAuthOptions,
  type Session,
  type User,
} from "next-auth";
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import DiscordProvider from "next-auth/providers/discord";

import { prisma } from "@/lib/prisma";

export const authOptions: NextAuthOptions = {
  providers: [
    DiscordProvider({
      clientId: process.env.DISCORD_CLIENT_ID as string,
      clientSecret: process.env.DISCORD_CLIENT_SECRET as string,
      authorization: {
        params: {
          scope: "identify guilds",
        },
      },
    }),
  ],
  callbacks: {
    session: async ({ session, user }: { session: Session; user: User }) => {
      return {
        ...session,
        user: {
          ...session.user,
          id: user.id,
        },
      };
    },
  },
  adapter: PrismaAdapter(prisma),
  secret: process.env.NEXTAUTH_SECRET,
};

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };
#
"use client";

import { AppSidebar } from "@/components/sidebar/app-sidebar";
import { SidebarProvider, SidebarInset } from "@/components/ui/sidebar";
import { useSession, signIn } from "next-auth/react";
import { useEffect } from "react";
import { LoaderCircle } from "lucide-react";
import type React from "react";

export default function DashboardLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  const { data: session, status } = useSession();

  useEffect(() => {
    if (status === "unauthenticated") {
      signIn("discord", { callbackUrl: "/dashboard" });
    }
  }, [status]);

  if (status === "loading" || !session) {
    return (
      <div className="flex items-center justify-center min-h-screen bg-background">
        <LoaderCircle
          size={48}
          className="animate-spin text-primary"
          aria-label="Chargement..."
        />
      </div>
    );
  }

  return (
    <SidebarProvider defaultOpen={true}>
      <AppSidebar />
      <SidebarInset>
        <main>{children}</main>
      </SidebarInset>
    </SidebarProvider>
  );
}
#

Voila cest le code en entier qui est fonctionnel mais qui gére pas le retour dans le Oauth2 en gros

fierce plank
#

@clear elbow Tu as lu la doc nextauth ?

gusty coral
fierce plank
# gusty coral apparemment non

on est bien d'accord que ca route n'est pas /api/auth/nextauth mais /api/auth/..route par exemple pour nextauth si je ne me trompe pas le signIn error en cas de cancel /api/auth/signin?error=Callback

gusty coral
#

mais surtout pourquoi ps utiliser express

#

c’est beaucoup plus rapide pour ce gerne d’api

#

fin c’est mon choix mais je trouve expressjs mieux

fierce plank
#

et je crois que la solution pour redirect en cas de cancel de l'auth c est dans ton nextConfig

 pages: {
    signIn: '/auth/login',
  },
fierce plank
#

perso je bosse avec nextauth ou clerk ca depends des projets et par fois lucia

#

puis bon si tu fouilles un peu c est litteralement dans le code de nextauth voila ce que fait l'api en cas de cancel de l'auth

if (error.name === "OAuthCallbackError") {
        logger.error("CALLBACK_OAUTH_ERROR", error)
        return res.redirect(`${baseUrl}${basePath}/error?error=OAuthCallback`)
      }
      logger.error("OAUTH_CALLBACK_ERROR", error)
      return res.redirect(`${baseUrl}${basePath}/error?error=Callback`)
gusty coral
#

pour pratiquement tout mes projet

fierce plank
#

Apres chacun ca stack :)

clear elbow
#

J'ai lu la doc et j'ai capté ça, mais le truc c'est que je ne créer pas de page /auth/signin car lorsque j'appel signIn je met direct discord en parametre et donc ça lance direct l'Oauth : onClick={() => signIn("discord")}.

C'est pour ça que je cherche une solution pour gérer cette erreur, ou meme les autres erreurs, sans devoir créer de fichier /auth/signin

fierce plank
#

oui nan mais ca ok, tout ce que tu as a faire c est dans pages met /

#

et essaye

#

Mais perso ma stack c est nextjs prisma nextauth resend

#

apres le reste genre zod et tout ca mais c est des classiques

gusty coral
fierce plank
clear elbow
fierce plank
#

xD

red torrent
gusty coral
#

quelqu'un à une idée de l'erreur ?

fierce plank
gusty coral
gusty coral
dire latch
gusty coral
#

bah déjà ne pas utiliser chatGPT quand il existe une doc c'est bien aussi

#

et ensuite il suffit de lire ton erreur pour comprendre que db.fetch n'est pas une fonction 🙂

pure tiger
plucky nymph
#

Utiliser express en 2025 harold

plush lava
#

express c'est bien pour simuler (dummy data), ou pour des projets super léger ou juste pour apprendre 🤷

fierce plank
gusty coral
past nimbus
plucky nymph
#

À côté t’as fastify qui s’utilise quasiment pareil et qui fait bien mieux KaPOP

past nimbus
#

Pareil il a dit ?

plucky nymph
#

Non

past nimbus
#

Effectivement pour faire une api vide, fastify est très bien 👍

plucky nymph
#

Au moins c’est performant KappaCringe

gusty coral
#

mais wtf

#

mdrrrr

gusty coral
#

Il faudrait que j’essaye

#

j’ai toujours utilisé express

plucky nymph
#

@past nimbus tu utilises quoi alors ?

gusty coral
#

j’ai jamais eu de problème de perf

#

pourtant j’avais un projet avec 100k visiteurs par mois

plucky nymph
gusty coral
#

et des call d’api

#

tout le temps

#

et j’ai jamais eu un seul problème

gusty coral
plucky nymph
plucky nymph
#

« Moyenne »

gusty coral
#

bah voilà

pure tiger
gusty coral
#

express long?

#

en vrai, je vais quand même essayer nextauth

plucky nymph
# gusty coral express long?

Par rapport à un truc déjà tout fait je pense qu’il veut dire, mais généralement quand tu fais plusieurs fois ce genre de projets tu te fais tes propres « packages » perso donc ça revient au même qu’utiliser next auth ou autre

compact shoal
#

C'est possible Un robot discord qui crée des postes sur des forums à chaque fois qu'on reçoit un email, une réponse à un formulaire sur un site web ou un signalement sur un site web et aussi qui peut bannir les utilisateurs supprimer du contenu sur un site web (par exemple, une vidéo) ?

fierce grotto
#

suffit juste d'avoir des call restAPI ou alors d'être sur la même db entre ton site & ton bot

compact shoal
wet temple
#

Pour le coup un projet qui va avoir 100 000 utilisateurs par mois, entre express et nest lequel est le plus intéressant ? Ou alors on peux choisir entre fonction de nos préférence

plucky nymph
#

et c'est pas vraiment comparable au niveau du dev, d'un coté tu as quelque chose de très strict et ordonné, d'un autre tu es relativement libre de faire ce que tu veux

#

et honnêtement, pour choisir le meilleur, vaut mieux un peu tout tester et te faire ton propre avis, et surtout réfléchir en fonction de ton besoin, même si il y à 10 000 utilisateurs mensuels, combien il y à de requetes à chaque fois, et qu'es-ce qu'elles sont censées faire

wet temple
plucky nymph
#

je saurais pas te dire, trop peu de recul sur springboot personnellement

#

après tu peux scale pour faire + de traitement à la seconde 🤷‍♂️

keen narwhal
wet temple
keen narwhal
dire latch
#

Hello, comment on peut envoyer un message en interaction + envoyer un modal

Voici mon code:

                case 'changeMessage':
                    const [streamerData] = await BDD.promise().query(
                        "SELECT custommessage FROM streamersnotifications WHERE streamername = ? AND serverid = ?",
                        [selectedStreamer, interaction.guild.id]
                    );
                    const currentMessage = streamerData[0]?.custommessage || "**{streamer}** est maintenant en live sur **{game}** ! {url}";
                    await interaction.update({
                        content: `⚙️ Gestion du streamer → **${selectedStreamer}**\n📝 Message actuel → \`\`\`${currentMessage}\`\`\``
                    });
                    const modal = new ModalBuilder()
                        .setCustomId(`editMessage_${interaction.user.id}_${selectedStreamer}`)
                        .setTitle(":pencil: Modifier le message de notification")
                        .addComponents(
                            new ActionRowBuilder().addComponents(
                                new TextInputBuilder()
                                    .setCustomId("customMessage")
                                    .setLabel("Entrez votre message")
                                    .setStyle(TextInputStyle.Paragraph)
                                    .setPlaceholder("Ex: **{streamer}** est maintenant en live sur **{game}** ! {url}")
                                    .setValue(currentMessage)
                                    .setRequired(true)
                            )
                        );                
                    await interaction.showModal(modal);
                    break;

Car sa me met ce genre d'erreur:

Error [InteractionAlreadyReplied]: The reply to this interaction has already been sent or deferred.

red torrent
# dire latch Hello, comment on peut envoyer un message en interaction + envoyer un modal Voi...

Tu peux pas répondre deux fois à une seule interaction comme ça. Pour ton problème il faut soit envoyer le message et l'embed dans la même réponse soit envoyer la deuxième réponse dans un followup :
https://discord.com/developers/docs/interactions/receiving-and-responding#followup-messages

Discord Developer Portal

Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.

dire latch
red torrent
#

Ah attends je viens de voir que c'est une modale et pas un embed

red torrent
red torrent
dire latch
#

Ah donc impossible du coups ?

red torrent
#

Si c'était possible la modale s'afficherait par dessus le message donc l'utilisateur ne pourrait même pas lire la réponse

dire latch
#

Pg ça

red torrent
# dire latch Pg ça

C'est pas grave pour toi mais du coup tu peux comprendre pourquoi discord n'a pas laissé cette possibilité

plucky nymph
honest forge
#

Y’a besoin d’une refactorisation massive si on passe de Nest (Express) à Nest (Fastify) en config ? @plucky nymph

#

Je suis en train de faire un projet et découvrir un peu Nest que je trouve sympathique

plucky nymph
#

Request devient FastifyRequest (de souvenir)

eternal glade
plucky nymph
#

Peut être que ça a changé pour un truc générique qui s’adapte, mais de mon temps à chaque fois que j’utilisais le @Req() etc fallait que je type avec le type d’express ou fastify

#

Mais sinon tu as un guide dans la doc de nest pour migrer vers fastify

hard mirage
#

📢 Recherche Développeur JavaScript pour

compact shoal
hard mirage
#

Merci

acoustic hazel
#

C’est pas les mêmes langages

plucky nymph
#

La révélation

acoustic hazel
#

Un dev JavaScript pour du minecraft

honest forge
#

Y’a bien des modules pour faire des plugin minecraft en JS

compact shoal
acoustic hazel
#

Enfin on peut tjr faire de la poo en js en soi

acoustic hazel
compact shoal
acoustic hazel
#

j’ai pas hâte j’ai un cours dessus dans quelques mois avec du flutter

#

Ça donne pas envie

compact shoal
#

Et j'arrive pas à trouver de cours pour savoir comment s'en servir de ce truc de ####

#

Si quelqu'un en connaît, je suis preneur

plucky nymph
#

☝️🤓

acoustic hazel
#

Après en comparaison avec java

plucky nymph
#

Juste le nom

vital blaze
compact shoal
#

Après ça va mise à part comment s'en servir avec react leur documentation elle est bien

dark marten
#

bonjour guys j'ai neauveau en javascript et j'acepte l'aide

compact shoal
#

Bonjour, savez-vous comment je peux réparer cette erreur ?
unhandledRejection: TypeError: Cannot read properties of null (reading 'UserID') Promise {
<rejected> TypeError: Cannot read properties of null (reading 'UserID')
at Object.execute (/home/container/events/blacklist/joinban.js:36:14)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
}

plucky nymph
#

machin qui a la propriété UserID est null

#

Donc si tu veux juste pas avoir l’erreur car c’est normal que machin soit null, fait juste un if (machin) { et ton code dedans

#

Sinon essaye de comprendre pourquoi il est null (si c’est depuis une requête vers une bdd, c’est juste que ça retourne pas de données)

compact shoal
dire latch
plucky nymph
plucky nymph
weary torrent
#

C'est qu'il y a surement quelque chose qui n'est pas normal dans ce cas myman

plucky nymph
weary torrent
#

Rolala on rigole

#

Même pas drôle

compact shoal
#

Dcp c'est quoi le problème vous penser

plucky nymph
#

Ta variable qui contient UserID est null donc si ça vient de la bdd c’est que la requête vers cette dernière est foireuse

compact shoal
plucky nymph
#

Mais la il marche plus

#

Après tu peux toujours donner un peu plus de contexte à ton problème, comme par exemple la base de données utilisée, le résultat attendu, le code, etc etc

compact shoal
weary torrent
#

Si t'as accès à la bdd, t'as vérifié que la donnée que tu cherches existe ?

compact shoal
#

const bl = require('../../me-modals/blacklist/blacklisted')
module.exports = {
name: 'guildMemberAdd',
async execute(client, member) {
let DATA = await bl.findOne({UserID: member.id})
if (DATA.UserID) {
member.ban({ reason: DATA.Reason }).catch(e);
}
}
}

compact shoal
weary torrent
plucky nymph
#

Ou juste que la personne qui a rejoint n’est pas celle qui est « blacklist », donc la requête ne retourne rien vu que son ID n’est pas présent dans la base

weary torrent
#

Et maintenant que tu as ajouté if (DATA.UserID) { ... }, il ne devrait plus te sortir d'erreur comme quoi DATA.UserID est null (si tu ne l'utilises pas plus bas sans vérifications)

compact shoal
#

si c good

plucky nymph
#

Avant de vouloir le ban vérifie au moins qu’il soit black list

plucky nymph
ancient sonnetBOT
#
Citation du message de derpinou posté dans #javascript-typescript

quoteStart Ou juste que la personne qui a rejoint n’est pas celle qui est « blacklist », donc la requête ne retourne rien vu que son ID n’est pas présent dans la base quoteEnd

➜ [Voir le message original](#javascript-typescript message)

compact shoal
#

si son id est dans la bd

plucky nymph
#

C’est sur un serveur de test avec que toi, le bot, et la personne concernée ?

compact shoal
plucky nymph
#

Alors console.log ton member.id et compare avec la valeur en base

#

Comme ça tu seras fixé

plucky nymph
#

Au pire tu clique sur le fichier events/blacklist/joinban.js
tu appuie sur la touche suppr du clavier, et tu n’auras plus l’erreur

compact shoal
#

lol

plucky nymph
#

C’est pas censé changer grand chose

compact shoal
#

dcp je peut r faire

plucky nymph
#

Si

#

Il n’y a que des solutions, c’est juste une question de volonté

compact shoal
weary torrent
# compact shoal Quel genre de solution ?

Bah tu fais console.log(member.id), tu regardes si ça colle aux infos que t'as en db et soit ça colle donc le problème c'est pas l'objet member mais c'est ailleurs, soit ça colle pas et le problème vient du fait que member est sûrement undefined

weary torrent
# compact shoal je le met ou ?

Tu devrais faire quelque chose qui ressemble à ça:

const bl = require('../../me-modals/blacklist/blacklisted')

module.exports = {
    name: 'guildMemberAdd',
    async execute(client, member) {
        // Code mis à jour après mon message. Je pense que tu devrais pouvoir retrouver les informations (dont l'id du membre) dans la variable client. Ce qui te permettrait de retirer la variable member et renommer ta variable client member. Mais il faudrait savoir si tu passes d'autres paramètres que member quand l'event est déclenché
        console.log("client : ", client);

        console.log("member : ", member);

        let DATA = await bl.findOne({ UserID: member.id })

        // Éventuellement
        console.log("DATA : ", DATA);

        if (DATA.UserID) {
            member.ban({ reason: DATA.Reason }).catch(e);
        }
    },
};
#

Mais la question qu'on peut déjà se poser, c'est pourquoi est-ce qu'il y a 2 paramètres dans ta fonction execute ? Est-ce que tu passes toi-même client ? Parce que d'après mes connaissances, l'event guildMemberAdd ne renvoie qu'un seul argument qui est de GuildMember

fathom pulsar
#

Ça renvoie ça?

compact shoal
weary torrent
# compact shoal

Essaye avec la nouvelle version du code que je viens de faire dans mon message

weary torrent
#

Je pense que le résultat que t'as correspond à l'objet client vu la tête des clefs. Peut-être un simple switch des paramètres suffirait dans ce cas

compact shoal
weary torrent
#

Bah voilà

#

Problème résolu

#

@compact shoal

compact shoal
weary torrent
#

Logique

#

Mais il faut comprendre ce que tu fais et que tu lis dans les messages d'erreur myman

#

Tu remplaces ça:

async execute(client, member) {

Par ça:

async execute(member, client) {
#

@compact shoal

compact shoal
#

sur lancien code ?

weary torrent
#

Oui

compact shoal
#

ça a rien changé

idle sentinel
#

normalement c'est

if (DATA) {
  member.ban({ reason: DATA.Reason }).catch(e);
}

et non

if (DATA.UserID) {
  member.ban({ reason: DATA.Reason }).catch(e);
}

car DATA trie déjà selon l'id

plucky nymph
idle sentinel
compact shoal
idle sentinel
compact shoal
idle sentinel
#

pas de soucis

vital blaze
#

je cherche des gens qui puissent m'aider en js car quand j'essaye d'ajouter des graphiques dynamiquement, sa marche pas

autumn tendon
#

Salut tout le monde ! Quelqu'un peut me dire comment faire pour que des interactions ne s'expirent pas

#

j'essaye de faire un embed de mise en service/terminer son service en discordjs

#

et j'execute la commande pour l'embed et genre j'attends 2h je peut plus me remettre en service

plucky nymph
#

lorsqu'elles sont defered elles ne sont pas inexpirables ?

queen ocean
queen ocean
autumn tendon
plucky nymph
plucky nymph
#

Il suffit d’envoyer une seule fois le message avec le bouton pour prendre sa fin de service et c’est bon non ?

glass cargo
#

Si tu utilises un collector, tu pourras pas éternellement l’utiliser.

plucky nymph
scarlet iris
#

Salut les gars! J’ai cette erreur quand je vais sur ma page d’accueil (localhost:3000/home) :

    31|     <h1>Genres musicaux</h1>
    32|     <div class="card-container">
 >> 33|         <% genres.forEach(genre => { %> <!-- Itérer à travers les genres -->
    34|             <a href="/playlists/<%= genre %>" class="genre-card">
    35|                 <h3><%= genre %></h3> <!-- Afficher chaque genre -->
    36|             </a>

genres is not defined
    at eval ("C:\\Users\\carre\\OneDrive\\Bureau\\musique\\website\\html\\home.ejs":12:8)
    at home (C:\Users\carre\OneDrive\Bureau\musique\node_modules\ejs\lib\ejs.js:703:17)
    at tryHandleCache (C:\Users\carre\OneDrive\Bureau\musique\node_modules\ejs\lib\ejs.js:274:36)
    at exports.renderFile [as engine] (C:\Users\carre\OneDrive\Bureau\musique\node_modules\ejs\lib\ejs.js:491:10)
    at View.render (C:\Users\carre\OneDrive\Bureau\musique\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\carre\OneDrive\Bureau\musique\node_modules\express\lib\application.js:657:10)
    at Function.render (C:\Users\carre\OneDrive\Bureau\musique\node_modules\express\lib\application.js:609:3)
    at ServerResponse.render (C:\Users\carre\OneDrive\Bureau\musique\node_modules\express\lib\response.js:1049:7)
    at run (C:\Users\carre\OneDrive\Bureau\musique\website\public\home.js:7:13)
    at Layer.handle [as handle_request] (C:\Users\carre\OneDrive\Bureau\musique\node_modules\express\lib\router\layer.js:95:5)```

voici home.ejs
```html
    <div class="card-container">
        <% genres.forEach(genre => { %>
            <a href="/playlists/<%= genre %>" class="genre-card">
                <h3><%= genre %></h3>
            </a>
        <% }) %>
    </div>```

(playlists.js après)

vous devez savoir que j’utilise express.js avec ejs pour créer mon site web.

(J’ai ajouté une image on sait jamais si vous en avez besoin)

merci !
#

voici le playlists.js :

const express = require("express");
const Playlist = require("../schemas/Playlist");
const router = express.Router();

const genres = ["Pop", "Rock", "Hip-Hop", "Jazz", "Classique", "Electro", "Rap"];

router.get("/home", async (req, res) => {
    try {
        console.log("Genres disponibles:", genres);
        const playlists = await Playlist.find({});
        res.render("home", { genres, playlists });
    } catch (err) {
        console.error("Erreur lors de la récupération des playlists:", err);
        res.status(500).send("Erreur interne du serveur");
    }
});

module.exports = router;```
plucky nymph
#

Ah oui non je crois avoir vu !

#

il manquerais pas le = ?

scarlet iris
plucky nymph
#

alors pourquoi tu l'as mis en bas kappa

scarlet iris
#

mais j'ai trouvé mtn ça marche et la je suis sur autre chose qui marche pas non plus...

plucky nymph
scarlet iris
fast dawn
#

je suis perdu

#

la creation de compte bancaire s'affiche pas correctement

sterile ibex
#

Hello, pouvez-vous me donner votre meilleure librairie UI pour react avec tailwind ? J'aimerais pouvoir personnaliser facilement chaque composant

pure tiger
#

ou si tu veux plus de truc radix

fast dawn
#

Hello j'ai pas compris la demande ^^

honest forge
fast dawn
fast dawn
#

Visiblement personne n’est apte à répondre à la questions.. 🤷🏾‍♂️

versed current
fast dawn
#

Mdr

#

Je suis dépasser par les événements

versed current
#

mais sinon demande à GPT

fast dawn
#

Justement il tourne en rond il a pas trouver

frail meteor
#

j'avoue que flemme de me tapper 1700 et 650 lignes

brave cedar
#

salut tout le monde je ne sais pas si c'est le bon canal pour vous demander ça mais j'ai un bot telelgram coder en js et j'aimerai le mettre e automatisation. J'ai payer un serveur et j'ai utilisé WinCP pour mettre le dossier de mon bot sur le serveur. Mais à partir de là je ne sais pas quoi faire. Comment lancer le bot sur le serveur

plucky nymph
#

Ouvrir une connexion ssh au serveur

#

Aller dans le dossier du bot

#

Et lancer le bot, avec la même commande que sur ton pc

#

⚠️ Attention, si tu lances simplement avec « node x.js » depuis ta connexion ssh, lorsque cette dernière sera fermée, le bot s’éteindra, il faudra utiliser un truc comme screen ou pm2 pour le laisser allumé h24/7j

brave cedar
#

oui j'ai utilisé pm2 le probleme c'est uqe mon bot possède un premier code qui contient toute la structure du bot et il y'a un deuxieem fichier qui contient les id des utilisateur. Si ce fichier ne fonctionne le bot ne marche pas

#

et le fichier des id est en json

plucky nymph
#

C’est à ton code js de faire le taff pour lire le json

brave cedar
#

ok je vois ce qui est bizarre c'est quand je lance le bot en local via vs code tout marhe mais quand je lance via le terminal certaine fonctionalité fonctionne mais pas toute

plucky nymph
#

Tu as bien fait npm install ?

brave cedar
#

oui je l'ai fais

plucky nymph
#

Tu as une erreur ?

brave cedar
#

oui

plucky nymph
#

et quelle est cette erreur ?

brave cedar
plucky nymph
#

Il fait quoi le bot ?

brave cedar
#

quand on lui donne un lien il sort des thread

crisp bloom
#

Salut ! Je suis en train actuellement en train de créer un bot discord et je dois lui faire envoyer des embed contenant 3 images récupéré sur google, mais je n'arrive vraiment pas. Si quelqu'un serait ok pour m'aider 🙂

plucky nymph
crisp bloom
#

ça fait comme une combinaison de plusieurs embed en 1 je crois

autumn tendon
#

mais seulement avec un webhook je crois

wary gull
#

Vous pensez que si je fais le navigateur en python avec QtWebChannel, es-ce que ça c'est sécurisé ?

localStorage.setItem("user_email", email);

violet knot
sterile ibex
#

Re, je n'arrive a faire tourner mon container docker du back a cause de se warning :
prisma:warn Prisma failed to detect the libssl/openssl version to use, and may not work as expected. Defaulting to "openssl-1.1.x".
Please manually install OpenSSL via apt-get update -y && apt-get install -y openssl and try installing Prisma again. If you're running Prisma on Docker, add this command to your Dockerfile, or switch to an image that already has OpenSSL installed.

voici mon dockerfile :
FROM node:18-slim AS builder

RUN apt-get update
&& apt-get install -y openssl libssl1.1
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY package*.json ./
COPY prisma ./prisma/

RUN npm install

COPY . .

RUN npm run build

FROM node:18-slim

RUN apt-get update
&& apt-get install -y openssl libssl1.1
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY --from=builder /app /app

EXPOSE 4000

ENV PRISMA_CLI_BINARY_TARGETS=debian-openssl-1.1.x

CMD ["npm", "start"]

keen narwhal
#

Essaye pas en version slim de node

compact shoal
#

Vous pensez quoi comme budget pour un bot qui "capte" chaque publication et chaque modification de profil et pareil pour des postes (et qui peut les supp)?

#

Avec un site firebase

weary torrent
compact shoal
tacit jewel
#

Hello ! J’ai une ptite question je connais pas du tout le JavaScript mais j’aimerais faire ceci en moving pour un bakcground de site et je trouve pas comment faire est ce que quelqu’un peut m’expliquer en détail ??

plucky raven
#

Méthode 1 : Avec CSS (Facile)

Si tu veux un effet simple avec des dégradés animés, utilise CSS keyframes :

body {
    margin: 0;
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background: linear-gradient(45deg, #ff00ff, #ff66ff, #ff99ff);
    background-size: 400% 400%;
    animation: gradientAnimation 8s infinite alternate;
}

@keyframes gradientAnimation {
    0% {
        background-position: 0% 0%;
    }
    100% {
        background-position: 100% 100%;
    }
}

➡️ Explication :

On utilise linear-gradient pour créer un dégradé rose.

L'animation @keyframes fait bouger le fond en changeant sa position.

C'est simple, mais pas aussi fluide qu'un fond en Canvas.

#

Méthode 2 : Avec JavaScript & Canvas (Avancé)

Si tu veux un effet fluide et dynamique, comme un background avec des blobs mouvants, on peut utiliser Canvas :

<canvas id="animatedBackground"></canvas>
<script>
const canvas = document.getElementById("animatedBackground");
const ctx = canvas.getContext("2d");

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

let blobs = [];
const blobCount = 10;

for (let i = 0; i < blobCount; i++) {
    blobs.push({
        x: Math.random() * canvas.width,
        y: Math.random() * canvas.height,
        radius: 60 + Math.random() * 40,
        dx: (Math.random() - 0.5) * 2,
        dy: (Math.random() - 0.5) * 2,
        color: `rgba(255, 0, 255, 0.5)`
    });
}

function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    
    blobs.forEach(blob => {
        ctx.beginPath();
        ctx.arc(blob.x, blob.y, blob.radius, 0, Math.PI * 2);
        ctx.fillStyle = blob.color;
        ctx.fill();
        
        blob.x += blob.dx;
        blob.y += blob.dy;

        if (blob.x - blob.radius < 0 || blob.x + blob.radius > canvas.width) blob.dx *= -1;
        if (blob.y - blob.radius < 0 || blob.y + blob.radius > canvas.height) blob.dy *= -1;
    });

    requestAnimationFrame(animate);
}

animate();
</script>

➡️ Explication :

  1. On crée un <canvas> qui couvre tout l'écran.

  2. On génère des blobs (cercles flous) qui bougent aléatoirement.

  3. On utilise requestAnimationFrame pour animer les blobs.

#

@tacit jewel voilà

tacit jewel
#

Okk je vais voir merci beaucoup !

plucky raven
prime dove
#

Bonjour, j'ai réalisé un code pour faire un formulaire d'ajout de prof ( projet scolaire ) et lors de la modification ça n'update pas mes infos dans la table. Je débute en ajax donc j'ai pu faire une erreur nulle. Sachant que pour mon ajout étudiant tout marche parfaitement

fierce grotto
prime dove
#

j'ai cette erreur la quand j'envoie les données

fierce grotto
#

vas dans network

prime dove
#

mais sur mon autre page j'ai la même erreur avec le dev tool, sans ça , ça va

fierce grotto
#

et tu clique sur la request après dans réponse tu devrait avoir l'erreur en elle même

#

si tu return bien une erreur

prime dove
#

il est où request ?

fierce grotto
fierce grotto
prime dove
#

j'ai que ça

fierce grotto
prime dove
fierce grotto
#

Ah oui mais enfaite t'as une erreur réseau

prime dove
#

c'est à dire ?

fierce grotto
#

c'est à dire que t'as requêtes ajax n'arrive pas a atteindre le serveur

prime dove
#

aaaah

#

ça serrais du à quoi ?

fierce grotto
#

ça peut venir de pas mal de chose mais la je dirait plutôt une erreur dans les url ajax

prime dove
#

genre ça : url: "ajax/recup_enseignant.php",

fierce grotto
#

oui vérifie que le fichier soit bien accessible à l'emplacement ajax/recup_enseignant.php

prime dove
#

je les ai tous modifier et rien

#

d'après mon prof il n'arrive pas à accéder a la bibliothèque Jquery

fierce grotto
#

oui possible dans la console t'as des erreurs jquery ?

red torrent
#

Salut, quelqu'un saurait si c'est possible de retourner la valeur dynamiquement en React dans useReferentialProvidedContext plutôt que de devoir modifier ce hook à chaque fois que j'ajoute une entité à mon projet ?

useReferentialForManagedEntity étant un hook, React ne me laisse pas l'utiliser dans une boucle

fierce grotto
red torrent
# fierce grotto Salut, tu peux créer un objet qui mappe tes clés d'entités avec leurs valeurs co...

Bah écoute c'est ce que je viens de faire et je vois que react ne me met pas d'erreur. Pourtant je suis persuadé que la dernière fois que j'ai essayé quelque-chose de similaire j'ai eu une erreur de React me disant que je ne devais pas appeler des hooks dans une boucle et ça me causait des rerendus en boucles)

const useReferentialProvidedContext = <TEntity extends Entity>(): ReferentialContext => {
  const { managedEntity } = useManagedEntity<TEntity>();

  const referential: Partial<ReferentialContext> = {};

  for (const key in entityManager.map) {
    referential[key] = useReferentialForManagedEntity(managedEntity, entityManager.map[key]);
  }

  return referential;
}
#

ah mais je crois que la dernière fois que j'avais essayé sans succès j'avais mémorisé mon objet

#

C'est bien ça, c'est parce-qu'il ne faut pas mémoriser les appels à des hooks.

const useReferentialProvidedContext = <TEntity extends Entity>(): ReferentialContext => {
  const { managedEntity } = useManagedEntity<TEntity>();

  const referential: ReferentialContext = useMemo(() => {
    const result: ReferentialContext = {};
    for (const key in entityManager.map) {
      result[key] = useReferentialForManagedEntity(managedEntity, entityManager.map[key]);
    }
    return result;
  }, [managedEntity, entityManager.map]);

  return referential;
}
fierce grotto
# red torrent C'est bien ça, c'est parce-qu'il ne faut pas mémoriser les appels à des hooks. ...

L'erreur vient du fait que les hooks ne peuvent pas être appelés à l'intérieur de boucles ou de conditions ils doivent être appelés directement au niveau supérieur de la fonction

donc par exemple :

const useReferentialProvidedContext = () => {
  const { managedEntity } = useManagedEntity();

  const buyers = useReferentialForManagedEntity(managedEntity, entityManager.map.buyers);
  const buyerSiret = useReferentialForManagedEntity(managedEntity, entityManager.map.buyerSiret);

  return useMemo(() => ({
    buyers,
    buyerSiret,
  }), [managedEntity, buyers, buyerSiret]);
};
red torrent
#

J'avoue que je suis très programmation orientée objet donc les hooks me semblent pas très intuitifs. Je pense que c'est principalement parce-que je n'arrive pas à comprendre comment React fait pour savoir si un composant doit être rerendu à partir du contenu de la fonction de ce composant lui-même

red torrent
# fierce grotto L'erreur vient du fait que les hooks ne peuvent pas être appelés à l'intérieur d...

Ca fonctionne comme ça donc c'est bon :

const useReferentialProvidedContext = <TEntity extends Entity>(): ReferentialContext => {
  const { managedEntity } = useManagedEntity<TEntity>();

  const referential: ReferentialContext = {};

  for (const key in entityManager.map) {
    if (!managedEntity.isReferentialRequired(key)) continue;
    referential[key] = useReferentialForManagedEntity(managedEntity, entityManager.map[key], true);
  }

  return referential;
}
prime dove
#

on a directement installer la bibliothèque, mais ça na rien changer

#

faut voir avec le code

prime dove
#

update : mon code de recup de donnée ne prenais pas l'id du coup modif n'avais pas l'id pour modifier

leaden prism
#

hello, je suis en train d'essayer de faire une api pour mon jeu. Cependant, unity n'accepte pas les requettes en http. Comment est ce que je pourrait faire pour la faire passer en https??
(j'utilise express)

plucky nymph
#

Utiliser un certificat SSL 🤷‍♂️

#

Si t’es en local tu l’auto signe et basta

#

Si non, tu fais un certificat propre

leaden prism
#

j'ai déjà un certificat ssl que j'ai pour mon site perso et j'essaye de l'utiliser pour l'api mais j'y arrive pas

#

j'ai ajouté ca dans ma config nginx

delicate torrent
#

Il faut refaire "la demande" pour un certificat SSL pour ton API

leaden prism
#

Même si c'est sur le même domaine ??

delicate torrent
#

Oui

#

Attend

leaden prism
#

Ok thx j'essaye dès que je suis chez moi

delicate torrent
leaden prism
#

Nope

#

Mais je peux le faire au pire

delicate torrent
leaden prism
#

oep c'est ce que j'ai fait et c'est vrai que maintenant que j'y réfléchit c'était pas terrible 😂

#

(dcp ca fonctionne merci pour l'aide)

delicate torrent
#

Avec plaisir

elder scaffold
#

note que letsencrypt permet aussi de créer un certificat wilcard

red torrent
leaden prism
#

ah ok merci

lime solar
#

👋 Je suis entrain d'apprendre comment utiliser le framework expressjs et j'aimerais savoir comment je pourrais faire en sorte que les fichiers css marchent j'ai tout essayer mais j'y arrive pas 😭

plucky nymph
lime solar
#

attends j'te montre

plucky nymph
#

Tu arrives à get leur contenu depuis ton navigateur ?

plucky nymph
#

Ah

#

Et depuis ton onglet réseau sur ton navigateur, quand tu appelle ta page web, il y a une erreur à propos du css ?

lime solar
#

j'ai pas vérifier j'regarde

#

oui y a une erreur 404

#

ah bah j'ai régler le problème en modifiant la ligne pour importer le css

#

merci

plucky nymph
autumn tendon
#

Bonsoir à tous, j'essaye de faire une activity discord mais je passe par un tunnel cloudflare, et quand je met le lien cloudflare sur discord, je voit ça :

#

dans la config vite, j'ai donc rajouté ça :

    allowedHosts: [
      /.*\.trycloudflare\.com$/,
    ],

pour accepter tout les host .trycloudflare.com mais ça ne marche toujours pas

#

si quelqu'un a déjà eu le meme problème

glass cargo
#

Je doute que allowedHosts prenne des regex

#

Je confirme, tu ne peux mettre que des strings

autumn tendon
glass cargo
#

Ouais

#

Et donc de le modifier à chaque fois que tu relances le tunnel

#

Sinon tu mets sur true comme ça plus de problèmes ^^

autumn tendon
glass cargo
#

Sans array non plus

#

Look mon screenshot

autumn tendon
#

ah yes

#

merci

#

ça marche nickel

torn fog
#

À merde on te l'avais déjà dit my bad

autumn tendon
sterile ibex
#

Hello petite question avec ReatJS, pour la navigation router que me conseillez vous ? De meme pour l'authentification et une lib UI svp ?

oak turret
fierce grotto
weary torrent
#

Et avec TailwindCSS, tu peux trouver énormément de components pré-fabriqués sur internet. Tu peux regarder chez https://ui.shadcn.com notamment

#

Et en plus de ce qu'a proposé Yuketsu, il y a aussi https://mantine.dev que j'aime bien utiliser dans certains projets

sterile ibex
weary torrent
weary torrent
# sterile ibex et avec shadcn ?

Oui, tu peux lire la documentation et les components qu'ils proposent, tout les styles sont écrits avec tailwind et c'est très facile de les override

#

Les components ont un style par défaut que tu peux directement modifié dans le component, et sinon, tout ce que tu passes dans le className de ton component va override le style de base de ce dernier