#javascript-typescript

1 messages · Page 18 of 1

fleet scaffold
#

De toute manière ont peut identifier un message vocale avec la duration

#

et ça c'est pas négligeable

crude bramble
#

bonjour à tous j'ai un petit soucis avec mon code et je comprends pas cette erreur

#

voici mon code

drowsy ocean
# crude bramble

L'erreur est plutot simple a comprendre, tu assigne un ActionRowBuilder<AnyComponentBuilder> a un ActionRowComponent

#

Ici il ne connais pas le type de ton component

crude bramble
#

pourtant si tu te fie aux guides c'est bien comme ça

#

j'ai bien essayé ceci mais toujours une erreur

drowsy ocean
crude bramble
#

non plus de micro dans l'immédiat

drowsy ocean
#

Ah ok, essaye d'enlever le tiret dans le customid

crude bramble
#

ça change rien

#

je te laisse quand même mon fichier de definition au cas ou mais je pense pas que ça vienne de la

crude bramble
#

pfff c'était tellement simple 😅

crude bramble
#

selon un post de stackOverflow il serais possible qu'un bot prenne comme avatar l'avatar du serv sur lequel il se trouve

#

du coup je cherche à pouvoir faire ça à l'arrivé mais aussi à l'update de l'avatar du serveur

#

je vois pas comment faire ça dans guild en fait

#

guildCreate

keen gust
#

C'est juste impossible sur plusieurs serveurs

crude bramble
#

hum 🤔 je parle de cet article

keen gust
#

Et ?? Ça reste impossible sur plusieurs serveurs

crude bramble
#

c'est pourtant pas ce qu'ils en disent à moins que la traduction google me mette en erreur 😉

keen gust
#

Quelle traduction ? La réponse c'est juste du code, qui fonctionnera sur un seul serveur, mais plusieurs, non

crude bramble
#

je parle pas anglais donc j'ai traduit

keen gust
#

Car ton bot a un avatar global, s'il change à chaque fois que x serveur a un avatar, ça va être le joyeux bordel

crude bramble
#

via google

keen gust
#

D'autant plus qu'un bot est censé être aussi reconnaissable avec sa photo de profil

crude bramble
#

c'est la demainde initiale du post que l'avar du bot change sur le serveur ou il se trouve

#

d'ou ma question après si c'est pas possible

keen gust
#

S'il a reçu une réponse positive alors ça me paraît pas déconnant que ça marche

#

Mais comme je l'ai déjà dit, lui il parle d'un bot privé (et encore, 75 serveurs, bonjour le wtf), mais ça va vite devenir le bordel

crude bramble
#
import discord
from discord.ext import commands


bot = commands.Bot(YOUR_TOKEN_HERE)


@bot.event
async def on_guild_update(before: discord.Guild, after: discord.Guild):
    if before.icon != after.icon:
        await bot.user.edit(avatar=YOUR_URL_HERE)
#

il est pourtant bien question de guild

keen gust
#

???' Quel est le rapport ?

#

J'ai dit le contraire ?

crude bramble
#

ah oui mais j'ai pas tout lu moi aussi lol

#

en fait si un servuer change son avatar ça se répercute sur tous les serveurs sur lequel le bot se trouve

#

autant pour moi et là oui je rejoint ta réaction

#

c'est juste dommage qu'ont ne puisse pas modifier l'avatar du bot sur tel serveur comme out peut le faire avec son nom

crude bramble
#

c'est qui est sur c'est pas du js après si c'est python je saurais te dire j'en ais jamais fait 😉

fleet scaffold
#

Je te l'affirme tkt

crude bramble
#

oubilé mon précédent message rien à voir, la fatigue me rattrappe lol

fleet scaffold
#

Et l'api est formelle, ont peut modifié que le pseudo par serveurs

crude bramble
# fleet scaffold c'est python ça

oui mais ça change rien, suffit d'adapter en js mais si ça change l'avatar du bot à chaque fois qu'un serv met à jour son avatar ça va effectivement vite être le bordel 😅

crude bramble
# fleet scaffold

oui effectivement et puis dans un sens un avatar reste perso tu ne peux pas avoir un avatar sur serv A et un autre sur sev B

fleet scaffold
#

attend

#

Voilà

#

J'ai deux photo de profil maintenant

crude bramble
#

en fait j'avais dans l'idée de proposer un bot multi serv modifiable à souhait afin d'enlever une épie dui pieds à des personne qui ne savent pas coder

fleet scaffold
#

regarde

#

Je suis orange ici

#

Mais en global je suis rouge

fleet scaffold
crude bramble
#

hum peut être un piste tout de même

#

vais essayer de voir ça sur le discord djs

#

sais ont jamais mais bon si juste le username est modifible d'après la doc je doute de cette possibilité quand même

drowsy ocean
#

Enfaite faut juste modifier le profile serveur du bot

fleet scaffold
drowsy ocean
fleet scaffold
drowsy ocean
# fleet scaffold Montre moi ces soit disant bot ou c'est possible ?

Welcome to another How2Dyno Tutorial! Today in this "How to" guide, I will show you how to change Dyno's profile picture using Dyno's preset icons. This is a premium only feature.

⦿ DO NOT CLICK! http://bit.ly/YOU_HAVE_BEEN_WARNED

Dyno Bot is a fully customizable server moderation Discord bot for your Discord server that features a simple and...

▶ Play video
crude bramble
#

je viens juste de voir que même la photo de profil est modifiable sur chaque serveur ou tu est en fait

#

pas testé mais ça semble faisable, peut être une piste du coup

#

si l'user peut le faire pourquoi pas un bot du coup

fleet scaffold
#

c'est d'autres bot que tu ajoute à ton serveur

drowsy ocean
#

Mais non c'est toi qui a pas suivis la vidéo

fleet scaffold
crude bramble
#

vous battez pas non plus 😅

fleet scaffold
#

y a clairement un nouveau bot là,

keen gust
#

C'est écrit noir sur blanc que les bots ne peuvent pas

fleet scaffold
#

nan mais je montre les preuve, je montre la doc officiel et ils cherchent à me contredire...

crude bramble
#

semblerais que si aux vue de l'image

fleet scaffold
#

MAIS JE VIENS CLAIREMENT DE PROUVER QUE NON

#

😭

keen gust
#

C'est plusieurs bots là..

#

C'est le seul système viable qui a été trouvé

fleet scaffold
#

et c'est "premium only"

crude bramble
#

heu c'est le même bot invité à plusieurs reprises

fleet scaffold
#

mec

#

c'est pas le même bot

crude bramble
#

et pourtant pas le même avatar

fleet scaffold
#

Mais, c'est pas le même bot

#

C'est deux bot avec un avatar différent

keen gust
#

Je vias inviter 100 fois raidprotect, j'aurais 100 raidprotect différents

fleet scaffold
#

C'est comme si tu me disais :
"oh mais t'as changé la photo de profil de ton Mee6"

keen gust
#

Jusqu'au dernière nouvelles, aucune personne ne peut avoir la même id

fleet scaffold
#

le fameux "bot qui change de photo de profile"

crude bramble
#

plusieurs bot du même nom certifié ?

fleet scaffold
#

j'ai un pote qui à ça mdr

#

"oh le même bot avec une photo de profile différente"

drowsy ocean
#

Effectivement la modification est impossible, le seul moyen est de passer par un bot intermédiaire

fleet scaffold
#

Merci 😭

fleet scaffold
#

ça couterais moins cher à discord en terme de méta data à stocké

crude bramble
#

c'est là que je voulais en venir de base

fleet scaffold
#

vu que pour chaque bots custom tu dois ajouté les customs commands en +

fleet scaffold
crude bramble
#

bon et sinon ont fait comment pour changer l'avar d'un bot sur tel serveur 🤣

#

dans l'immédiat pour un bot 100% custom faudrait donc proposer une install manuelle

#

je m'entends pas là, fournir un code fonctionnel ça sert à rien ils sont capable de tout pété lol

keen gust
#

Hein ?

#

Non, juste tu demandes à la personne de créer un bot, et de donner son token

crude bramble
#

hum l'idée deviens intéressante

glass cargo
#

Une idée de pourquoi cette erreur? Sachant que vue-router est bien installé et configuré.

keen narwhal
# fleet scaffold

Bien guez green-bot je sais pas comment ils sont aussi connu, je faisais partie d'une équipe de test qui avais tester leur bot y'a genre 1 ans pour trouver des failles ou des problèmes ( sous leur demande ) On leur a ressortie une liste complète de points qui ne vont pas de une ils les ont jamais patch et leur bot est toujours rempli de problèmes et failles et de deux ils nous ont insultés bref.

#

N'inviter pas GreenBot

#

vu les failles que je connais je vous garantis que on est peut être pas les seuls à les avoirs

fleet scaffold
keen narwhal
#

D'accord

#

ca ne change rien au fait que c'est des cons

fleet scaffold
#

Ah ça.. L'équipe de modération je dit pas

keen narwhal
#

Je sais pas quelle équipe on a eu

#

En tout cas c'étais des haut

glass cargo
#

donc les gens on cherché un autre bot :)

keen narwhal
#

franchement y'a mieux

#

Prenez Atlas si vous voulez quelque chose de fiable

#

et efficace

fleet scaffold
#

atlas un peu de latence je trouve

#

le bot soundcloud >>>>

keen narwhal
#

