#javascript-typescript
1 messages · Page 18 of 1
bonjour à tous j'ai un petit soucis avec mon code et je comprends pas cette erreur
voici mon code
Voici un extrait de code en typescript partagé sur ShareMyCode.io
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
pourtant si tu te fie aux guides c'est bien comme ça
j'ai bien essayé ceci mais toujours une erreur
Voici un extrait de code en typescript partagé sur ShareMyCode.io
T'es dispo voc pour me montrer ?
non plus de micro dans l'immédiat
Ah ok, essaye d'enlever le tiret dans le customid
ç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
Voici un extrait de code en typescript partagé sur ShareMyCode.io
pfff c'était tellement simple 😅
Voici un extrait de code en typescript partagé sur ShareMyCode.io
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
C'est juste impossible sur plusieurs serveurs
hum 🤔 je parle de cet article
Et ?? Ça reste impossible sur plusieurs serveurs
c'est pourtant pas ce qu'ils en disent à moins que la traduction google me mette en erreur 😉
Quelle traduction ? La réponse c'est juste du code, qui fonctionnera sur un seul serveur, mais plusieurs, non
je parle pas anglais donc j'ai traduit
Car ton bot a un avatar global, s'il change à chaque fois que x serveur a un avatar, ça va être le joyeux bordel
via google
D'autant plus qu'un bot est censé être aussi reconnaissable avec sa photo de profil
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
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
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
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
c'est python ça
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 😉
Je te l'affirme tkt
oubilé mon précédent message rien à voir, la fatigue me rattrappe lol
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 😅
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
alors si
attend
Voilà
J'ai deux photo de profil maintenant
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
fait plutôt un feedback à discord
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
Enfaite faut juste modifier le profile serveur du bot
je viens littérallement d'envoyé la preuve que les bots pouvait pas changé de photo de profil par serveurs 😭
Hello! I would like to change the server profile of a bot user via discord api. Instead of only being able to change the global avatar, I would like to set a custom one per guild the bot is in.
if ...
Alors comment tu explique que l'on puisse personnaliser la pp de certains bots ?
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...
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
donc tu m'envoie une vidéo que t'as pas regardé à ce niveau mdr
c'est d'autres bot que tu ajoute à ton serveur
Mais non c'est toi qui a pas suivis la vidéo
c'est deux bots là
vous battez pas non plus 😅
Non
C'est écrit noir sur blanc que les bots ne peuvent pas
nan mais je montre les preuve, je montre la doc officiel et ils cherchent à me contredire...
semblerais que si aux vue de l'image
et c'est "premium only"
heu c'est le même bot invité à plusieurs reprises
et pourtant pas le même avatar
Je vias inviter 100 fois raidprotect, j'aurais 100 raidprotect différents
C'est comme si tu me disais :
"oh mais t'as changé la photo de profil de ton Mee6"
Si c'est le même bot, alors ils devraient avoir une id partagée
Jusqu'au dernière nouvelles, aucune personne ne peut avoir la même id
plusieurs bot du même nom certifié ?
ça s'appele avoir plusieurs bots invité sur plusieurs serveurs
j'ai un pote qui à ça mdr
"oh le même bot avec une photo de profile différente"
Effectivement la modification est impossible, le seul moyen est de passer par un bot intermédiaire
Merci 😭
même si je suis d'accord que le fait qu'un bot puisse changé de photo de profile serais + smart que plusieurs bot custom
ça couterais moins cher à discord en terme de méta data à stocké
c'est là que je voulais en venir de base
vu que pour chaque bots custom tu dois ajouté les customs commands en +
Et comme je l'ai envoyé + haut https://support.discord.com/hc/en-us/community/posts/11217546410007--feature-request-Change-Server-Profile-for-Bots
Hello! I would like to change the server profile of a bot user via discord api. Instead of only being able to change the global avatar, I would like to set a custom one per guild the bot is in.
if ...
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
hum l'idée deviens intéressante
Une idée de pourquoi cette erreur? Sachant que vue-router est bien installé et configuré.
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
Le créa c'est un pote à moi XD
Ah ça.. L'équipe de modération je dit pas
Rythm et plein d'autres se sont fait ban
donc les gens on cherché un autre bot :)
franchement y'a mieux
Prenez Atlas si vous voulez quelque chose de fiable
et efficace
Anciennement ouais c'était long
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
atlas ?
XD
tu t'es fail là
tu veux dire Greenbot
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
ça tombe bien, je vais dev un ptit panel aussi XD
En quoi ?
nextjs
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
authentification
en priorité
Yep
mais je sais pas comment m'y prendre
les gens utilisent expressjs
en plus de next
mais c'est vraiment utile ?
Ils sont noob mdr
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
je l'utilisais XD
t'façon je tema un animé, puis je vais surement faire un live sur le panel
ah j'ai 0 animé aujourd'hui mdr
ping moi
je tema un épisode, je te ping tkt
tkt pas je ne téléchargerais pas de template
je veux juste comprendre comment fonctionne l'auth je débute en web
Ouaip elle est plutôt bien faite en plus t'as de la chance
vient mp bg
j'ai un projet
dit
@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
dans 20 minutes facile
ça commence
Qqn comment j'enlève le passphrase nécessaire a chaque fois que git me demande pour push
Svp
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 🙂
window.onload = loadGame()
Merci beaucoup ! 🤩
please 👀
Tu déclares pas de router dans tes props, non ?
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 **
oui c'est possible
enfin j'avais regarder un truc similaire
mais je ne suis pas sur qu'ils utilisaient socket
Tu aurais une documentation ou autre à me filer ? (une simple indication sur ce que je dois rechercher exactement)
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
ah bah si enfaite : https://github.com/socketio/socket.io-p2p
Je ne veux aucuns référencement, exclusivement du P2P car le contenu des conversations ne doit en aucuns cas être intercepté 🙂
Mais je te remercie pour ta réponse tout de même
Tu gère merci !
J'avais juste à taper socket.io p2p 🤦
Le référencement en P2P c'est mettre en relation les nodes ^^
Ah pardon je t'avais mal compris xD
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
en gros je vais faire une V1 pour faire pas mal de tests, et le déployer, et si je vois que j'ai besoin de + performant je ferais une V2
Merci pour ton conseil
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 😉
Normalement, je suis censé pouvoir y accéder sans avoir à le déclarer dans les props nan ?
fait attention avec le P2P, il faut que suffisamment de tes utilisateurs possède la technologie upnp, sinon ça va devenir vite compliqué
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 
Je pense que les problèmes je vais les rencontrer petits a petits mais ça j'arriverais à trouver une solution je pense, il me fallait juste une piste pour le P2P car on m'a toujours formaté à : message => serveur => destinataire
Merci 👌🏻
ça permet d'ouvrir les port sur la box de quelqu'un
pour que justement le serveurs soit accessible à tous
Je n'arrive pas à importer mon css, pourrais-je avoir de l'aide? (NextJS)
Ouais ça je connais
Essai d'enlever le src, car quand tu fais ../ t'atteris déjà dans le dossier src
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
Je laisse les collègues me corriger si j'ai dis une connerie car ça fait longtemps que je n'utilise plus react
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?
Tu ne peux pas nativement avec React
Je te laisse gérer je suis rouillé sur react xD
Il va s'appliquer à tous le site
Si tu veux scope ton css, tu devras utiliser des outils tiers
Renseigne toi sur Styled components
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
Genre ma barre de navigation j'en fais un composant, je la stylise et je l'applique sur la page?
oui
Ok merci!
J'ai jamais fait de composants mais c'est pas mal puisque je vais pouvoir apprendre et utiliser ça
déjà pourquoi tes imports c'est pas @/styles/global.css ??
Normalement c'est pas du tout dur d'après ce que j'ai vu.
Pourquoi pas?
Normalement au début du projet il te demande si tu veux faire un alias
Ce qui est + simple justement
Pour avoir encore plus de difficulté ?
c'est ça?
Yes
je ne savais pas ce que c'était
c'est un alias pour les importe
ça évite de faire `../src/styles.."
mais juste @/styles..
Ok merci
faut le config du coup
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}>
ca reviens au meme en soit
c'est + simple d'utiliser le @ vu qu'il part direct du src
a la limite faire des @comp/composant oui mais pour la racine ...
j'avais pas reflechis comme ca
@/comp/header.ts 👍
non moi j'ai fait @comp @reef edge @lib ect
et tu peux l'exécuter dans n'importe quel sous fichier
oop deso du ping 😮
MDR LE MEC QUI S'APPELLE STYLE
yep ont peut aussi faire ça
Je refais un projet
avec npx create-next-app@latest
donc j'active typescript ou pas?
J'avais la flemme de faire du typing pour le site 😅
oui
Tu peux, c'est toujours bien
apres perso j'ai une extension sympa qui t'aide a le faire
il paraît que c'est pas mal
Moi j'ai désactivé tout car j'avais la flemme de réfléchir à du typing mdr 😂
Bahh, fallait que je fasse les Typing pour l'oauth2 discord...
un peu la flemme
Tailwind CSS?
je l'ai mis perso
après je suis en susu maintenant moi 
D'accord mais je n'ai jamais touché à Tailwind, l'idéal serait que j'apprends?
je laisse gérer copilot pour le CSS
tu as juste a regarder la doc quand tu veux faire un truc
genre si tu veux faire du flex tu recherche flex sur le site et tu trouve direct comment ca marche
y'a plus besoin du truc des composants que tu m'avais parlé tout à l'heure?
c'est tres tres simple
Je sais toujours pas faire un Header avec tailwind 💀
Utilities for controlling how flex items both grow and shrink.
J'active src/ directory dans mon projet?
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
D'accord et experimental app/ directory?
non
non
non ca ne sers pas a grand chose
c'est littéralement une best practice pour la gestion d'un projet
c'est l'architecture de tout projets normalement
t'as trouvé où cet exemple ?
c'est moi qui l'ai fait
eh ?
comment t'as fait pour activer le code comme ça ?
fin c'est bien sur un site non ?
non je fait les photo avec l'extension codesnap
J'ai enfin compris, merci encore Snox!
export default function Home() {
return (
<>
<div className={styles.navbar}></div>
</>
)
}```
/home/Home.component.tsx
/home/home.style.css
Pas tous les styles dans le même dossier
Salut j'ai un petit pb avec zod, il me valide les numbers sur des types strings
C'est normal, mais tu veux pas qu'il le fasse j'imagine ?
Oui je veux pas
Personne n'a de solutions ?
tu as essayé ça ?
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
Seule option dans ce cas
w+
Et non parce que ma string peu contenir des nombres xD
C'est un bordel
jpp
Non parce que quand je lui envois un bool il le refuse
Faut pas s'énerver, ça arrive d'être bloqué toute la journée sur un problème 😅
Pas zod le problème
Ouais mais là je suis en typescript alors normalement je devrais pas avoir de pb avec ça
Il est censé respecté le typage
Ok
Et puis une lib de validation par typage qui ne valide pas le typage c'est une dinguerie xD
Ah ouais d'accord xD
Ouais mais c'est javascript derrière mdr
Oui mais meme si c'est js, js est capable de différencier un number et une string
Alors il me semble que non 😭
car tu peux faire 1 + 1
et "1" + 1
(et le second 1 va devenir "1")
Et le typeof tu en fait quoi ? 👀
Ouais ça saoule
ouvre une issue
ouvre une pull request 😭
Ouais je verrais
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 ☺️
C'est dans quel contexte que tu ne veux pas autoriser "12" ?
Je fais une api avec fastify
Les validateurs fonctionnent de faire un cast léger, et si le cast succeed alors il retourne true
Ouais ?
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
Oui mais pourquoi ? C'est ma valeur 12 que tu interdire ? Ou bien n'importe quel number sous type de string ?
n'importe quelle nombre
En gros jveux juste autoriser si c'est une string et pas un number
C'est bizarre, c'est quoi le champ en question ?
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
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 ?
Non je crois pas
Non pas besoin de préciser
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 ?
Bah parce que je compte donner un accès publique et je préfère que les types soient respecté
Le typage est respecté, tu te crée juste un problème en plus
Attention au XY problem
Mais je pense avoir peut etre trouver l'origine du pb
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
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
Tu rend juste ton API plus libre d'accès sans compromettre la sécurité/intégrité, donc que du benef
Ouais j'espère juste qu'il est pas aussi permissif sur d'autres points..
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
Ouais je vois, bah en tout cas merci pour ton aide jvais essayer de cohabité avec la passoire qu'est zod xD
Je te rassure la majorité des validateurs fonctionnent pareils, mais en général tu peux le désactiver il me semble
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
Voici un extrait de code en typescript partagé sur ShareMyCode.io
je vous laisse aussi mon fichier de définition
Voici un extrait de code en typescript partagé sur ShareMyCode.io
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
Alors, j'utilise du typescript aussi, mais pour require mes fichiers il faut que j'utilise la version .js
Perso je fait ça
moi pour require, c'est forcément du .js mdr 😂
(Oui oui, même en typescript=
c'est car j'utilise pas ecma
Ah bah tu peux le faire en ts ^^
Et si tu require des fichiers statique ne met pas l'extension
mais l'autre
je peux pas
Je peux pas require les fichier .ts à cause de ma config
Tu utilise quoi de différent ? 👀
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
Et au final ça te sers a quoi ? 👀
perso avant que les messages éphémère existe j'utilisais ça pour foutre un bouton pour delete la commande qu'on a invoqué
Ouais mais là ça a juste aucuns sens
j'avais fait ça en js je classais mes buttons interaction dans un sous dossiers de buttons reprenant le nom de la commande
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
@drowsy ocean tu met où toi alors ton code pour les boutons ?
@crude bramble si tu veux pas te prendre la tête check #1040325246156284035
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
Attention, mauvaise pratique les imports dynamiques
Pour les handlers tu fais comment toi ? 👀
Un index.ts qui export tes fichiers
Ouais je vois après au final ça change pas grand choses
Tu fait a la main ce qu'une boucle fait
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
j'avais déjà entendu parler mais je croyais que c'était uniquement du js je regarde là
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
On m'avais dit ça aussi pour les dynamic import
attend non aucun rapport le dynamic import
Ouais personnellement ça ne me cause aucun soucis
tu dois typer manuellement comment tu utilise tes events derrière
Simplement une recommandation pour rendre ton code fiable, ça reste ton code je t'impose rien
C'est un unsafe usage, juste les gens font ça car bah flemme de devoir importer manuellement mdr 😂
Ouais enfin rien de lourd
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
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à
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
Non tu supposes 😉
Non je sais car c'est moi qui est donné cette structure donc si je créer un event bah il respect cette structure tout simplement
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
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
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
Oui
Avec pkg la structure serait différente je te rassure
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
Ouais je sais je l'utilise très souvent
Après on m'as gueulé dessus quand je l'ai utilisé...
on m'as dit "Tu cherche à Cacher quoi ??"
Ouais ça c'est les mecs bien guez qui disent ça xD
Perso on ne m'as jamais fait de remarques là dessus
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
Je crée le fichier home où du coup?
Pour l'instant, voilà comment sont rangés mes fichiers.
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
Ok merci
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 😢
Tu veux générer un pdf en remplissant un formulaire ?
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
Tu as essayé de demander à chatgpt ?
Tu cherches un outil pour faire ça en gros ? Shine, Stripe etc ?
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
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
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 ...
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
Voici un extrait de code en typescript partagé sur ShareMyCode.io
euh non c'est résolu
Voici un extrait de code en typescript partagé sur ShareMyCode.io
https://support-dev.discord.com/hc/en-us/articles/13667755828631-Updating-Apps-to-Support-Unique-Usernames tous les bots vont devoir être mis à jour mdr
⚠️ Note: Stay tuned here, in the Change Log, and on the Discord Developers server api-announcements channel, for additional information regarding when and how the migration of application (app) nam...
Force à tous les enfants sans compétences qui ont pris un bot sur github
Peux importe le langage de prog il sera cassée
oui fin, c'est discord en meme temp 😂
c'est comme google quand il change leur doc sur des paramètres presque indispensable
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
Je profite de mon #0001 tant que c'est possible
Après tu sera @garderleplusbeauomglol24
Et moi @keen narwhalledeveloppeurpasfoumaisonestla
ca me trigger ce genre de fonctionnalité
Ouais pk?
Pourquoi ?
C’est génial
Depuis le temps que on attend ça nous les devs
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
Bah c’est comme Twitter quoi
yes et pleins d'autre appli, passer 30 minutes à juste t'inscrire
pck tous tes idées sont deja prise c'est chiant
Bon après avec 32 caractères de lenght Max tu as le choix
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
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
J’espère au moin que les personnalités connu pourront demander un @
Car si c’est pour que squeezie s’appelle LeSqueezieXXXxXX.XXXRealNoFake
Juste pour la vanne ca serait drole mdrr
c'est vrai qu'ils ont rien dit sur ce sujet la
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
Et les comptes rares ce revendront
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
Pourquoi tu le npm install pas?
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
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?
ya quoi qui va pas svp quand je fais / il veut pas
ya que tu sais pas ce que tu fais :/
c'est ca de prendre un bot sur internet
Salut, voila quand ej fais un node main dans mon projet ça me met :
quelqu'un aurait la soluce
montre moi t'es fichiers stp
ah je sais je crois que c'est parce que mon fichier principal s'appel index et pas main
fait node .
envois ton package.json
{
"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"
}
}
non mais tout enfaite
ben y'a que ça
ah alors fait node index.js
j'ai le package log après
T'a bien fait npm install ?
le soucis qui me saoul aussi c'est que quand je fais node main mon vs code plant
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
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
oui mais il n'arrive deja pas a le start ...
Node JS supporte le mode watch, nodemon ne sert plus a rien, il faut se mettre à jour mon bonhomme
En plus de ça nodemon est relou à mettre en place avec TypeScript
Si tu sais pas installer une dépendance à partir du npm, c'est sûrement pas encore le moment de commencer à faire du react...
Commence déjà par approfondir le JavaScript et d'ailleurs préfères le TypeScript au JavaScript
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é.
si dans les intents tu met qui Guilds et qu'en plus ton token est invalid tu vas pas aller loin 😅
Le token c fais exprès et comment ça met intents
C pas ça qui coince normalement c le / qui coince
hum, tu le stock ou ton token ?
Dzns un salon discord prv à moi
🤔
ouais commence déjà par apprendre js et regarder la docs djs les guides sont bien fait
bonjour à tous
là je comprends pas l'erreur
j'ai pourtant suivi la doc
Voici un extrait de code en typescript partagé sur ShareMyCode.io
merci mais j'use Sheweny
Et ?
et je fait ce qui est expliqué ici
en fait en v4 faut utiliser ApplicationCommandOptionType.Subcommand
d'ou mon erreur
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
il faut vérifier le typage si c'est bien un OptionResolver...
là du coup je me retrouve avec le code suivant
Voici un extrait de code en typescript partagé sur ShareMyCode.io
me reste juste une erreur ligne 45 sur nickname
t'as pas suivi ce que j'ai dit ?
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
Ah ben voilà, ça fonctionne mieux ainsi 😅
Voici un extrait de code en typescript partagé sur ShareMyCode.io
petit probleme avec mes intents, quelqun aurait la solution?🙌🏻
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, ...]});
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
Ah bah oui j'suis bête 
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é
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
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);
})
}```
,
c juste parce que tu as envoyé ton code sur discord l'émoji
?
tu as définis Discord ?
et pour éviter une erreur de syntaxe met un point virgule après ton Timestamp
sa met tjr rien et oui j'ai defini Discord
c'est pas obligatoire
c'est quoi lerreur dans ta console ?
ah mais cest mieux de le mettre
j'en ai pas
ca change rien
enfin dans ton cas
bref c'est quoi le nom de ton fichier et fait voir ton eventhandler
fait voir le code
de ready.js ?
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 :
je l'es fais a ta place
Mouais c'est pas ca une explication
parceque concrètement tu ne sais pas comment marche le code que tu as
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`);
},
};
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
merci
faut mettre sa pour envoyer le msg ? channels.cache.get('1079881958349348904').send(embed);
stp
Tu dois mettre:
channels.cache.get('1079881958349348904').send({ embeds:[embed] });
merci !
Avec plaisir
Marche pas
Tu as fait client.channels
Ou juste channels ?
je teste
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 🙂
Pas opti
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
le forEach est la boucle la plus lente
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 ?
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
ta une alternative pour les imports dynamiques ?
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}`);
}
}
le for of est pas trop conseillé aussi
Importation explicite, uniquement avec un index.ts qui va export les commands
bon pas en ts hein
tes obligé d'indiquer les import alors
C'est l'objectif
ouais je vois après sur un lancement l'import dynamique va gêner à ce point ?
Oui, on en a parlé hier ou avant hier avec Ori, pleins de failles avec les imports dynamiques, c'est à bannir
ok ok
ça à changé entre temps c'est pour ça wait
Il est inutile dans ton code alors ?
Non justement
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
Arrête avec le forEach c'est vraiment une mauvaise pratique
De même pour le callback du fs
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
Le this.loadEvents il est pas réellement call ici non ?
Ton return new Promise est très mal utilisé
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
comment ça il est pas réellement call ?
Bah là tu es dans une class non ?
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
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)
N'ajoute pas d'async dans ton constructor, c'est pas une bonne pratique
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...
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
comment tu boucle dessus ??
Actuellement je fais ça
import * as Commands from './commands';
export default ():void => {
for (const command in Commands) {
// TODO
}
};
Par exemple
Je passe sur ça ?
Non laisse l'export comme tu avais
Tu peux même directement
export * from './ia/image';
Sans avoir à le rename
marche pas ça
ça semble niqué tout mon typage ça
T'as exporté correctement ?
Si tu exportes correctement les fichiers et l'index, tu pourras boucler dessus, je le fais sur tous mes bots
J'ai exporter comme ton exemple :/
Et tes command tu les exportes comment ? avec un default ?
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
ça m'étonnerais que default soit une mauvaise pratique
Après ta modif
Le fichier "bot.ts"
J'ai réglé le soucis 🙂
En même temps ça me paraissait logique que ça work pas autrement
Au moins c'est typé, et c'est tout beau
Si c'est une mauvaise pratique car ça laisse place au nommage alternatif, mais bon c'est pas la pire des mauvaises pratiques, on voit bien pire
c'est quoi le nommage alternatif ?
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
ah
Mais comme dit, c'est pas très important, il y a bien pire
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
Utilise les enums plutôt que de mettre des valeurs libres
Je dois y aller là, on reparle après
Okayy
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

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
Ok, et l'erreur?
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
serveur?
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
parceque ^
ReferenceError : channels is not defined
ton "tuto" marche pas
comment je le definis
c'est ca que je me pose
Bah si il marche
c'est juste toi qui apprend pas a dev :/
elle veut dire quoi ton erreur ?
en gros une erreur de reference channels n'est pas definis
bref je suis de bonne humeur ...
en gros tu définis ton client mais tu ne t'en sers pas
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)
Mets des console.log() envoyant chacun un chiffre différent avant et après chaque fonction et condition de ton script, ça devrait t’aider ^^
envoyant un chiffre différent?
Oui pour pouvoir localiser le problème.
Si tu mets tout le temps le même chiffre, ça te servira à rien 👀
ah
pourquoi ça a supp
j'ai jamais utilisé les console.log() du coup je met quoi dans le console log?
Mieux que des console.log, lance ton projet avec le debugger nodeJS et met des points d'arrêt, tu verras beaucoup plus vite d'où vient le problème
j'ai pas d'erreur
Et donc ? C'est justement pour cela que le debugger est fait...
euh
credit @keen gust (sorry ping mdr)
Oh mince alors ! 😮 je suis découvert ! 😮
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.
Oui mais les autres le sont bien , donc on ne peut pas envoyer de message avec mon compte
Ce n'est pas ça
Ah bah au lieu du 6 c’est un 5
toujours pas
7
.
Session id
Oe mais c’est définis ou
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
Ah ok
twilo c'est un baille réel ?
Comment ça ?
c'est un service fait pour l'envoi de SMS ?
oui
tu as une erreur ?
Nop , aucune erreur, et aucun message comme quoi le message a bien été envoyé en console
c'est sur nodejs ?
Ouais il me semble
a quel moment "envoyerSMS" s'exécute au juste ?
Hey qql serait comment je peut récup ça en affichant correstement
.addFields
({name: ${user} | Utilisateur, value: '<@${interaction.user.tag}> - <@${interaction.user.id}>'})
Tu va te foutre une balle sous le pied avec la maj toi
moi ?
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 '
oui mais moi je veut l'afficher comme ça :
user - id
et non comme ça :
user - id
Et alors ? aucun soucis
Tu ajoute juste \
avant chaque `
ça escape seulement dans le code, pas dans le message de cette façon
je fais \`cc`\
`cc`
et genre ça vas afficher comme ça ? ```cc`````
oui
je test
il manque des antislash là
tkt j'ai réglé
Ok
Oui
Tkt je fais a ta place
je m'était endormi lol
Devant ton pc ?
Bonjour quelqu'un sait comment faire pour qu'un bot envoie automatiquement un message dans un channel ?
nan, devant mon téléphone
Ah sa va
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
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
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
C'est que ton flux est pas bon
Tu vas juste cacher le bug en faisant un rerender
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 ?
ow
merci je vais essayer
Bonsoir voici la ligne de mon script qui me pose problème, pouvez vous me dire pourquoi svp ? :
super({intents: ['GUILDS', 'GUILD_MEMBERS']});
hello avec plus de code et un message d'erreur to aurais plus de chance d'avoir des réponses 😉
C'est vrais que là on a que notre b*te et notre couteau pour te répondre 😅
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
Salut 🙇 juste pour savoir, si vous connaîtriez un octect de son vide
j'en ai besoin pour ma fonction de record 😅
Reconnaitre un octect vide c'est ça que tu demande ?
nan, en créer
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
Du coup ce que tu cherche c'est créer un audio avec du vide ? comme s'il ne recordait rien ?
yep
J'en ai besoin pour faire un record d'un channel
Mais j'aimerais utilisé un module
Je t'avoue que là ça me brainfuck un peu car j'ai jamais eu à le faire xD
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
Le problème que j'ai rencontré avec typescript en l'apprenant c'était ça ... la compatibilité des modules xD