mais ca va maintenant

#

J'ai rien contre Atlas mais quand je me souviens comme ils nous prenaient pour des cons

#

le pire c'est que les tests de bot avec notre équipe on les faisaient gratuit et on était débordé mais ils trouvaient quand même à critiquer

fleet scaffold
#

XD

#

tu t'es fail là

#

tu veux dire Greenbot

keen narwhal
#

Oui

#

Green

#

my bad

#

Bon j'essaie d'apprendre nextJs pour faire un panel de bot discord mais je sais pas si next c'est la bonne techno pour

fleet scaffold
keen narwhal
#

En quoi ?

fleet scaffold
#

nextjs

keen narwhal
#

Ah yep

#

j'ai appris les bases de nextJS

#

Et dès que je me lance dans le grand bain pour le panel je sais pas quoi faire , je sais pas comment m'y prendre par ou commencer

fleet scaffold
#

en priorité

keen narwhal
#

Yep

#

mais je sais pas comment m'y prendre

#

les gens utilisent expressjs

#

en plus de next

#

mais c'est vraiment utile ?

fleet scaffold
#

Ils sont noob mdr

keen narwhal
#

Car next a un système d'api

#

donc de back

fleet scaffold
#

Ouais

#

Et y a un back même sans le système API

#

car y a du SSR

keen narwhal
#

Yep

#

Donc pourquoi utiliser express

#

tout le monde utilise express

#

mais je crois que c'est avec next v12

#

qui prenais bien moin en charge le back

#

etc

#

donc je sais pas

#

je vais continuer a chercher pour faire une auth mais j'ai vraiment que les bases en next et je t'avouerais que je galère pas mal

fleet scaffold
fleet scaffold
#

ah j'ai 0 animé aujourd'hui mdr

keen narwhal
#

ping moi

fleet scaffold
#

je tema un épisode, je te ping tkt

keen narwhal
#

hum

#

intéréssent

fleet scaffold
#

TU DEGOUTE

keen narwhal
#

mais je me renseigne juste

#

je regarde comme c'est fais

fleet scaffold
#

Mouais mouais...

#

Je vais le faire de A à Z

keen narwhal
#

tkt pas je ne téléchargerais pas de template

#

je veux juste comprendre comment fonctionne l'auth je débute en web

fleet scaffold
#

faut check la doc de discord

#

c'est mieux

cyan iron
#

Ouaip elle est plutôt bien faite en plus t'as de la chance

fleet scaffold
#

j'ai un projet

cyan iron
#

dit

keen narwhal
#

@fleet scaffold bon alors ce stream

#

j'ai besoin de voir un mec qui gère j'ai toujours pas réussi a écrire une ligne

fleet scaffold
woven cosmos
#

Qqn comment j'enlève le passphrase nécessaire a chaque fois que git me demande pour push

#

Svp

fathom fable
#

Bonsoir à tous,
J'ai un problème avec le LocalSave,
Je m'explique, j'arrive à sauvegarder mes variables cependant, lorsque je réactualise la page, toutes mes valeurs se réinitialises..
Merci d'avance !
Bonne soirée 🙂

fathom fable
keen gust
#

Tu déclares pas de router dans tes props, non ?

rocky oar
#

Yop, dites, je réfléchis actuellement à un projet avec ElectronJS + Vite (Vue3) + SocketIO et je voudrais savoir si quelque chose est possible :

Contexte :
L'idée de l'application que je voudrais réalisé, c'est un chat en P2P sans redondances des données (Rien est stocké), pour permettre d'échanger anonymement et sans traces avec notre interlocuteur.

Question :
Pour cela j'ai imaginé faire une application avec ElectronJS etc ... le stack n'est pas important pour mon interrogation car elle concerne SocketIO.

Dans l'optique de ce projet, j'ai imaginé cette userStory :

  • J'ouvre l'application, choisi un pseudo (Pas d'authentifications), puis j'arrive sur un dashboard vierge, comme si vous venez de créer un compte discord
  • J'ai la possibilité de créer des salons (Comme si on créé des serveurs discord), dans lequel je peux copier coller un token d'accès a celui-ci
  • Je l'envois à mon interlocuteur pour qu'il ai accès au salon, puis nous pouvons échanger

Ma question : **Étant donné que je ne veux aucunes redondances, est-il possible de faire un serveur websocket embarqué dans l'application ? au lieu de faire un backend socketIO exprès pour connecter les sockets clients entre eux **

floral bolt
#

oui c'est possible

#

enfin j'avais regarder un truc similaire

#

mais je ne suis pas sur qu'ils utilisaient socket

rocky oar
past nimbus
#

Electron reste du nodeJS, donc oui tu peux faire tourner un "backend" sur le côté client, mais il reste à l'exposer à internet et le référencer

floral bolt
rocky oar
rocky oar
past nimbus
rocky oar
past nimbus
#

Btw, socketio pour un projet réel c'est pas top niveau perf
Ici je pense que tu t'en fou étant donné que c'est un POC mais garde le en tête

rocky oar
#

Mais c'est pas réellement destiné à être un truc Surutilisé, enfin tout dépend du nombre de personnes qui voudrait échanger anonymement, mais dans l'idéal ce serait une solution Open-Source permettant aux journalistes ou autres particuliers d'échanger des informations en toutes sécurité tout en étant sûr que rien ne fuite, car j'ai déjà trouvé des solutions similaires avec la distribution Tails qui fonctionne avec des services Tor mais je préfère avoir ma solution personnelle car je connais pas les gens derrière les programmes existant

#

Et puis ça me fait pratiquer xD

#

Mais en tout cas merci @past nimbus & @floral bolt 😉

glass cargo
fleet scaffold
#

upnp c'est globalement la technologie qui permet d'ouvrir les ports

#

socket.io p2p, ça utilise un serveur derrière, car ça va lister des connexions WEBRTC

#

mais, pareil si tu veux un full p2p faut que au moins 1 de tes utilisateurs est upnp, (Et upnp, il faut faire la requête à Windows)

#

donc heureusement que t'utilises électron

#

Fin le P2P c'est pas si simple je trouve PepeClown

rocky oar
fleet scaffold
#

bah renseigne toi sur upnp

#

c'est un protocole essentiel du p2p

rocky oar
fleet scaffold
#

ça permet d'ouvrir les port sur la box de quelqu'un

#

pour que justement le serveurs soit accessible à tous

keen narwhal
#

Je n'arrive pas à importer mon css, pourrais-je avoir de l'aide? (NextJS)

rocky oar
keen narwhal
rocky oar
#

Essai d'enlever le src, car quand tu fais ../ t'atteris déjà dans le dossier src

keen narwhal
rocky oar
#

Alors, ton style.css est considéré comme global, du coup soit tu l'import dans ton app.js comme c'est dit dans le message d'erreur soit tu te renseigne sur les modules CSS, soit de souvenir quand je faisais du react j'utilisais Styled Components, (https://styled-components.com/) qui me permettait d'avoir une logique CSS embarquée dans mes components

styled-components

Visual primitives for the component age. Use the best bits of ES6 and CSS to style your apps without stress 💅🏾

#

Je laisse les collègues me corriger si j'ai dis une connerie car ça fait longtemps que je n'utilise plus react

keen narwhal
#

D'accord, merci!

#

Cependant, lorsque j'ai importé le css dans mon app.js, comment je fais en sorte qu'il s'applique sur ma page?

past nimbus
#

Tu ne peux pas nativement avec React

rocky oar
past nimbus
#

Il va s'appliquer à tous le site

#

Si tu veux scope ton css, tu devras utiliser des outils tiers

keen narwhal
#

ça marche mais mes pages sont toujours blanches.

rocky oar
#

Renseigne toi sur Styled components

floral bolt
#

ya pas d'outils tiers a utiliser enfaite

#

ni meme besoin d'utiliser styled components

#

a partir du moment ou tu le met dans _app.js il devient global. en regle general cest pour faire les variables root, et definir le body html ect

#

ensuite si tu veux styliser des composants imaginons que tu veuilles faire un header tu vas créer header.jsx et header.module.css

#

@keen narwhal

keen narwhal
#

Genre ma barre de navigation j'en fais un composant, je la stylise et je l'applique sur la page?

floral bolt
#

oui

keen narwhal
#

Ok merci!

#

J'ai jamais fait de composants mais c'est pas mal puisque je vais pouvoir apprendre et utiliser ça

fleet scaffold
#

déjà pourquoi tes imports c'est pas @/styles/global.css ??

keen narwhal
#

Normalement c'est pas du tout dur d'après ce que j'ai vu.

fleet scaffold
#

Normalement au début du projet il te demande si tu veux faire un alias

#

Ce qui est + simple justement

keen narwhal
#

Oui mais j'ai modifié

#

ah lors de l'installation

fleet scaffold
#

Pour avoir encore plus de difficulté ?

keen narwhal
#

c'est ça?

fleet scaffold
#

Yes

keen narwhal
#

je ne savais pas ce que c'était

fleet scaffold
#

c'est un alias pour les importe

#

ça évite de faire `../src/styles.."

#

mais juste @/styles..

keen narwhal
#

Ok merci

fleet scaffold
#

faut le config du coup

floral bolt
#

pardon j'ai oublier un truc important ! 😮

#

si tu fait comp.module.css tu dois l'importer comme ca : import s from './comp.module.css'

#

et donc t'en servir comme ca : <div className={s.maclass}>

floral bolt
fleet scaffold
floral bolt
#

a la limite faire des @comp/composant oui mais pour la racine ...

floral bolt
fleet scaffold
#

@/comp/header.ts 👍

floral bolt
#

non moi j'ai fait @comp @reef edge @lib ect

fleet scaffold
#

et tu peux l'exécuter dans n'importe quel sous fichier

floral bolt
#

oop deso du ping 😮

fleet scaffold
#

MDR LE MEC QUI S'APPELLE STYLE

fleet scaffold
keen narwhal
#

Je refais un projet

#

avec npx create-next-app@latest

#

donc j'active typescript ou pas?

fleet scaffold
#

yup

#

ATTEND NON

#

c'est à ta discrétion ça typescript

#

perso je l'ai pas activé

keen narwhal
#

Il paraît que c'est mieux que le js

#

fin que c'est le js amélioré

fleet scaffold
#

J'avais la flemme de faire du typing pour le site 😅

keen narwhal
#

J'ai mis non

#

ESLint

#

j'active?

floral bolt
#

oui

fleet scaffold
#

Tu peux, c'est toujours bien

keen narwhal
#

Tailwind?

#

Je peux apprendre

floral bolt
keen narwhal
#

il paraît que c'est pas mal

fleet scaffold
#

Moi j'ai désactivé tout car j'avais la flemme de réfléchir à du typing mdr 😂

floral bolt
fleet scaffold
#

un peu la flemme

keen narwhal
#

Tailwind CSS?

floral bolt
#

ca t'evite davoir a ecrire du css

fleet scaffold
#

je l'ai mis perso

floral bolt
#

je trouve ca plus simple

#

et rapide

fleet scaffold
#

après je suis en susu maintenant moi harold

keen narwhal
fleet scaffold
#

je laisse gérer copilot pour le CSS

floral bolt
#

tu as juste a regarder la doc quand tu veux faire un truc

keen narwhal
#

Ok

#

bah voilà si j'utilise tailwind

floral bolt
#

genre si tu veux faire du flex tu recherche flex sur le site et tu trouve direct comment ca marche

keen narwhal
#

y'a plus besoin du truc des composants que tu m'avais parlé tout à l'heure?

floral bolt
#

c'est tres tres simple

fleet scaffold
#

Je sais toujours pas faire un Header avec tailwind 💀

floral bolt
keen narwhal
#

J'active src/ directory dans mon projet?

fleet scaffold
#

j'ai oublié à cause d'avoir fait trop de back-end, et d'utiliser trop de libs UI...

#

TOUJOURS

#

c'est une best practice

#

et enfin tu met @/* en alias

keen narwhal
#

D'accord et experimental app/ directory?

floral bolt
#

non

fleet scaffold
floral bolt
fleet scaffold
#

c'est l'architecture de tout projets normalement

floral bolt
#

petite nav

#

regarde comme c'est bo :

fleet scaffold
floral bolt
#

c'est moi qui l'ai fait

fleet scaffold
#

eh ?

fleet scaffold
#

fin c'est bien sur un site non ?

floral bolt
#

non je fait les photo avec l'extension codesnap

fleet scaffold
#

Ahh

#

okayy

keen narwhal
#

J'ai enfin compris, merci encore Snox!

#

export default function Home() {
    return (
        <>
            <div className={styles.navbar}></div>
        </>
    )
}```
past nimbus
#

/home/Home.component.tsx
/home/home.style.css

#

Pas tous les styles dans le même dossier

drowsy ocean
#

Salut j'ai un petit pb avec zod, il me valide les numbers sur des types strings

past nimbus
#

C'est normal, mais tu veux pas qu'il le fasse j'imagine ?

drowsy ocean
#

Oui je veux pas

drowsy ocean
#

Personne n'a de solutions ?

fleet scaffold
drowsy ocean
#

Oui mais justement jveux pas que ce soit un number

#

enfaite mon type c'est un z.string()

#

le pb c'est que quand je lui envoi un nombre bah il valide alors que c'est un number

drowsy ocean
#

C'est un bordel

#

jpp

fleet scaffold
#

Waw 😭

#

c'est foireux à cause de ça je crois

drowsy ocean
#

Non parce que quand je lui envois un bool il le refuse

fleet scaffold
#

wtf

#

donc quand tu lui envoie un number comme le 12 il renvoie true ?

drowsy ocean
#

il renvoi "12"

#

il le convert ce fdp

#

Alors que jveux pas

fleet scaffold
#

alors

#

j'ai une explication

#

C'est javascript

silver sluice
#

Faut pas s'énerver, ça arrive d'être bloqué toute la journée sur un problème 😅

fleet scaffold
#

Pas zod le problème

drowsy ocean
#

Ouais mais là je suis en typescript alors normalement je devrais pas avoir de pb avec ça

#

Il est censé respecté le typage

silver sluice
#

Ok

drowsy ocean
#

Et puis une lib de validation par typage qui ne valide pas le typage c'est une dinguerie xD

silver sluice
#

Ah ouais d'accord xD

fleet scaffold
drowsy ocean
fleet scaffold
#

car tu peux faire 1 + 1
et "1" + 1

#

(et le second 1 va devenir "1")

drowsy ocean
fleet scaffold
#

mhh

#

je check

#

Okay ,tu marque 1 point

#

Zod est mal foutu quelque part mdr

drowsy ocean
#

Ouais ça saoule

fleet scaffold
drowsy ocean
#

Flemme jvais bidouiller le code source xD

fleet scaffold
drowsy ocean
fathom fable
#

Bonsoir à tous,
J'ai encore des problèmes avec le LocalSave (décidemment je suis vraiment nul 😅 )
Lorsque je crée la sauvegarde et que je réactualise la page tout marche bien.
Cependant lorsque je reset le LocalSave, mes données n'arrivent pas à s'afficher...
(faites pas gaffe au design et au nom de l'un des objets 😆 )

Le code :

#

si quelqu’un a une idée d’ou ça peut venir je suis preneur ☺️

past nimbus
drowsy ocean
#

Je fais une api avec fastify

past nimbus
#

Les validateurs fonctionnent de faire un cast léger, et si le cast succeed alors il retourne true

#

Ouais ?

drowsy ocean
#

Et lorsque je lui envoi un objet avec une propriété égale a 12 alors que j'attend une string jveux pas qu'il autorise

past nimbus
#

Oui mais pourquoi ? C'est ma valeur 12 que tu interdire ? Ou bien n'importe quel number sous type de string ?

drowsy ocean
#

n'importe quelle nombre

#

En gros jveux juste autoriser si c'est une string et pas un number

past nimbus
#

C'est bizarre, c'est quoi le champ en question ?

drowsy ocean
#

Je vais te montrer un exemple

#

Là c'est mon type d'input

#

Et la je lui envoi un number

#

Et il me le retourne en string

#

Moi je veux qu'il le refuse car c'est pas un string

past nimbus
#

Je vois, t'as pas une option pour disable le cast sur zod ?

#

D'ailleurs t'es obligé de précisé le nom des erreurs avec zod ?

drowsy ocean
#

Non je crois pas
Non pas besoin de préciser

past nimbus
#

Okok

#

Je saurais pas te dire, mais c'est volontaire
Pourquoi il te faut absolument un string plutôt qu'un number ? sachant qu'il va le cast de toute manière ?

drowsy ocean
#

Bah parce que je compte donner un accès publique et je préfère que les types soient respecté

past nimbus
#

Le typage est respecté, tu te crée juste un problème en plus
Attention au XY problem

drowsy ocean
#

Mais je pense avoir peut etre trouver l'origine du pb

past nimbus
#

C'est pas un problème, c'est toi qui t'en crée un

#

Le validateur te garantis d'avoir un string

#

Donc tu t'en fou qu'à l'origine il push un number

#

Ou est en web, faut pas l'oublier

drowsy ocean
#

Ouais jsp ça me fait chier de demander une string et qu'on puisse m'envoyer un nombre

#

Mais tampis

#

Ca sera une feature mdr

past nimbus
#

Tu rend juste ton API plus libre d'accès sans compromettre la sécurité/intégrité, donc que du benef

drowsy ocean
#

Ouais j'espère juste qu'il est pas aussi permissif sur d'autres points..

past nimbus
#

On est en Web (et surtout en JS), les nombres et les string deviennent l'un et l'autre pour un oui ou pour un non

#

Seulement sur le casting implicite, si derrière ton TS est juste, t'aura aucun soucis

#

Typiquement 0 il pourra l'autoriser pour un boolean probablement (à vérifier, c'est le cas pour class-validator mais zod je sais pas)

#

Par contre sur les points importants de la validation d'input, c'est de bien préciser les champs obligatoires/optionnels (en général c'est bien fais par le dev)
Mais souvent on oublie d'interdire les champs non spécifié et ça c'est une grosse faille de sécurité, j'ai pas besoin de te faire un dessin

drowsy ocean
#

Ouais je vois, bah en tout cas merci pour ton aide jvais essayer de cohabité avec la passoire qu'est zod xD

past nimbus
#

Je te rassure la majorité des validateurs fonctionnent pareils, mais en général tu peux le désactiver il me semble

crude bramble
#

bonjour à tous je voudrais faire un handler pour mes bouttons et selects mais j'ai l'erreur suivante

#

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

#

voici mon handler

#

je vous laisse aussi mon fichier de définition

drowsy ocean
#

Ya rien qui va dans ton code ^^

#

Dans un premier temps si tu souhaite ajouter des propriétés dans le Client de discordjs, il faut que tu extend la classe

#

Ensuite je vois que tu es en typescript, et la tu ne cherche que les fichiers en .js donc ça ne marchera pas en ts-node

#

De plus un handler pour les buttons je trouve ça un peu inutile, je trouve ça impertinent car tout ton code n'as pas besoin d'accéder aux boutons

fleet scaffold
fleet scaffold
#

moi pour require, c'est forcément du .js mdr 😂

#

(Oui oui, même en typescript=

#

c'est car j'utilise pas ecma

drowsy ocean
#

Ah bah tu peux le faire en ts ^^
Et si tu require des fichiers statique ne met pas l'extension

fleet scaffold
#

mais l'autre

fleet scaffold
#

Je peux pas require les fichier .ts à cause de ma config

drowsy ocean
#

Tu utilise quoi de différent ? 👀

fleet scaffold
#

type: "module"

#

ça force à utiliser .js

fleet scaffold
#

c'est plus strict

#

car j'utilise des modules qui n'ont pas de typage typescript

crude bramble
#

en fait me suis mal expliqué quand je dis vouloir mettre mes buttons dans un dossier à part je parle pas des buttons en eux même mais de l'interaction

drowsy ocean
#

Et au final ça te sers a quoi ? 👀

fleet scaffold
drowsy ocean
#

Ouais mais là ça a juste aucuns sens

crude bramble
#

j'avais fait ça en js je classais mes buttons interaction dans un sous dossiers de buttons reprenant le nom de la commande

drowsy ocean
#

Oui Fredy j'ai bien compris ce que tu voulais faire, mais concrètement ça va t'avancer a quoi de faire ça ?

#

Parce que un handler pour les events ou les commands je trouve ça pertinent car c'est des objects parallèles et indépendant mais les interactions de tes buttons sont a usage unique et découle directement du button donc aucun interet de l'handle

queen ocean
#

@drowsy ocean tu met où toi alors ton code pour les boutons ?

drowsy ocean
#

Perso ma structure de fichier je fait comme ça:

commands
events
   -> interaction
           -> buttons
                 -> tonbutton.ts
           -> interactionCreate.ts
#

Le code est en cascade

#

les buttons sont dans un sous dossier au meme répertoire que son utilisation

#

Et ils sont juste import là ou j'en ai besoin

past nimbus
drowsy ocean
past nimbus
#

Un index.ts qui export tes fichiers

drowsy ocean
#

Ouais je vois après au final ça change pas grand choses

#

Tu fait a la main ce qu'une boucle fait

past nimbus
#

Si ça change pas mal de chose, notamment au moment du build, de la génération de ton container
Avec ta boucle, tu laisses places à l'erreur et tu casses ton flux de résolution TS

crude bramble
past nimbus
#

Globalement, la pratique d'import que tu utilises c'est uniquement "accepté" dans des tools comme les frameworks car forcément c'est une surcouche qui ne connait pas le futur code du dev

fleet scaffold
#

On m'avais dit ça aussi pour les dynamic import

#

attend non aucun rapport le dynamic import

drowsy ocean
#

Ouais personnellement ça ne me cause aucun soucis

fleet scaffold
past nimbus
#

Simplement une recommandation pour rendre ton code fiable, ça reste ton code je t'impose rien

fleet scaffold
#

C'est un unsafe usage, juste les gens font ça car bah flemme de devoir importer manuellement mdr 😂

drowsy ocean
past nimbus
#

Bah c'est pas bon ça, c'est comme si tu prend une const que tu cast en ce que tu veux, t'as aucune garantie que t'as pas fais une faute

#

Tu vois l'idée ?

#

Surtout que là tes events name sont pas typé correctement avec les events discord et ton handler non plus

drowsy ocean
#

Oui je vois c'est sur qu'il y a un coté unsafe

#

Mais bon on a quand même deux neurones qui se connecte alors ça va 😅

#

Je sais que tout mes events ont cette structure là

past nimbus
#

Bah pour un petit projet sans prétention, oui tu peux accepter le dette technique
Pour un projet sérieux, c'est quand même une grosse faille que tu peux très facilement corriger donc c'est dommage

past nimbus
drowsy ocean
past nimbus
#

Non pas forcément, si c'est pas typé c'est que de la supposition, tu sais pas si un jour tu as oublié d'ajouter le once ou non
Et si demain tu ajoutes une nouvelle props, tu oublieras peut-être de mettre un event à jour, c'est le risque
Dans les fais, tu supposes que c'est el cas mais t'as aucune garantie c'est ça que je veux dire, et c'est dommage quand t'as un outil comme TS qui te permets d'avoir cette sécu

drowsy ocean
#

Ouais je vois après je pense que c'est une question de fonctionnement, personnellement je sais que ça ne me pause pas de problème parce que j'ai toujours l'habitude d'être rigoureux dans le code, en plus de ça je test chaque modifications manuellement et en intégration continue avec git donc aucun risque qu'il y a un soucis en prod

fleet scaffold
#

Y a un gros désavantage avec ça aussi, c'est avec pkg

#

La compile marche moins bien

#

Après c'est un cas super précis ça xd

drowsy ocean
#

Avec pkg la structure serait différente je te rassure

fleet scaffold
#

Mais si demain tu fais du code que tu vend à des clients et que tu veux le mettre dans un exécutable, pkg est une super option

drowsy ocean
#

Ouais je sais je l'utilise très souvent

fleet scaffold
#

Après on m'as gueulé dessus quand je l'ai utilisé...

#

on m'as dit "Tu cherche à Cacher quoi ??"

drowsy ocean
#

Ouais ça c'est les mecs bien guez qui disent ça xD

#

Perso on ne m'as jamais fait de remarques là dessus

past nimbus
#

pkg laisse ton code accessible

Mais tu risques aussi d'avoir un soucis au niveau du build, il ne va pas resolve ces deps automatiquement, tu devras les injecter toi-même dans le tsconfig

keen narwhal
#

Pour l'instant, voilà comment sont rangés mes fichiers.

past nimbus
#

Bah tu as donc
/src/components/Home
Et tu peux évidemment rajouter une couche entre components et Home pour regrouper par thème si besoin

#

Pareil pour les pages

keen narwhal
#

Ok merci

arctic obsidian
#

bonjour je n'arrive pas a avoir une video en javascripte pour crée des devis et aussi des facture vous aurais pas un tuto de votre coté svp je continue a chercher mes je perd espoir 😢

open python
arctic obsidian
#

je voudrais crée une facture ou un devis puis apres le generée en pdf depuis l'interface est après si admeton le devis est validée le convertire en facturation

open python
#

Tu as essayé de demander à chatgpt ?

past nimbus
#

Tu cherches un outil pour faire ça en gros ? Shine, Stripe etc ?

arctic obsidian
#

non plus orienté gestion de facturation pour auto entreupreuneur

#

avec protection part clef de licence une fois qu'il on acheter en faite je suis entrains de faire un logiciel plus complexe dans le domaine de la sécurité privée avec gestion de planning de site des clients facturation gestion de site et des agent mes apres j'ai trouvée les autre tuto qui pourrais m'aider mes la je reste bloqué sur devis facturation j'ai vue un gars qui as reusi mes quand je lui demande si il peut faire un tuto pour que je puisse mieux comprendre il ne me répond pas 😢 du coup je cherche de partout je ne trouve pas

past nimbus
#

Mélange pas tous, gestion de licence et facturation c'est pas la même chose

#

Shine te fais de la facturation pour freelance

#

devis/facture, déclaration

arctic obsidian
#

ben la clef de registre car je compte vendre le logiciel au professionnel

#

l'exemple pour la facturation que je souhaiterait https://youtu.be/ReIx2T5DIhU?t=883

🔥 Ma formation ElectronJS : https://www.udemy.com/course/electron-js-creez-des-apps-desktop-multi-plateformes-en-javascript/?referralCode=D36BE59A8F01D75C5B16
Vous y apprendrez à développer l'application de gestion de budget et à utiliser Electron JS afin de développer n'importe quel type de logiciels par la suite !

Dans ce mini tuto vidéo je ...

▶ Play video
crude bramble
#

je suis sous sheweny et j'aimerais bien mettre en place un event guildCreate

#

j'ai donc créé un event ce qui m'as généré ce code

#

euh non c'est résolu

keen narwhal
#

Force à tous les enfants sans compétences qui ont pris un bot sur github

#

Peux importe le langage de prog il sera cassée

worn garnet
#

oui fin, c'est discord en meme temp 😂

#

c'est comme google quand il change leur doc sur des paramètres presque indispensable

keen narwhal
#

Non c’est génial comme features

#

C’est pas un changement de doc c’est un gros changement sur discord

#

Les discriminator c’est finito

fleet scaffold
#

Je profite de mon #0001 tant que c'est possible

keen narwhal
#

Et moi @keen narwhalledeveloppeurpasfoumaisonestla

limber sparrow
#

ca me trigger ce genre de fonctionnalité

reef edge
keen narwhal
#

C’est génial

#

Depuis le temps que on attend ça nous les devs

limber sparrow
#

le système est largement plus stylé que les tags je dis pas le contraire

#

mais je sens dans 5-6 mois

#

si tu veux changer ton name unique

#

bonne chance pour en avoir un qui est déjà pas pris

#

par un pelo qui est venu genre 3 jours sur discord

keen narwhal
#

Bah c’est comme Twitter quoi

limber sparrow
#

yes et pleins d'autre appli, passer 30 minutes à juste t'inscrire

#

pck tous tes idées sont deja prise c'est chiant

keen narwhal
#

Bon après avec 32 caractères de lenght Max tu as le choix

limber sparrow
#

yes mais après avoir un pseudo unique style zarkkkkkkkkkkkkkk car deja 20 personnes ont rajoutés une lettre pour que ca passe

#

c'est pas ouf non plus mdrr

keen narwhal
#

Ouais mais genre simnJS.DEV

#

Ce sera pas pris par exemple mdr

limber sparrow
#

oui après y'a moyen de trouver des soluces

#

mais jveux dire si tu veux un pseudo basique

#

la proba qu'il est deja pris est forte

keen narwhal
#

J’espère au moin que les personnalités connu pourront demander un @

#

Car si c’est pour que squeezie s’appelle LeSqueezieXXXxXX.XXXRealNoFake

limber sparrow
#

Juste pour la vanne ca serait drole mdrr

#

c'est vrai qu'ils ont rien dit sur ce sujet la

keen narwhal
#

Roh putain le nombre de gars qui s’appelle Beluga

#

Je sens que au final ça va être encore plus dur pour s’ajouter en amis

#

Mon pseudo c’est beluga avec 6 L et 15 A mec

limber sparrow
#

je sais plus les : sont open pour le name unique ?

#

je crois pas

keen narwhal
#

Et les comptes rares ce revendront

limber sparrow
#

bah après j'ai vu que tu pouvais faire la demande si jamais un pseudo était déjà pris

#

mais bon doit avoir des conditions

#

style le compte ne doit pas avoir été utlise depuis 70 ans

keen narwhal
#

Ou etre une personne connu

#

Je pense

woven cosmos
#

j'ai un script js que j'arrive pas a faire charger en react svp

#

je l'ai mis là

pallid plume
#

Pourquoi tu le npm install pas?

woven cosmos
#

j'ai réglé super mrc

#

je débute en react j'aimerais bien des explication

#

j'ai un script js pour créé des element html dans un div, j'aimerais savoir c'est ou que je dois le mettre

#

en react

zealous galleon
#
const { Client, Events, GatewayIntentBits } = require('discord.js');
const { token } = require('./config.json');

// Create a new client instance
const client = new Client({ intents: [GatewayIntentBits.Guilds] });

// When the client is ready, run this code (only once)
// We use 'c' for the event parameter to keep it separate from the already defined 'client'
client.once(Events.ClientReady, c => {
    console.log(Ready! Logged in as ${c.user.tag});
});

// Listen for messages
client.on(Events.MESSAGE_CREATE, async message => {
  if (message.content === '!ping') {
    // Send "Pong!" to the same channel
    await message.channel.send('Pong!');
  }
});```
#

Salut, j'ai un probleme avec mes intents, il me semble pourtant qu'ils sont a jour. Quelqun pourrait m'aider?

pastel dust
floral bolt
#

c'est ca de prendre un bot sur internet

keen narwhal
#

Salut, voila quand ej fais un node main dans mon projet ça me met :

#

quelqu'un aurait la soluce

floral bolt
#

montre moi t'es fichiers stp

keen narwhal
#

ah je sais je crois que c'est parce que mon fichier principal s'appel index et pas main

floral bolt
#

fait node .

keen narwhal
floral bolt
#

envois ton package.json

keen narwhal
#
{
  "dependencies": {
    "@discordjs/opus": "^0.9.0",
    "avc": "^0.0.1-alpha.1",
    "discord": "^0.8.2",
    "discord-player": "^6.3.0",
    "discord.js": "^14.9.0",
    "ffmpeg": "^0.0.4",
    "ffmpeg-static": "^5.1.0",
    "ytdl-core": "^4.11.4"
  }
}
floral bolt
#

non mais tout enfaite

keen narwhal
#

ben y'a que ça

floral bolt
#

ah alors fait node index.js

keen narwhal
#

j'ai le package log après

torn fog
keen narwhal
#

le soucis qui me saoul aussi c'est que quand je fais node main mon vs code plant

torn fog
#

Tu peux utiliser nodemon pour dev

#

t'installe le package nodemon sur ton projet

#

et ensuite tu fait nodemon index.js

#

et genre quand tu modifie ton fichier ça restart automatiquement le code

#

c'est grave pratique en gros

keen narwhal
#

Je me suis mis a coder des bot pour des potes mais ça me prends plus la tête qu'autre chose je pense demain je vais restart l'installation de 0 et je verrai

floral bolt
burnt fractal
#

En plus de ça nodemon est relou à mettre en place avec TypeScript

burnt fractal
#

Commence déjà par approfondir le JavaScript et d'ailleurs préfères le TypeScript au JavaScript

burnt fractal
# arctic obsidian l'exemple pour la facturation que je souhaiterait https://youtu.be/ReIx2T5DIhU?t...

Premièrement, les vidéos youtube pour apprendre le code, c'est peu recommandable.

Deuxièmement, je pense qu'avant de te lancer dans ce type de projet tu devrais améliorer tes compétences en développement.

De plus cela nécessite d'être conseiller par un expert-comptable (par exemple la différence entre un devis et une facture proforma) afin de pouvoir fournir toute possibilité nécessaire à la génération des documents pour que ton application soit viable.

Venant moi même initialement du monde de la compatibilité et d ela finances, je ne pourrai créer un logiciel de ce type sans être accompagné et conseillé.

crude bramble
pastel dust
#

C pas ça qui coince normalement c le / qui coince

crude bramble
pastel dust
crude bramble
#

🤔

#

ouais commence déjà par apprendre js et regarder la docs djs les guides sont bien fait

crude bramble
#

bonjour à tous

#

là je comprends pas l'erreur

#

j'ai pourtant suivi la doc

keen gust
crude bramble
#

merci mais j'use Sheweny

keen gust
#

Et ?

crude bramble
#

et je fait ce qui est expliqué ici

keen gust
#

Elle est peut-être obsolète

#

Ouvre une issue

crude bramble
#

en fait en v4 faut utiliser ApplicationCommandOptionType.Subcommand

#

d'ou mon erreur

crude bramble
#

encore un problème avec sheweny lol

#

const nickname = interaction.options.getString("nickname");

#

la propriété getstring n'existe pas sur...

#

🤔

#

alors là je comprends pas vraiment...

#

const nickname = interaction.options.get("nickname", true);

#

j'ai pourtant toujours fait getString

fleet scaffold
crude bramble
#

là du coup je me retrouve avec le code suivant

#

me reste juste une erreur ligne 45 sur nickname

fleet scaffold
crude bramble
#

je vois pas trop ce que tu veux dire

#

j'ai vu que le dev du framework fait ça comme ça =>

#
const reason =
      (interaction.options.get("reason", false)?.value as string) ||
      "No reason was provided.";
#

mais là pour ma dernière erreur c'est encore un autre problème

#

bon après lui c'est pas la même commande c'est une commande bann

crude bramble
#

Ah ben voilà, ça fonctionne mieux ainsi 😅

zealous galleon
#

petit probleme avec mes intents, quelqun aurait la solution?🙌🏻

versed storm
#

Hello,

Sur les versions supérieures à la v14 il faut pas utiliser GatewayIntentBits ?

const { Discord, GatewayIntentBits } = require('discord.js');
const client = new Discord({ intents: [GatewayIntentBits.GuildMessages, ...]});
floral bolt
#

ca renvois un number, donc la meme choses en soit

#

je pense que tu ne les a pas activé au niveau de ton bot sur le panel dev

versed storm
#

Ah bah oui j'suis bête kappo

crude bramble
#

hum sous sheweny

#

interaction.channel.permissionOverwrites est introuvable

#

en tout cas en typescript

#

le soucis c'est que je voudrais mettre en place une commande lock/unlock dans le salon ou elle est exécuté

keen narwhal
#

Bonjour, j'ai repris des vidéos pour un bot discord et j'attaque le fait de faire des /commands mais j'ai pas de réponse du bot

#

En gros j'ai créer mes commandes / donc ça ça fonctionne mais je rajoute ça pour avir al réponse du bot :

#

et ça ne change rien

#

J'ai trouvé

#

en gros ligne InteractionType doit pas avoir de "s"

#

mais sur la vidéo il existe mais pas sur mon discord

#

c'est bon en faite

frosty sand
#

Voilà on peut trouver seul

#

Je me suis dit il va trouver

frosty sand
#

Hey, c'est quoi l'erreur ? ```module.exports = (client) => {
client.on("guildMemberAdd", (member) => {

  const welcomechannel = '1079881958349348904';
  const ruleschannel = '1080215004336377856';

  const embed = new Discord.MessageEmbed()
      .setTitle(`New member has arrived!`)
      .setDescription(`Welcome to the server <@${member.id}>! Enjoy your stay and make sure to check our rules <#${ruleschannel}>! :slight_smile:`)
      .setColor('#0ed42a')
      .setTimestamp()
  client.channels.cache.get(welcomechannel).send(embed);

})
}```

keen narwhal
frosty sand
#

xd

#

Je crois que c'est le 🙂 je vais le retirer et tester

keen narwhal
#

c juste parce que tu as envoyé ton code sur discord l'émoji

frosty sand
#

?

keen narwhal
#

tu as définis Discord ?

#

et pour éviter une erreur de syntaxe met un point virgule après ton Timestamp

frosty sand
#

sa met tjr rien et oui j'ai defini Discord

keen narwhal
#

Je ne voix pas d'autre erreur 🤷‍♂️

#

vérifie les identifiants

frosty sand
#

ils sont bon

#

jsp

floral bolt
#

c'est quoi lerreur dans ta console ?

frosty sand
#

ah mais cest mieux de le mettre

frosty sand
floral bolt
#

enfin dans ton cas

#

bref c'est quoi le nom de ton fichier et fait voir ton eventhandler

frosty sand
#

Le nom de mon fichier c'est guildMemberAdd.js

#

et mon eventhandler ready.js

floral bolt
#

fait voir le code

frosty sand
#

de ready.js ?

floral bolt
#

oui

#

c'est pas un eventhandler ca

#

a quel endroit est run guildMemberAdd.js

frosty sand
#

Events

#

ah oui pardon tien le handler

floral bolt
#

tiens j'ai la flemme de t'expliquer ...

module.exports = {
    name: 'guildMemberAdd',
    async execute(client, member) {
      console.log(`Salut, je suis ${client.user.tag}\n`);
    },
};
#

Bon allez je suis sympa :

frosty sand
#

je l'es fais a ta place

floral bolt
#

Mouais c'est pas ca une explication

#

parceque concrètement tu ne sais pas comment marche le code que tu as

frosty sand
#

oe javais un peu la flemme aussi

#

oe je suis tjr aussi nul enft

floral bolt
#

donc :

const eventFiles = fs.readdirSync('./src/Events/').filter(f => f.endsWith('.js')); // va chercher toutes les fichier qui ce termine par .js et qui sont dans le dossier ./src/Events/
for (const file of eventFiles) { // va faire une boucle de tous les fichiers
    const event = require(`../../Events/${file}`); // va require chaque fichiers 
    if (event.once) { // si tu defini un seul lancement ex: l'event ready (il doit être lu qu'une fois) 
        bot.once(event.name, (...args) => event.execute(...args, bot)) //avec event.name va recuperer le nom de l'event, event.execute(...args, bot) va executer l'event avec les arguments de base de l'event
        console.log(`L'event ${file} à été chargé avec succès !`);
    } else {
        bot.on(event.name, (...args) => event.execute(...args, bot)) // tous pareil mais ecoute a chaque fois ex: guildMemberAdd
        console.log(`L'event ${file} à été chargé avec succès !`);
    }
}

donc tu peux utiliser comme ca :

module.exports = {
    name: 'LeNomDeTonEvent',
    once: true or false
    async execute(client, LesArguments) { // LesArguments = arguments pour chaquue event ex : guildMemberAdd l'argument sera : member
      console.log(`Salut, je suis ${client.user.tag}\n`);
    },
};

frosty sand
#

merci beaucoup

#

et desolé

floral bolt
#

et tiens comme je suis sympa j'ai refait un code un peu plus propre car la template que tu utilises c'est trop dur a comprendre : ```js
module.exports = async (bot) => {
const events = await getEvents('./src/Events');

events.forEach((event) => {
if (event.once) {
bot.once(event.name, (...args) => event.execute(...args, bot));
} else {
bot.on(event.name, (...args) => event.execute(...args, bot));
}

console.log(`L'event ${event.file} a été chargé avec succès depuis ${event.folder} !`);

});
};

async function getEvents(path) {
const files = await fs.readdir(path, { withFileTypes: true });
const events = [];

for (const file of files) {
const filePath = ${path}/${file.name};

if (file.isDirectory()) {
  events.push(...(await getEvents(filePath)));
} else if (file.isFile() && file.name.endsWith('.js')) {
  const event = require(filePath);
  events.push({ name: event.name, once: event.once, execute: event.execute, file: file.name, folder: path });
}

}

return events;
}```

#

un peux moins complexe mais au moins tu as les bases

frosty sand
#

merci

frosty sand
#

faut mettre sa pour envoyer le msg ? channels.cache.get('1079881958349348904').send(embed);

#

stp

alpine reef
frosty sand
#

merci !

alpine reef
#

Avec plaisir

frosty sand
#

Marche pas

alpine reef
#

Tu as fait client.channels

alpine reef
frosty sand
#

je teste

fleet scaffold
#

Votre avis sur ce handler :

      (async () => {            
            this.login(config.discord_token); 
            await this.loadCommands();
            await this.loadEvents();
        })();
    }

    async loadCommands(path: string = "commands"){
        fs.readdir(join(__dirname, path), (err, files) => {
            if(err) return console.log(err);
            files.forEach(async file => {
                if(!file.endsWith(".js")) return await this.loadCommands(join(__dirname, `${path}/${file}`));
                let commandeImported = await import("./"+join(path, file));
                let commande = new commandeImported.default(this) as CommandsBase;
                this.commands.set(commande.name, commande);
                console.log(`${colors.yellow("[LOADED]")} command ${colors.blue(commande.name.toUpperCase())}`);
            })
        })
    }
    async loadEvents(path: string = "events"){
        fs.readdir(join(__dirname, path), (err, files) => {
            if(err) return console.log(err);
            files.forEach(async file => {
                if(!file.endsWith(".js")) return;
                let event = await (await import("./"+join(path, file))).default;
                let eventName = file.replace(".js","");
                this.on(eventName, event.bind(null, this));
                console.log(`${colors.yellow("[LOADED]")} event ${colors.blue(eventName.toUpperCase())}`);
            })
        })
    }
#

à part qu'il est méga unsafe 🙂

keen narwhal
#

Regarde ce que j’ai fais avec mon pote sur ce bot

#

On a fait des tests et c’est le moyen de faire le plus opti

ocean bluff
#

et je pense que readdirSync serait meilleur

#

ça t'éviterai de passer par un callback

#

autant passer par une boucle filter aussi

#

sinon possible de m'expliquer l'utilité d'utiliser l'asynchrone si on n'utilise pas la réponse ?

past nimbus
# fleet scaffold Votre avis sur ce handler : ```ts (async () => { ...

Interdiction d'utiliser un forEach, encore plus vrai dans le cas async
aucun typage sur tes fonctions de retour
Pourquoi tu as une fonciton anonyme en tête de fichier
Tu log avec des console.log
Les inline if c'est pas beau
utilise les version sync ou bien promised de fs/fs-extra
Tes loaders devraient pas se trouver dans ton objet Bot (je suppose que c'est l'objet bot)

Même remarque que pour l'autre dev, les imports dynamiques c'est à bannir

ocean bluff
crude bramble
#

sur un précédent projet j'avais fait ça

#
for (const folder of commandFolders) {
        const commandsPath = path.join(foldersPath, folder);
        const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
        for (const file of commandFiles) {
            const filePath = path.join(commandsPath, file);
            const command = require(filePath);

            if (!command.name) return Logger.warn(`Commande non chargé: ajouter un nom à votre commande\n Fichier -> ${filePath}`);

            if (!command.category) return Logger.warn(`Commande non chargée: ajouter une catégorie à votre commande\nFichier -> ${filePath}`);

            if (!command.permissions) return Logger.warn(`Commande non chargée: ajouter des permissions à votre commande\nFichier -> ${filePath}`);

                client.commands.set(command.name, command);
                Logger.command(`- ${command.name}`);
        }
    }
ocean bluff
#

le for of est pas trop conseillé aussi

past nimbus
crude bramble
#

bon pas en ts hein

ocean bluff
past nimbus
ocean bluff
#

ouais je vois après sur un lancement l'import dynamique va gêner à ce point ?

past nimbus
#

Oui, on en a parlé hier ou avant hier avec Ori, pleins de failles avec les imports dynamiques, c'est à bannir

ocean bluff
#

ok ok

fleet scaffold
ocean bluff
fleet scaffold
#

Non justement

ocean bluff
#

Pas compris ton explication

#

Alors

fleet scaffold
#
    this.loadEvents().then((eventLoaded) => {
            if(eventLoaded){         
        this.login(config.discord_token).then((asToken) => {
                this.loadCommands().then(() => {
                    console.log(`${colors.green("[READY]")} Everything is ready`);
                })
            })
            }
        })
    }

    async loadCommands(path: string = "commands"){
        return new Promise<boolean|Error>((resolve, reject) => {
            fs.readdir(join(__dirname, path), (err, files) => {
            if(err) return reject(err);
            files.forEach(async file => {
                if(!file.endsWith(".js")) return await this.loadCommands(join(path, file));
                let commandeImported = await import("./"+join(path, file));
                let commande = new commandeImported.default(this) as CommandsBase;
                this.commands.set(commande.name, commande);
                console.log(`${colors.yellow("[LOADED]")} command ${colors.blue(commande.name.toUpperCase())}`);
            })
        })
        resolve(true);
        })
    }
    async loadEvents(path: string = "events"){
       return new Promise<boolean|Error>((resolve, reject) => {
        fs.readdir(join(__dirname, path), (err, files) => {
            if(err) return reject(err);
            files.forEach(async file => {
                if(!file.endsWith(".js")) return;
                let event = await (await import("./"+join(path, file))).default;
                let eventName = file.replace(".js","");
                this.on(eventName, event.bind(null, this));
                console.log(`${colors.yellow("[LOADED]")} event ${colors.blue(eventName.toUpperCase())}`);
            })
        })
        resolve(true);
        })
    }
#

ça ressemble à ça maintenant

#

je charge les events > je démarre le bot > je charge les commandes

ocean bluff
#

De même pour le callback du fs

fleet scaffold
#

j'ai dev ça il était je sais plus quelle heure dans la nuit mdrrr

#

j'ai vu vos messages y a que quelques minutes

past nimbus
#

Le this.loadEvents il est pas réellement call ici non ?

#

Ton return new Promise est très mal utilisé

fleet scaffold
#
        this.loadEvents().then((eventLoaded) => {
            if(eventLoaded){         
        this.login(config.discord_token).then((asToken) => {
                this.loadCommands().then(() => {
                    console.log(`${colors.green("[READY]")} Everything is ready`);
                })
            })
            }
        })
    }

    async loadCommands(path: string = "commands"){
        return new Promise<boolean|Error>((resolve, reject) => {
            let Imagine = new commands.Imagine(this);
            let ListenVoice = new commands.ListenVoice(this);
            let LeaveVoice = new commands.LeaveVoice(this);
            this.commands.set(Imagine.name, Imagine);
            this.commands.set(ListenVoice.name, ListenVoice);
            this.commands.set(LeaveVoice.name, LeaveVoice);
        resolve(true);
        })
    }
    async loadEvents(path: string = "events"){
       return new Promise<boolean|Error>((resolve, reject) => {
            this.on("ready", () => events.ready(this));
            this.on("interactionCreate", (interaction) => events.interactionCreate(this, interaction));
        resolve(true);
        })
    }
#

La version en suivant les conseils de Scyla

fleet scaffold
past nimbus
fleet scaffold
#

Oui ?

#

Et bien, c'est quoi le soucis ?

past nimbus
#

Donc en réalité du call pas réellement la méthode ici ?

#

Là on voit juste que tu call this.loadEvents au milieu d'une classe

fleet scaffold
#

Ah non oulah

#

il est dans le constructor mdr

#
   constructor(client: Cardia){
        super({
            intents: [IntentsBitField.Flags.Guilds,
            IntentsBitField.Flags.GuildMessages,
            IntentsBitField.Flags.MessageContent,
            IntentsBitField.Flags.GuildVoiceStates,
            IntentsBitField.Flags.GuildMessageReactions,
            IntentsBitField.Flags.GuildMessageTyping,
            IntentsBitField.Flags.GuildMembers,
            IntentsBitField.Flags.GuildPresences,
            IntentsBitField.Flags.GuildEmojisAndStickers,
            IntentsBitField.Flags.GuildIntegrations,
            IntentsBitField.Flags.GuildWebhooks,
            IntentsBitField.Flags.GuildInvites,
            IntentsBitField.Flags.GuildVoiceStates,
            IntentsBitField.Flags.GuildMessageReactions,
            IntentsBitField.Flags.GuildMessageTyping,
            IntentsBitField.Flags.DirectMessages,
            IntentsBitField.Flags.DirectMessageReactions,
            IntentsBitField.Flags.DirectMessageTyping
            ]
        });
        this.cardia = client; 
        this.loadEvents().then((eventLoaded) => {
            if(eventLoaded){         
        this.login(config.discord_token).then((asToken) => {
                this.loadCommands().then(() => {
                    console.log(`${colors.green("[READY]")} Everything is ready`);
                })
            })
            }
        })
    }
#

donc si si il est call mdr

#

(faut pas demandé pour les intents, j'active tout pour les tests)

past nimbus
#

N'ajoute pas d'async dans ton constructor, c'est pas une bonne pratique

fleet scaffold
#

Mhhh

#

wait

#
        this.loadEvents();
        this.login(config.discord_token);
        this.loadCommands();
    }

    private loadCommands(path: string = "commands"){
            let Imagine = new commands.Imagine(this);
            let ListenVoice = new commands.ListenVoice(this);
            let LeaveVoice = new commands.LeaveVoice(this);
            this.commands.set(Imagine.name, Imagine);
            this.commands.set(ListenVoice.name, ListenVoice);
            this.commands.set(LeaveVoice.name, LeaveVoice);
    }
    private loadEvents(path: string = "events"){
            this.on("ready", () => events.ready(this));
            this.on("interactionCreate", (interaction) => events.interactionCreate(this, interaction));
    }

Mieux @past nimbus ?

#

Le problème avec ça, c'est que mes commandes ce crée pas...

past nimbus
#

Je te conseille plutôt d'avoir une méthode .init qui elle sera async

const bot = new Bot(...);
await bot.init()

#

Les commands tu peux les export dans un index.ts pour pas avoir à les setup une à une, t'aura juste à boucler dessus

#

Pareil pour les events du coup

fleet scaffold
#

Actuellement je fais ça

past nimbus
#
import * as Commands from './commands';

export default ():void  => {
  for (const command in Commands) {
    // TODO
  }
};

Par exemple

fleet scaffold
#

Je passe sur ça ?

past nimbus
#

Non laisse l'export comme tu avais

#

Tu peux même directement
export * from './ia/image';

#

Sans avoir à le rename

fleet scaffold
#

ça semble niqué tout mon typage ça

past nimbus
#

T'as exporté correctement ?

#

Si tu exportes correctement les fichiers et l'index, tu pourras boucler dessus, je le fais sur tous mes bots

fleet scaffold
#

J'ai exporter comme ton exemple :/

past nimbus
#

Et tes command tu les exportes comment ? avec un default ?

fleet scaffold
past nimbus
#

export pas en default, en vrai c'est pas une super bonne pratique, c'est de la dette de nommage
Ensuite check ce que ton index.ts te retourne quand tu l'importes

fleet scaffold
#

ça m'étonnerais que default soit une mauvaise pratique

#

Après ta modif

#

Le fichier "bot.ts"

fleet scaffold
#

En même temps ça me paraissait logique que ça work pas autrement

#

Au moins c'est typé, et c'est tout beau

past nimbus
fleet scaffold
past nimbus
#

Exemple ton LeaveVoice, si tu l'exportes en nommer
Tu auras toujours le bon nommage LeaveInvoice, sauf si tu le modifies explicites lors de l'import avec un as

Alors qu'en default, tu peux le nommer ABCD, tu le sauras pas. Pareil pour le renommage, il va pas mettre à jour les noms sur un default export normalement

fleet scaffold
#

ah

past nimbus
#

Mais comme dit, c'est pas très important, il y a bien pire

fleet scaffold
#

J'avais une question au fait

#

Actuellement pour mes boutons j'utilise ça

#

Bon, c'est génial et tout ça fonctionne bien

#

Mais, j'aimerais utilisé le builder

past nimbus
#

Utilise les enums plutôt que de mettre des valeurs libres

#

Je dois y aller là, on reparle après

fleet scaffold
#

Okayy

keen narwhal
#

Hello besoin d'aide je viens de faire mes commandes kick ban et mute mais j'ai un soucis sur la même ligne que je ne comprends pas

#

et pourtant je suis censé avoir les perm même le proprio ne peux pas le faire

glass cargo
keen narwhal
#

Je vous met que celui de kick, ils se ressemblent tous

#
const Discord = require("discord.js");

module.exports = {

    name: "kick",
    description:"kick un utilisateur",
    permission: Discord.PermissionFlagsBits.KickMembers,
    dm: false,
    options : [
        {
            type: "user",
            name: "membre",
            description: "Utilisateur à kick",
            required: false,
        },{
            type: "string",
            name: "raison",
            description: "La raison du kick",
            required: false,
        }
    ],

    async run(bot, message , args){

        let user =args.getUser("membre")
        if(!user) return message.reply("Pas de membre a kick")

        let membre = message.guild.members.cache.get(user.id);
        if(!membre) return message.reply("Pas de membre trouvé")

        let reason = args.getString("raison")
        if(!reason) reason = "Aucune raison fournie"

        if(message.user.id === user.id) return message.reply("Essaie pas de te kick")
        if(await message.guild.fetchOwner().id === user.id) return message.reply("Ne kick pas le propriétaire du serveur")
        if(membre && !membre.kickable) return message.reply("Tu ne peux pas kick ce membre")
        if(membre && message.member.roles.highest.comparePositionTo(membre.roles.highest)<= 0) return message.reply("TU ne peux pas kick ce membre !")

        try{
            await user.send(`Tu as étais kick du serveur ${message.guild.name} par ${message.user.tag} pour la raison : \'${reason}\'`)
        }catch(e){}

        await message.reply(`${message.user} a kick ${user.tag} pour la raison : \'${reason}\'`)

        await membre.kick(reason)

    }

}
#

@glass cargo

glass cargo
#

Ok, et l'erreur?

keen narwhal
#

J'en ai pas au lancement c'est quand je fais /kick,/ban ou /mute ça rentre dans le if(membre && !membre.kickable) return message.reply("Tu ne peux pas kick ce membre")

#

alors que je ban un compte sans rôle

#

en gros j'ai fait des console.log et (membre && !membre.kickable) ça me renvoie true donc ça doit être un soucis sur el serveur

#

je sais juste aps comment le paramètrais sur el serv

glass cargo
#

serveur?

frosty sand
floral bolt
# frosty sand marche pas

Tuto comment faire du debug partie 1/1

  • Console.log
    console.log() te permets de log un message dans la console

si tu cherches a debug quelque choses tu peux ajouter autant de console.log() que tu veux par exemple : console.log(channels.cache.get('1079881958349348904')) ca ne résoudra pas ton problème mais tu auras une idée de ou chercher

floral bolt
frosty sand
#

ton "tuto" marche pas

#

comment je le definis

#

c'est ca que je me pose

floral bolt
#

c'est juste toi qui apprend pas a dev :/

floral bolt
frosty sand
#

que channels n'est pas définis

#

bon je vais dormir

#

bonne nuit

frosty sand
floral bolt
#

bref je suis de bonne humeur ...

#

en gros tu définis ton client mais tu ne t'en sers pas

tight latch
#

Bonjour j'aimerais pouvoir faire un confession à partir d'une commande mp mais ça ne fonctionne pas aucune erreur rien

const Discord = require('discord.js');
const { MessageEmbed } = require("discord.js")
const db = require("quick.db");
const cl = new db.table("Color")
module.exports = {
    name: "confess",
    aliases: ["conf"],
    run: async (client, message, args, prefix) => {
        if (message.channel.type === 'dm') {

            let color = cl.fetch(`color_${message.guild.id}`)
            if (color == null) color = client.config.color;

            if (message.deletable) message.delete();
            let channel = await db.fetch(`confession_${message.guild.id}`);
            if (channel === null) return;

            const suggestq = args.join(" ");
            if (!suggestq) return message.reply("S'il vous plait veuillez faire une confession");

            const embed = new MessageEmbed()
                .setTitle("Nouvelle Confession !")
                .setDescription(`${suggestq}`)
                .setColor(color)
                .setFooter(`L'Aube 🍂 ${client.config.version}`)
                .setTimestamp();

            const conf = new MessageEmbed()
                .setDescription(`Votre confession a été transféré ici <#${channel}>\n\n`)
                .setFooter(`L'Aube 🍂 ${client.config.version}`)
                .setColor(color)

            let confe = await message.channel.send({ embeds: [conf] })

            let msgEmbed = await message.guild.channels.cache.get(channel).send({ embeds: [embed] })


            setTimeout(() => {
                confe.delete()
            }, 1000)
        } else {
            message.channel.send('Ton confession doit être fait à partir des mps !');
        }
    }
}
#

(vous pouvez ping quand vous répondez svp)

glass cargo
glass cargo
#

Oui pour pouvoir localiser le problème.

#

Si tu mets tout le temps le même chiffre, ça te servira à rien 👀

tight latch
#

ah

#

pourquoi ça a supp

#

j'ai jamais utilisé les console.log() du coup je met quoi dans le console log?

burnt fractal
burnt fractal
#

Et donc ? C'est justement pour cela que le debugger est fait...

ocean bluff
#

credit @keen gust (sorry ping mdr)

floral bolt
celest cliff
#

Hello , je fais un site de santé, et je veux envoyer un message depuis mon code .
Voici ce que j'ai fais avec twilo * c'est l'image*
Or aucun message ne s'envoie , si quelqu'un peut m'aider.
PS: j'ai mon code dans mes notes parceque sur vsc ça reflète et on voit toute ma chambre , et que sur mon mac je ne peux plus avoir discord.

frosty sand
#

Déjà ta mal caché

#

ACb01b00b ect

celest cliff
#

Oui mais les autres le sont bien , donc on ne peut pas envoyer de message avec mon compte

frosty sand
#

12746 ect ça aussi

#

Mais c’est quoi sid

celest cliff
frosty sand
#

Ah bah au lieu du 6 c’est un 5

celest cliff
#

toujours pas

frosty sand
#

7

frosty sand
celest cliff
frosty sand
#

Oe mais c’est définis ou

celest cliff
#

si tu parles de la ligne " message.id" c'est si le message a été envoyé avec succès, il y a un message dans la console

frosty sand
#

Ah ok

celest cliff
#

Comment ça ?

fleet scaffold
#

c'est un service fait pour l'envoi de SMS ?

celest cliff
#

oui

fleet scaffold
#

tu as une erreur ?

celest cliff
#

Nop , aucune erreur, et aucun message comme quoi le message a bien été envoyé en console

celest cliff
#

Ouais il me semble

fleet scaffold
#

a quel moment "envoyerSMS" s'exécute au juste ?

celest cliff
#

Dernière ligne

#

Juste en dessous du commentaire

keen narwhal
#

Hey qql serait comment je peut récup ça en affichant correstement

#

.addFields
({name: ${user} | Utilisateur, value: '<@${interaction.user.tag}> - <@${interaction.user.id}>'})

fleet scaffold
#

Tu va te foutre une balle sous le pied avec la maj toi

fleet scaffold
#

Y aura plus les Tags dans la maj du coup si

#

ensuite si tu veux vraiment l'afficher comme ça ` faut utiliser ça

#

au lieu de '

keen narwhal
fleet scaffold
#

Et alors ? aucun soucis

#

Tu ajoute juste \

#

avant chaque `

#

ça escape seulement dans le code, pas dans le message de cette façon

keen narwhal
#

je fais \`cc`\

fleet scaffold
#

Le premier est good

#

le second non

keen narwhal
#

`cc`

fleet scaffold
#

\`c\`

#

Yep tu l'as xd

#

Juste je verrais pas car discord les escape

keen narwhal
#

et genre ça vas afficher comme ça ? ```cc`````

fleet scaffold
#

oui

keen narwhal
#

je test

keen narwhal
#

comme ça ?

fleet scaffold
#

il manque des antislash là

keen narwhal
keen narwhal
#

@fleet scaffold svp

keen narwhal
#

qql peut m'aider

#

svp

frosty sand
keen narwhal
frosty sand
#

Ok

fleet scaffold
#

Oui

frosty sand
#

Tkt je fais a ta place

fleet scaffold
#

je m'était endormi lol

frosty sand
#

Devant ton pc ?

keen narwhal
#

Bonjour quelqu'un sait comment faire pour qu'un bot envoie automatiquement un message dans un channel ?

fleet scaffold
frosty sand
#

Ah sa va

woven cosmos
#

ya qqn chose en react pour dire " re charger le composant" mais dans le composant lui meme ?

#

genre j'aimerais qu'il se charge normal, puis 2sec après que tout soit finis, il se recharge mais juste lui

past nimbus
#

Mets à jour une des deps
Mais c'est stupide

#

Le principe de react c'est justement qu'on a pas besoin de gérer ça

woven cosmos
#

enft c'est pour regler un bug

#

il apparait quand la page charge entierement, mais quand je met juste a jour le composant en question, il se regle

past nimbus
#

C'est que ton flux est pas bon
Tu vas juste cacher le bug en faisant un rerender

woven cosmos
#

j'utilise la bibliotheque flickity pour le carousel

#

et il s'occupe de faire les translateX avec son js

#

normalemnt il est 0% au début, et c'est bien comme ça qu'il est quand je recharge mon composant

#

mais quand la page charge en entiere c'est plus bon

#

et ça créé des espace anormaux

#

sinon il faudrait que le js attende un peu pour se charger ?

floral bolt
#

tu as swiper js qui marche tres tres bien avec react sinon

woven cosmos
#

ow

woven cosmos
#

merci je vais essayer

wraith coral
#

Bonsoir voici la ligne de mon script qui me pose problème, pouvez vous me dire pourquoi svp ? :

super({intents: ['GUILDS', 'GUILD_MEMBERS']});
crude bramble
drowsy ocean
#

C'est vrais que là on a que notre b*te et notre couteau pour te répondre 😅

rocky oar
#

Yop ! ✌️

Dites, actuellement je bosse sur un projet dont le stack est :
Front : VueJS
Back : Strapi (CMS)

J'ai actuellement une authentification qui fonctionne en front, c'est une auth avec Discord, le truc c'est qu'il y a un petit soucis avec l'enregistrement du membre dans la BDD, du coup j'ai certainement dû merder quelque pars, je sais pas si quelqu'un a déjà réaliser un projet avec le même Stack

#

Pour l'instant j'ai qu'une authentification Fictive, du coup si par la suite je fais des commandes, elles ne seront pas enregistrés :

#

c'est un POC qui ne sera jamais un projet concrêt, mais ce serait bien que j'arrive à mettre la persistance des données en place quand même

fleet scaffold
#

Salut 🙇 juste pour savoir, si vous connaîtriez un octect de son vide

#

j'en ai besoin pour ma fonction de record 😅

rocky oar
fleet scaffold
rocky oar
#

Ah merde j'ai mal interprété le mot "Son" xD
Attend je regarde il me semble que j'ai déjà eu à faire ça

rocky oar
fleet scaffold
#

J'en ai besoin pour faire un record d'un channel

#

Mais j'aimerais utilisé un module

rocky oar
#

Je t'avoue que là ça me brainfuck un peu car j'ai jamais eu à le faire xD

fleet scaffold
#

MAIS IL EST PAS COMPATIBLE AVEC TYPESCRIPT 😭

#

Et il m'aiderais tellement 😦

#

Comment je peux utilisé un module aussi mal foutu ?

#

fin...

#

il est bien foutu en js

#

mais y a pas de typage

rocky oar
#

Le problème que j'ai rencontré avec typescript en l'apprenant c'était ça ... la compatibilité des modules xD