#javascript-typescript

1 messages · Page 97 of 1

timid loom
#

Normal

#

Mets des parenthèses autour de prefix + "xd"

azure belfry
#

Comme ca ?

timid loom
#

Remarque on est pas en c si ça se trouve ça fonction en js

#

La il en manque une

#

A la fin

azure belfry
#

?

cyan iron
#

Non ça ne change rien Taink

#

Je viens de vérifier j'étais pas sûr

timid loom
#

Ah ouais

#

Dommage

cyan iron
#

console.log(message.content) dans ton event messageCreate @azure belfry

timid loom
#

T'es en quelle version de Discord js ?

sharp grail
#

Tente déjà de voir si tu reçois bien l'event avec un consle log

cyan iron
azure belfry
timid loom
#

Nan dans message create

#

Avant le premier if

azure belfry
timid loom
#

Yep

cyan iron
#

Ici bg

azure belfry
#

la ,

cyan iron
#

Ouais parfait

#

Maintenant start ton bot et montre nous ta console

azure belfry
cyan iron
azure belfry
#

Y'a rien

cyan iron
#

Tu start même pas le bot

azure belfry
#

Si

cyan iron
#

Abon

timid loom
#

Bah non là il est pas démarré ton bot

cyan iron
#

Si là ton bot il est démarré je suis la reine d'Angleterre

timid loom
#

Pour démarrer le bot tu fais node index.js

#

Dans le dossier du bot

#

Sinon bah ça marche pas

cyan iron
timid loom
#

Nan là il est pas dans le bon dossier

#

C'est dans bot Discord / 2 / bot_2

cyan iron
#

Ah oui suefort

#

Il ouvre les fichiers et pas le dossier

azure belfry
#

Voila pardon j'avais pas vu

#

Ca fais rien

timid loom
#

Tu l'as redémarré depuis la dernière modification que tu as fait ?

cyan iron
azure belfry
#

Nn que start

timid loom
#

Et surtout j'ai pas l'impression que tu as lancé le bon bot

cyan iron
#

Je pense que tu ne comprends pas ce que tu fais pour être honnête, il faudrait que tu apprennes les bases du Javascript avant de commencer, histoire de te mettre bien

azure belfry
#

C'est le bouton vert

cyan iron
timid loom
#

C'est pas le même chemin

cyan iron
#

Comment il peut mettre Start alors

timid loom
#

Ah à moins que ce soit node d'installé là

#

Ouais my bad

cyan iron
#

Ca paraît plus logique

#

Dans tous les cas il devrait plutôt le lancer en faisant node index

timid loom
timid loom
#

Mais bon admettons

cyan iron
#

Mais bon je comprends l'erreur

#

Je le faisais au début..
Sur YouTube certains disent de faire comme ça donc voilà

timid loom
#

Bah tu peux faire ça c'est juste que t'es coincé sur vscode quoi

sharp grail
#

Juste @azure belfry quelle est ta version de discord js ?

cyan iron
#

v13 sûrement

#

S'il vient de débuter

sharp grail
#

Bah ça pourrait expliquer le problème justement x)

azure belfry
#

Nn c'est un fichier qui date de quelmque mois

sharp grail
#

Aah

cyan iron
#

Comment ça ?

#

Explique toi

#

Car si c'est pas en v13 c'est pas messageCreate

sharp grail
#

Oui

#

Justement

timid loom
#

Avant c'était l'évent message, pas messageCreate

cyan iron
#

@timid loom @azure belfry remplace "messageCreate" par "message" ligne 15

sharp grail
#

Taink kapp

timid loom
#

OK je fais ça @cyan iron

cyan iron
#

PTDR

#

Le fail

#

Désolé

azure belfry
timid loom
#

Yep

cyan iron
#

Et si ça marche pas bah harold

sharp grail
#

Sinon je vois les partials

cyan iron
#

Ils sont pas obligatoires

#

Wut ?

#

Ah non l'intent message content n'est pas encore bloqué

#

Si c'est disable de base comme les autres harold

sharp grail
#

Après ca serait bizarre

timid loom
#

C'est automatiquement activable sur les bots <75 serveurs

#

Je crois

cyan iron
#

Oui

#

Mais si c'est disable de base c'est relou

#

Les débutants ne connaissent pas forcément leur existence

#

Ca va juste être des " ça marche pas "

#

Alors que c'est juste l'intent, et à juste titre

timid loom
#

En vrai ça serait bien que tu puisse request l'accès au content de façon exceptionnelle genre pour remplir des formulaires via Discord le temps qu'ils terminent le truc de modal

cyan iron
#

C'est pas encore effectif et on peut déjà faire la demande

timid loom
#

Bah techniquement si le bot est en mention ça passe mais bon

cyan iron
#

30 avril 2022 tous les bots certfiés qui n'ont pas été approuvés ne pourront pas lire le contenu des messages

timid loom
cyan iron
timid loom
#

Yep juste une idée comme ça

cyan iron
#

Ils font exprès pour que tout le monde utilise les / cmds

timid loom
#

T'as toujours les mentions mais c'est pas ultra pratique

cyan iron
#

Ah le fait de mentionner le bot il capte ?

azure belfry
#

Quelqu'un a un peu de temps pour m'expliqer en voc

timid loom
cyan iron
timid loom
cyan iron
#

Mais dans ces cas là Discord donnent l'accès à l'intent je pense

timid loom
azure belfry
#

Ok pas grv merci quand meme

cyan iron
#

Moi j'ai juste dit que je faisais de l'automod et c'est passé direct

cyan iron
timid loom
sharp grail
azure belfry
#

Comment le voit-on ?

cyan iron
timid loom
cyan iron
timid loom
azure belfry
cyan iron
#

v12

#

Maintenant restart ton bot avec le bouton vert

#

Met le !xd

#

Et montre nous ta console

azure belfry
#

Du coup vous savez comment ?

timid loom
#

Bah déjà on est bien d'accord que tu l'as relancé le bot ?

azure belfry
#

oui

dire latch
#

Tu mélanges du v12 et du v13 🤔

signal marsh
#

Help, Je veut que quand je fais je fait le croix ça supprime le message mais quand la première fois ça marche mais la deuxième ça marche encore mais fait crash le bot

#
 
bot.on('clickButton', async (button) => {
            if (button.clicker.user.id !== message.author.id) {
                return
            }
            if (button.message.deleted === true) {
                return
            }
            ids = ''
            console.log(button)
            let i = ''
            let test = button.message.components[0].components
            for (let i = 0; i < test.length; i++) {

                if (test[i].custom_id === button.id) {
                    if (test[i].label !== ':x:') {
                        if (test[i].style === 4) {
                            return message.channel.send(`Vous êtes déjà ${test[i].label} !`).then(msg => {
                                msg.delete({ timeout: 60000 })
                            })
                        }
                    }
                }
            }
            if (button.id == 111) {

                console.log(button.message)

                var buttons = button.message.id
                console.log(button.message.deleted)
                if (!button.message.deleted === true) {
                    return bot.channels.cache.get('929467179076816966').messages.fetch(buttons).then(message => message.delete());
                }
            }
        })

signal marsh
#

v12

oak turret
#

ok

signal marsh
#

pour l'instant car je trouve la v13 compliqué

oak turret
#

t’as qu’a faire

#

button.message.channel.delete()

#

j’imagine que tu veux supprimer le channel d’où vient le message

signal marsh
#

nn le message

#

regarde le rec

oak turret
#

ok attend

#

button.message ça te return quoi

signal marsh
#

ExtendedMessage {channel: ExtendedTextChannel, deleted: false, id: '930850051264233472', type: 'DEFAULT', system: false, …}

oak turret
#

bah fais juste button.message.delete() alors

#

je vois pas pourquoi tu get les messages du channel, si tu veux supprimer le message que le bot a envoyé

#

check ça et tu me dis

signal marsh
#

Oui ça marche pour supprimé le message mais quand je fait 2 fois commande à la 2eme fois ça met Uncaught DiscordAPIError: Unknown Message donc ça fait crash le bot

oak turret
#

bah t’as qu’à mettre une condition

#

if ( button.message ) return button.message.delete();

#

tu mets que ça

#

à la place de get tous les messages

signal marsh
#

toujours mais enfaite le bot veut supprimer le message 2x

oak turret
#

montre ton code là

#

en screen

signal marsh
oak turret
#

mets un .catch()

signal marsh
#

if (button.message) return button.message.delete().catch() comme ça ?

#

si oui ça marche pas

oak turret
#

button.message.delete().catch(() => {})

cyan iron
#

if (button.message instanceof Message) button.message.delete()

unborn knot
#

Hello j'ai un ptit problème

Il me dit que le module n'est pas trouvé js const { idGuildMemberAdd } = require('../config.json');

(le fichier ce trouve à la racine de mon dossier et le fichier avec le code ce trouve dans un sous dossier

Pourtant dans mon index.js (qui ce trouve dans un dossier à la racine de mon projet) cela marche bien js const { token, prefix } = require('../config.json');

#

Je comprend pas d'ou viens le problème 🤔

#

Surement le fait que ça sois un sous dossier?

dire latch
#

Met juste require('./config.json');

#

Au lieu des ..

#

@unborn knot

unborn knot
#

ça me fait tjr la même :/

dire latch
#

Il y a quoi dans ton config.json ?

unborn knot
#
{
    "token": "montoken",
    "prefix": "?",
    "idGuildMemberAdd": "idchannel"
}```
dire latch
#

Fais voir la disposition de tes fichiers

unborn knot
dire latch
#

Ah, ducoups, c'est const { idGuildMemberAdd } = require('../config.json');

unborn knot
#

Oui voilà mais ça marche pas :/

dire latch
#

Hmm

oak turret
#

attend

unborn knot
oak turret
#

tu require ton truc où ?

dire latch
#

C'est dans ton Guildmemberadd

oak turret
#

quel fichier

unborn knot
#

Une fois dans mon index.js et une autre dans mon guildMemberAdd.js

dire latch
#

Qu'il faut modif

#

Dans ton guildMemberAdd.js ou il faut modifié 👍

#

C'est marqué dans ta console

oak turret
#

../../config.json

unborn knot
oak turret
#

../ = tu remontes d’un dossier

#

or là

unborn knot
#

j'avais essayé .../

oak turret
#

c’est events => src

unborn knot
#

Vu que c'était dans un sous dossier

oak turret
#

donc là il le trouvera

#

test

#

tqt ^^

dire latch
#

Au pir, tu peut faire CTRL + ESPACE sur VSC

#

Sa te dis le chemin d'accès 🙂

oak turret
#

moi il me le met automatiquement ouais mais si ça foire je check l’archi du projet et je remonte au bon chemin

#

c’est good @unborn knot ?

unborn knot
#

Yep c'est good thx !

dire latch
#

Dr

oak turret
#

avec plaisir

limpid trout
oak turret
#

oui

static apex
#

bonjour j'ai un problème installation de packages sur la machine est-ce que quelqu'un connait cette erreur?

azure belfry
#

Vous savez comment passez au dessus l'image ?

slim anvil
copper pagoda
#

Ou envoyer l'image puis l'embed selon ta préférence.

azure belfry
#

Okok merci

unborn knot
#

Hello vous savez comment je peux mentionner un membre avec discord.js v13

unborn knot
#

mais ça me donne ça

azure belfry
#

Bonsoir, quelqu'un sait comment faire pour que les citoyens dans mon serv ne puissent pas faire la commande ?

queen ocean
unborn knot
queen ocean
azure belfry
queen ocean
unborn knot
unborn knot
unborn knot
queen ocean
unborn knot
#

Okk pas de pb !

#

Quelqu'un saurais me dire pourquoi le inline de mon addFields ne marche pas svp ?

queen ocean
#

Montre ton embed global ?

unborn knot
#

Ou l'embed en lui même?

queen ocean
# unborn knot

bah si tu as que 1 field comment tu peux dire que ca marche pas ? xD

#

Le inline c'est pas pour que "12" soit devant "Membres discord"

#

Le inline c'est pour aligner les Fields entre eux

unborn knot
#

Ahh 😭 je pensais que c'était pr ça

#

T'a une idée de comment faire pour que la value de mon field soit sur la même ligne que le texte de mon field?

queen ocean
#

Rajoute dans la description

#

Tout simplement xD

#

**Membres discord :** ${taVariable}

unborn knot
#

Comment ça ce fait que c'est pas possible de faire ça?

queen ocean
unborn knot
#

Okk mercii !

burnt parrot
#

Booon, j'essaye d'ajouter un système de vote entre 2 utilisateurs sur mon site maiiis je n'y arrive pas.
J'essaye de save le résultat du vote dans ma db mais cela ne semble pas fonctionner.

view.ejs

    <%- include('./partials/header.ejs') %>
    <%- include('./partials/sidebar.ejs') %>

    <div class="replay-dashboard-section section">
        <div class="replay-dashboard-wrapper">
            <div class="popUpBox" id="boxWinner">
                <div class="replay-section title">
                    <h2 style="text-align: center; font-weight: 700;">Who is the winner ?</h2>
                </div>
                <div class="choice-container">
                <form action="/vote/<%= wager._id %>/<%= wager.opponent %>" method="POST">
                    <button type="submit" class="btn theme-btn round"><%= wager.opponent%></button>
                </form>
                    <h3>OR</h3>
                    
                </div>
            </div>
        </div>
    </div>

view.js (router)

var express = require('express');
var router = express.Router();
var Wager = require('../models/Wager')
var User = require('../models/User')

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated()) return next();
    res.redirect("/login");
}

/* GET view tournament page. */
router.get('/:id', isLoggedIn, async function (req, res, ) {
    const wagers = await Wager.findById(req.params.id, {})
    Wager.findByIdAndUpdate(req.params.id, {
        status: 2
    }).then(() => {
        res.render('view', {
            title: 'Replay - Tournament',
            user: req.user,
            wager: wagers,
        });
    })
});

router.post("/vote/:id/:wager.opponent", isLoggedIn, function (req, res) {
  console.log('Voted for someone')
}
module.exports = router;```
jovial quartz
#

yoo

#

vous allez bien ?

burnt parrot
#

...

jovial quartz
#

les gens quelqu'un sait pourquoi quand je join ca fonctionne mais quitter non svp ?

#

c'est du discordjs

burnt parrot
#

Intents

#

Littéralement, tu avais ta réponse en une recherche

jovial quartz
#

sinon ca ne fonctionnerai pas quand je join

burnt parrot
#

Essaye ça

jovial quartz
#

comment ca

slim anvil
#

parce que le ./ dans la route j'y crois moyen

#

ce n'est pas un chemin mais une route

#

de la même manière que tu fais /:id et non ./:id

burnt parrot
#

Ouais mais j'ai essayé plein de façon

slim anvil
#

pour vérifier déjà que ce soit appelé met juste un console.log dans ta route post

burnt parrot
#

Genre /vote/:id/...

slim anvil
#

vérifier que ce soit bien appelé

#

et oui remet /vote/:id/:wager ca reste plus propre dans tous les cas

burnt parrot
#

Nan, le console.log est pas retourné mais même avec le /vote/:id/:wager le console.log fonctionne pas :/

slim anvil
#

je crois aussi que le default method quand il est pas spécifié sur un form c'est GET

#

donc change le en method="POST"

#

sinon il va faire du get sur cette route et non du POST

burnt parrot
#

Tu parles de ça ?

slim anvil
#

ah oui pardon j'avais pas vu le method autant pour moi

#

tu as changés la route aussi a ce niveau ? dans le action ?

burnt parrot
#

Aucun soucis ^^

slim anvil
#

tu as bien /vote/:id/:wager ?

#

enfin avec les params mais tu as compris

burnt parrot
slim anvil
#

yes et ce n'est pas call ?

burnt parrot
#

Nope! Et je galère avec ça depuis 2 jours ^^'

oak turret
#

t’as rien dans ton network ?

#

genre la route n’est pas du tout du tout appelée ?

burnt parrot
oak turret
#

même si elle n’existe pas dans le network tu le verras en rouge avec un 404, et une erreur à l’intérieur

burnt parrot
oak turret
#

ok et ta route est où ?

#

montre le code de ta route

burnt parrot
#
var express = require('express');
var router = express.Router();
var Wager = require('../models/Wager')
var User = require('../models/User')

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated()) return next();
    res.redirect("/login");
}

/* GET view tournament page. */
router.get('/:id', isLoggedIn, async function (req, res, ) {
    const wagers = await Wager.findById(req.params.id, {})
    Wager.findByIdAndUpdate(req.params.id, {
        status: 2
    }).then(() => {
        res.render('view', {
            title: 'Replay - Tournament',
            user: req.user,
            wager: wagers,
        });
    })
});



router.post("/vote/:id/:wager.opponent", isLoggedIn, function (req, res) {
    
    console.log('Voted for someone')
  })
  

module.exports = router;```
#

Oulah 2 sec

oak turret
#

ouais y a un soucis

slim anvil
#

c'est peut etre une connerie, mais tu veux pas inverser le get et le post dans le doute ? 🤔
j'ai peur qu'il prenne tout ce qui est en url comme le : id

#

dans le doute

oak turret
#

c’est déjà mieux

slim anvil
#

pas sur du tout mais dans le doute tester

oak turret
#

ouais test

burnt parrot
#

Ouais pourquoi pas

slim anvil
#

montre tu as fais quoi

#

🤔 pourquoi il cannot get c'est du post

burnt parrot
#

J'ai changé le method="POST" pour GET

slim anvil
#

non non

#

je te parle dans ton api

#

pas dans ton form

burnt parrot
#

Aaah

slim anvil
#

tu fais passer le router.post au dessus du router.get

#

juste pour tester

#

oui mais non enfaite

#

ca peut pas gener c'est pas la meme method

#

laisse tomber

burnt parrot
#

Toujours la même erreur.. C'est embêtant tout ça ^^

slim anvil
#

Yes yes c'était une connerie ca peut pas venir de là je suis con

#

ça doit etre un truc con que je vois pas

burnt parrot
#

Le truc, c'est que par exemple, sur mon site, y'a un /join/:id qui sert à join un tournoi puis il update le tournoi dans la db pour dire qui a join. Mais quand j'ajoute un troisième arg dans l'url genre /vote/:id/:wager.opponent bah là ça fonctionne pas

slim anvil
#

de mémoire comme ça je ne sais pas si on peut foutre un param avec un . dedans

#

si tu essayes juste :wager sans le .opponent c'est pareille ?

#

je sais qu'une regex ça passe en tant que params, mais un param avec un . comme ça idk

burnt parrot
slim anvil
#

oui mais t'es pas obligé de le mettre

#

ou tu peux mettre wagerOponnent

#

c'est du naming, mais je sais pas comment express interprète le . dans le param

#

c'est peut être pas ça du tout mais au moins on balaye quelques cas

burnt parrot
slim anvil
#

🤔 hmmm

#

on doit passer a coté d'un truc obvious

#

tu veux push sur git et je check ? ce sera plus simple que de te demander de changer x ou y

#

ou met ça sur un sandbox

burnt parrot
#

Yea bien sûr!

#

Aucun rapport mais super beau ton site

slim anvil
#

haha thanks
je te laisse m'envoyer le tout ici ou en mp

cyan iron
#

@burnt parrot Si tu essayes d'enlever le :wagerOpponnent ça donne quoi ?
Est-ce que ça fonctionne ?

#

Ca se trouve c'est juste ton système qui foire

burnt parrot
#

Hahah déso! Mais

burnt parrot
cyan iron
#

Et si tu enlèves le :id carrément ?

#

Tu vas sur le /vote simplement est-ce que ça te console log ton truc
Car si c'est pas le cas ça veut juste dire que ton router fonctionne pas
Et le /:id lui il fonctionne ?

slim anvil
#

c'est good

#

c'est réglé

burnt parrot
#

Attend quoi

cyan iron
#

Enzo quel bg

slim anvil
#

c'était vraiment juste un truc con kappo

cyan iron
#

ça venait de quoi

slim anvil
#

Alors:

#

tu nous avais pas montré ça

burnt parrot
#

............

slim anvil
#

mais tu déclares ton viewRouter avec par default /view

#

donc forcement c'est pas /vote/:id/:id

burnt parrot
#

J'avais pas pensé à ça

cyan iron
#

Et il a pas déclaré l'autre ?

slim anvil
#

mais /view/vote/:id/:id

cyan iron
burnt parrot
#

😭 Deux jours que je galère sur ça, haha

slim anvil
#

Pense a bien remettre dans viewRouter le /vote/:id/:id en .post

#

aussi

cyan iron
#

Bah du coup c'est plutôt voteRouter, ça fonctionne comment son truc ?

cyan iron
burnt parrot
#

Bah en gros, c'est assez incompréhensible

cyan iron
#

Il faut que tu comprennes ce que tu fais bg

slim anvil
#

oui c'est bizarre de mettre ta route dans un /view

#

/view ce sont juste tes pages qui seront affichés

cyan iron
#

Bizarre

burnt parrot
#

Ouais je sais. Il était dans mon app avant mais je l'ai retiré pour tester

#

Et j'ai pas updatedepuis

cyan iron
#

En gros tout ce que tu affiches tu le met sur /view ?

#

mais viewRouter normalement c'est que la route /view

#

et voteRouter /vote et ainsi de suite, même si c'est pas fou

burnt parrot
cyan iron
#

c'est géré automatiquement tout ça ?

#

Ou tu fais tout automatiquement ?

burnt parrot
#

Tu parles de la création des fichiers?

cyan iron
#

De leur gestion plutôt

burnt parrot
cyan iron
#

Voilà

#

Et t'as oublié de le faire pour vote du coup

burnt parrot
#

Ouais et non parce que /vote est juste une url qui sert a save le résultat du vote

#

Puis qui redirige vers /

cyan iron
#

Ouais mais ça reste une route

burnt parrot
#

Attends, jvais te faire un exemple

mystic bison
#

bonsoir tout le monde, j'ai un gros problème (vous vous en doutez sûrement )

cyan iron
#

Don't ask to ask

mystic bison
#
Listening on port 5000
connected to MongoDB
619e7227d7728cf0e96cff79
619e7227d7728cf0e96cff79
undefined
D:\Documents\Dev\JavaScript\Réseau Social\F1 network\f1-twitter\controllers\post.controller.js:16
  if (req.file !== null && req.file.mimetype.includes("image")) {
                                    ^

TypeError: Cannot read property 'mimetype' of undefined
    at Array.<anonymous> (D:\Documents\Dev\JavaScript\Réseau Social\F1 network\f1-twitter\node_modules\multer\lib\make-middleware.js:53:37)
    at listener (D:\Documents\Dev\JavaScript\Réseau Social\F1 network\f1-twitter\node_modules\on-finished\index.js:169:15)
    at onFinish (D:\Documents\Dev\JavaScript\Réseau Social\F1 network\f1-twitter\node_modules\on-finished\index.js:100:5)
    at callback (D:\Documents\Dev\JavaScript\Réseau Social\F1 network\f1-twitter\node_modules\ee-first\index.js:55:10)
    at IncomingMessage.onevent (D:\Documents\Dev\JavaScript\Réseau Social\F1 network\f1-twitter\node_modules\ee-first\index.js:93:5)
    at IncomingMessage.emit (node:events:406:35)
    at endReadableNT (node:internal/streams/readable:1348:12)
PS D:\Documents\Dev\JavaScript\Réseau Social\F1 network\f1-twitter>```
#

voila mon erreur

#

et voici mon code ```js
module.exports.createPost = async (req, res) => {
console.log(req.file);

if (req.file !== null && req.file.mimetype.includes("image")) {
try {
if (
req.file.mimetype != "image/jpg" &&
req.file.mimetype != "image/png" &&
req.file.mimetype != "image/jpeg"
)
throw Error("invalid file");

  if (req.file.size > 5000000) throw Error("max size");
} catch (err) {
  const errors = uploadErrors(err);
  return res.status(201).json({ errors });
}

const newPost = new postModel({
  posterId: req.body.posterId,
  message: req.body.message,
  picture:
    req.file !== null
      ? "./uploads/posts/" + Date.now() + req.body.posterId + ".jpg"
      : "",
  video: req.body.video,
  likers: [],
  comments: [],
})

}

try {
const post = await newPost.save();
return res.status(201).json(post);
} catch (err) {
return res.status(400).send(err);
}
};```

cyan iron
#

req.file est undefined

#

L'opérateur de chaînage optionnel ?. permet de lire la valeur d'une propriété située profondément dans une chaîne d'objets connectés sans avoir à valider expressément que chaque référence dans la chaîne est valide. L'opérateur ?. fonctionne de manière similaire à l'opérateur de chaînage ., à ceci près qu'au lieu de causer une erreur si une référ...

#

En plus, tu peux simplifier ta condition :

if (req.file?.mimetype?.includes("image")) {
mystic bison
#

c'est normal que req.file ne sois pas def

cyan iron
#

Dit toi que tu n'as pas besoin de vérifier si c'est = à null ou undefined

if (!req.file)
if (req.file)

équivalent à

if (req.file === null)
if (req.file !== null) 
burnt parrot
#

Je peux te dm pour te montrer l'exemple ? @cyan iron

cyan iron
#

De ?

burnt parrot
cyan iron
#

Tu peux montrer ici

mystic bison
#

alors je n'ai plus d'erreur mais il ne sait pas enregistrer dans ma base de données

burnt parrot
#

Azy, bref, fait pas attention au backgroup, c'est mon background de stream. Mais en gros, quand je join un tournoi, j'ai un /join/:id mais je n'ai pas créer de route dans mon app.js ou dans mon /routes et il fonctionne... je sais pas si tu comprends

mystic bison
jovial quartz
#

quelqu'un peut m'expliquer pourquoi ca me donne que 3 membres svp ?

#

alors que l'on est plus

dire latch
#

Faut mettre les intents @jovial quartz

jovial quartz
dire latch
#

Les intents discord v13

prisma needleBOT
#
Results for `intents`

0 results in 418.099ms
limited to 0

dire latch
jovial quartz
#

j'ai mis les intents

#

mais trql j'ai fais ca

#

mais le probleme

#

c'est que jsp comment sortir la variable

dire latch
#

Tu met ton let ninja = avant ton guild.members.fetch()

jovial quartz
#

je le met = a rien ?

#

genre a 0

dire latch
#

Ba avant ton guild.members.fetch()

#

Comme tu as fais pour member.filter

jovial quartz
#

hein

#

mais la ligne filter j'ai besoin de la laisser dans le fetch

dire latch
#

Ba oui

jovial quartz
#

bah je fais comment ducp

dire latch
#

Mais tu enlèves let ninja =

#

Genre, je parle français mdrr

jovial quartz
#

je suis juste trop con

dire latch
#

Et tu met let ninja = avant ton guild.members.fetch()

jovial quartz
#

donc explique moi mieux stp

#

okk mais = a quoi

dire latch
#

Ba a rien ??

jovial quartz
#

okk

dire latch
#

Tu le met juste avant ton guild.members.fetch()

#

Comme tu as fais dans ton fetch

jovial quartz
#

bah ca fonctionne pas

#

ca reste 0

dire latch
#

🤔

#

Montre ton code là

jovial quartz
#

tiens

#

n'oublie pas de dire bismilah avant de lire

dire latch
#

Mais je t'ai dis de mettre ton let ninja = avant ton guild.members.fetch()

burnt parrot
#

Ton ninja = ... est dans ton guild.members

jovial quartz
#

j'ai mis

dire latch
#

-__-

jovial quartz
#

j'ai mis let ninja = 0

dire latch
#

Je t'ai jamais dis ça

jovial quartz
dire latch
#

Je t'ai dis de le mettre avant ton guild.members.fetch()

jovial quartz
#

c'est avant

dire latch
#

J'ai jamais dis ça, relis moi

jovial quartz
#

flm

dire latch
#

Ba si tu comprends pas, sa va être difficile

jovial quartz
#

c'est sur

dire latch
#

Je vais pas te faire ton code

burnt parrot
#

... Ton but c'est quoi?

jovial quartz
#

sortir la variable ninja du fetch

burnt parrot
#

En gros tu veux juste avoir le nombre de personne dans ton serveur?

dire latch
#

Il a la solution, faut qu'il comprenne maintenant

sharp grail
jovial quartz
dire latch
jovial quartz
sharp grail
#

on va reprendre de zéro, tu veux savoir combien de personnes ont un rôle dans ton serveur pour manifestement l'utiliser dans ton statut, d'accord. Deux solutions, soit tu mets le reste de ton code dans le résultat de ta promesse (dans ton then), soit tu utilises async et await

jovial quartz
#

okk

burnt parrot
#

Alors tu prends l'id de ton role, tu fais un var memberCount = guild.roles.cache.get(roleID).members.size

#

Ah mais jpense que ça va juste sortir les cached members

burnt parrot
#

Pas faux!

sharp grail
#

oui effectivement

burnt parrot
#

ouais donc guild.fetchMembers()

sharp grail
#

bon, du coup la solution que tu utilises de base me parait correcte 👀

sharp grail
burnt parrot
#

Je fais plus trop de discord.js depuis la v13 ducoup ouais t'as surement raison

jovial quartz
#

@sharp grail je t'aime ca fonctionne merci

sharp grail
mystic bison
sharp grail
mystic bison
#

bah non

sharp grail
#

Bah

#

si req.file est null/undefined, si c'est logique

mystic bison
#

tu vois ça ou ?

#

je me suis mal exprimé

#

il ai bien défini

sharp grail
#

oh ok

#

pardon

sharp grail
mystic bison
#

mais même si j'ai une image je n'ai rien d'enregistré dans ma base de données

sharp grail
#

je te montre

mystic bison
#

ok

sharp grail
#
module.exports.createPost = async (req, res) => {
    console.log(req.file);
  
    if (req.file?.mimetype?.includes("image")) {
      try {
        if (
          req.file.mimetype != "image/jpg" &&
          req.file.mimetype != "image/png" &&
          req.file.mimetype != "image/jpeg"
        )
          throw Error("invalid file");
  
        if (req.file.size > 5000000) throw Error("max size");
      } catch (err) {
        const errors = uploadErrors(err);
        return res.status(201).json({ errors });
      }
      // cette variable n'est accesible que depuis ce block du à la portée de const
      const newPost = new postModel({
        posterId: req.body.posterId,
        message: req.body.message,
        picture:
          req.file !== null
            ? "./uploads/posts/" + Date.now() + req.body.posterId + ".jpg"
            : "",
        video: req.body.video,
        likers: [],
        comments: [],
      })
    }
  
    try {
      // newPost ne sera pas accessible depuis ici, et encore moins si il n'y a pas d'image
      const post = await newPost.save();
      return res.status(201).json(post);
    } catch (err) {
      return res.status(400).send(err);
    }
};
mystic bison
#

comment je peux régler ça ?

sharp grail
#

en changeant de place la déclaration de ta variable

mystic bison
#

je devrais la mettre où ?

sharp grail
#

tu penses à quoi ?

mystic bison
#

j'ai un peut de mal a suivre je viens que me remettre au dev j'en avait pas fait depuis 2 mois a cause de se problème et je suis un peut fatigué

sharp grail
#

je comprends.. mais il faut que tu réfléchisses à la portée de tes variables, propose au moins des idées, c'est en essayant qu'on apprend

mystic bison
sharp grail
sharp grail
#

sauf si tu as besoin qu'il soit accesible autre part

mystic bison
#

if (req.file) c'est égal à if (req.file !== null) c'est ça ?

mystic bison
#

j'ai résolu des erreurs

#

j'ai fait des modifications avec wailrone

#

en revanche je n'ai rien dans ma base de données et dans mon terminal j'ai undefined

sharp grail
#

req.file qui est undefined surement 🤔

mystic bison
#
module.exports.createPost = async (req, res) => {
  console.log(req.file);

  if (req.file?.mimetype?.includes("image")) {
    try {
      if (
        req.file.mimetype != "image/jpg" &&
        req.file.mimetype != "image/png" &&
        req.file.mimetype != "image/jpeg"
      )
        throw Error("invalid file");

      if (req.file.size > 5000000) throw Error("max size");
    } catch (err) {
      const errors = uploadErrors(err);
      return res.status(201).json({ errors });
    }

    const newPost = new postModel({
      posterId: req.body.posterId,
      message: req.body.message,
      picture:
        req.file
          ? "./uploads/posts/" + Date.now() + req.body.posterId + ".jpg"
          : "",
      video: req.body.video,
      likers: [],
      comments: [],
    })
  }

  try {
    const post = await newPost.save();
    return res.status(201).json(post);
  } catch (err) {
    return res.status(400).send(err);
  }
};
sharp grail
#

bah

#

c'est logique

mystic bison
#

ah bon ?

sharp grail
#

c'est exactement ce que je t'ai dit au dessus

#
try {
    // ici, newPost n'est pas accessible
    const post = await newPost.save();
    return res.status(201).json(post);
  } catch (err) {
    return res.status(400).send(err);
  }
#

La « portée » d’une variable désigne l’espace du script dans laquelle elle va être accessible. En effet, toutes nos variables ne sont pas automatiquement disponibles à n’importe quel endroit dans un script et on ne va donc pas toujours pouvoir les utiliser.

En JavaScript, il n’existe que deux espaces de portée différents : l’espace global et l’espace local. Pour rester très simple, l’espace global désigne l’entièreté d’un script à l’exception de l’intérieur de nos fonctions. L’espace local désigne, à l’inverse, l’espace dans une fonction.

Ici, vous devez bien retenir la chose suivante : une variable définie dans l’espace global d’un script va être accessible à travers tout le script, même depuis une fonction. En revanche, une variable définie dans une fonction n’est accessible que dans cette même fonction et ne peut pas être manipulée depuis l’espace global du script.

depuis https://www.pierre-giraud.com/javascript-apprendre-coder-cours/portee-variable-return-fonction/

#

ça donnerait un truc comme ça

module.exports.createPost = async (req, res) => {
    console.log(req.file);
  
    if (req.file?.mimetype?.includes("image")) {
        try {
        if (
            req.file.mimetype != "image/jpg" &&
            req.file.mimetype != "image/png" &&
            req.file.mimetype != "image/jpeg"
        )
            throw Error("invalid file");

        if (req.file.size > 5000000) throw Error("max size"); 
        } catch (err) {
            const errors = uploadErrors(err);
            return res.status(201).json({ errors });
        }
    }
  
    try {

        const newPost = new postModel({
            posterId: req.body.posterId,
            message: req.body.message,
            picture:
                req.file
                ? "./uploads/posts/" + Date.now() + req.body.posterId + ".jpg"
                : "",
            video: req.body.video,
            likers: [],
            comments: [],
        });

        const post = await newPost.save();
        return res.status(201).json(post);
    } catch (err) {
        return res.status(400).send(err);
    }
};
mystic bison
#

mes

#

merci

#

ça fonctionne

#

j'avais oublié la portée des variables j'avais complètement oublié en Js je suis en train d'apprendre le C et C++ en cours je me mélange les pinceaux

#

je te remercie infiniment

sharp grail
#

T'inquiète pas bongoTap

mystic bison
#

merci infiniment

crystal rune
#

Bonjour !
Excusez moi de vous déranger , mais ( cela peut paraitre bizarre ... ) auriez-vous un code complet en Discord.JS svp ?
Merci d'avance

sharp grail
#

Bonsoir, qu'est ce que tu entends par code complet en discord.js ? Ensuite, ici c'est pour l'entraide ! Pour faire des demandes ou proposer des services c'est par ici https://g-ca.fr/offres

crystal rune
#

AH

#

Ok

crystal rune
sharp grail
crystal rune
#

Ok

sharp grail
#

alors, pas exactement, pour ce que tu veux faire c'est plutot

if (Target.id != Sender.id)
unborn knot
#

Ah okk thx, déso je suis pas trop familier avec la syntaxe de js

#

😦

sharp grail
#

ou !==, si il faut que les types soient égaux

sharp grail
#

la doc est plutot bien faite donc hésite pas

unborn knot
#

Quelqu'un saurais comment je peux faire pr get le channel dans lequel un membre a executé une commande svp?

sharp grail
#

bien sur

#

slash command ou avec des messages ?

unborn knot
#

slash command

sharp grail
#

interaction.channel

desert riverBOT
sharp grail
#

la doc de discord.js aussi est très bien faite donc hésite pas yeah

unborn knot
#

Merci!

burnt parrot
#

Re!
**Explication du projet: **
Tu créer un tournoi sur le site et tu fais un buildfight sur fortnite, celui qui gagne le tournoi gagne des crédits sur le site que tu peux ensuite withdraw en argent irl (paypal, crypto, etc). Bref, une fois que tu as finis le tournoi, les deux joueurs qui ont fait le tournoi doivent dire qui a gagné. Si les deux ont choisi la même personne, cette personne sera déclaré gagnant. Si ils ont un choix différent, on va demander des images du résultat fortnite.
Je fais mon site en ejs pour le front et nodejs et mongoose pour le back.

Mon problème
Je ne comprends pas comment faire pour que les deux utilisateurs qui ont fait le tournoi puissent voter pour qui est le gagnant et que le résultat de leurs choix/vote soit save dans ma db
En gros, Comment est ce que je pourrais faire pour que le résultat des boutons se savent dans ma db?

                <div class="choice-container">
                    <form action="/view/vote/<%= wager._id %>/<%= wager.createdBy %>" method="post">
                        <button id="vote" type="submit" class="btn theme-btn round voteB"><%= wager.opponent %></button>
                    </form>
                    <h3>OR</h3>
                    <form action="/view/vote/<%= wager._id/<%= wager.opponent %>" method="post">
                        <button id="vote" type="submit" class="btn theme-btn round voteB"><%= wager.opponent %></buttom>
                    </form>
                </div>```
zenith wave
#

tu a deja save dans ta db ? @burnt parrot et oui je suis la aussi

#

sinon si tu nous explique quelle etape tu a du mal cela pourrait nous aider

#

tu a du mal a recup le clik ou juste a save dans la db ?

burnt parrot
#

En gros, dans ma db, y'aura choice1 et choice2.
Choice1 = Résultat du vote utilisateur #1
Choice2 = Résultat du vote utilisateur #2

zenith wave
#

ok je vois

#

tu peux faire un onclik avec une fonction qui prend des parametre

keen narwhal
#
const canvas = require("canvas");

const discord = require("discord.js")


const Discord = require("discord.js");
const Client = new Discord.Client({


    intents : [
       Discord.Intents.FLAGS.GUILDS,
       Discord.Intents.FLAGS.GUILD_MESSAGES,
       Discord.Intents.FLAGS.GUILD_MEMBERS,
Client.on("guildMemberAdd", async member => {
    console.log("un membre est arrivé.");
    Client.channels.cache.get("926933090906017812").send("<@" + member.id + "> bienvenue sur le serveur.");
    
    var canvas = Canvas.createCanvas(853, 480);

    ctx = canvas.getContext("2d");
    
    var bakground = await Canvas.loadImage("./bakground.png");
    ctx .drawImage(bakground, o, o, 853, 480);

    var attachement = new Discord.MessageAttachement(canvas.toBufer(), "welcom.png");

    Client.channels.cache.get("926933090906017812").send({files: [attachement]});
});
#

sa ne m'affiche aucune éreure mais quand quequn rejoint le serveur sa nevoie pas l'images quelqun peut mexpliquer pourquoi et quel codes effectuer pour i remedier

keen narwhal
#

Enleve l'espace

#

Je fini ma game, et je vérifie plus ton code après cela, cependant, je pense que c'est déjà un problème majeur que je viens de t'envoyer ci-dessus.

#

oui merci

slim anvil
#

j'ai pas lu le problème mais ça ne changera rien d'enlever l'espace

#

ça fonctionne avec ou sans, même si ton drawImage est à la ligne d'en dessous

timid loom
#

canvas.toBufer()

#

il manque un f

#

je sais pas si c'est ça mais déjà

slim anvil
#

yes plus probable déjà

timid loom
#

là pour le coup c'est déjà un vrai problème

keen narwhal
#

Déjà, tu as mis tout ton code dans le array d'intent
Ensuite tu crées une variable canvas alors qu'il y'a déjà une constante qui porte ce nom
Donc tu devrais avoir une erreur, sauf que comme tu utilises var et que c'est de la merde, ça ne détecte pas que le nom est déjà pris
Ta variable ctx flotte dans le vide, elle est déclarée sans mot clef
Juju64110 — Aujourd’hui à 16:54
mais j'ai pourtant fais comme dans le tutos
『🌸』 嵐 Lucifer リーダー『🍁』 — Aujourd’hui à 16:55
Bah non, du coup
Bon, commence déjà par corriger le peu de code que tu as pour l'instant
Déjà change tes import
Mets des import de valeur, plutôt qu'un import par clef
const { func } = require('file');

Au lieu de

const FILE = require('file');
FILE.func();

#

voila se quond ma dit mais je nes pas compris

timid loom
#

nan mais t'as fait ce qu'on t'as dit ou pas?

keen narwhal
#

oui

timid loom
#

et ce qu'il dit est vrai

#

il faut que tu ferme ton array avec un ] sinon le code est invalide

keen narwhal
#

ha ok

timid loom
#

fin y a plein de problèmes

#

mais ça ton éditeur peut te le dire normalement

keen narwhal
#

sa me dis sa

timid loom
#

nan mais au delà de la console de debug

#

tout ton code doit être souligné en rouge

keen narwhal
#

non

#

il ne les pas

timid loom
#

bon ok bah bizarre

keen narwhal
#

bon je crois que je suis pas aite pour le programations

timid loom
#

en gros il faut juste comprendre que en programmation

#

la casse (minuscule ou majuscule) c'est important

#

que chaque caractère est nécessaire sinon ce que tu dis n'a pas le même sens

#

etc

#

la programmation c'est pas "fait" pour qui que ce soit

#

il faut juste comprendre ce qu'on écrit

#

y a rien de magique

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

const Client = new Discord.Client({
    intents : [
        Discord.Intents.FLAGS.GUILDS,
        Discord.Intents.FLAGS.GUILD_MESSAGES,
        Discord.Intents.FLAGS.GUILD_MEMBERS,
    ]
});

Client.on("guildMemberAdd", async (member) => {
    console.log("un membre est arrivé.");
    Client.channels.cache.get("926933090906017812").send("<@" + member.id + "> bienvenue sur le serveur.");
    
    const cv = canvas.createCanvas(853, 480);

    const ctx = cv.getContext("2d");
    
    const bakground = await cv.loadImage("./bakground.png");
    ctx.drawImage(bakground, 0, 0, 853, 480);

    const attachement = new Discord.MessageAttachement(cv.toBuffer(), "welcom.png");

    Client.channels.cache.get("926933090906017812").send({ files: [attachement] });
});

Client.login('ton token ici');
#

tiens analyse ça

#

c'est ton truc corrigé

keen narwhal
timid loom
#

mdrrr

#

bah il se peut qu'il manque deux trois trucs

#

mais normalement ça passe

keen narwhal
#

ben maitenant il est plus afficher en ligne

timid loom
#

bah si y a des erreurs dans la console tu peux corriger

keen narwhal
#

sa me mets bot operationnel

burnt parrot
keen narwhal
#

bon ben je ves tout supr et recommencer mon codes a zero

burnt parrot
#

Un truc comme

document.getElementById(voteBtn").addEventListener("click", function() {
    voteBtn(wager.opponent);
}, false);``` ? @zenith wave
zenith wave
#

oui

burnt parrot
#

Okok

#

Merci

jovial quartz
#

yoo

#

vous allez bien ?

#

vous savez comment on envoie un message only you can see svp

#

genre un message que seul nous pouvons voir

#

je trouve rien dessus

copper pagoda
#

C'est avec les interactions tu as juste a mettre le paramètre ephemeral à true

jovial quartz
copper pagoda
#

Peut être en faisant message.interaction j'ai pas essayé

keen narwhal
#

bonjour , j'ai un problème avec un bot que j'ai trouvé sur github

#

j'ai installé tous les packages

#

et j'ai cette erreur : TypeError [CLIENT_MISSING_INTENTS]: Valid intents must be provided for the Client.

dire latch
#

Tu as pas mis les intents sur ton bot

keen narwhal
#

si sur discord developement j'ai mis

dire latch
#

Oui mais faut dans le code aussi

keen narwhal
#

ah merde

#

comment je peux faire ?

prisma needleBOT
#
Results for `intent`

5 results in 479.302ms
limited to 5

intentionz

dsc.gg/kaeden
Hello! Have a fun time with a lot of bots! Become friends with the other fun and sweet people on this server!

👋 𝓞𝓵𝓲𝔀𝓲𝓾 👋

dsc.gg/oliwiu
Que onda amigo!
Te invitamos a Oliwiu un server social el cual intentamos mejorar dia a dia.

Ampeer Development

dsc.gg/ampeer
We are Ampeer, a multi-service organization/company that is intent on making services as cheap as possible, maybe even free, so people can thrive, developers and non-developers alike!

The current A...

Intention - 1.17

dsc.gg/intention
Добро пожаловать на новый ламповый майнкрафт-сервер!

Intent Link

dsc.gg/intent
Takes you to the official server
Claimed so no one else does

desert riverBOT
#

:_: Intents (extends BitField)
Data structure that makes it easy to calculate intents.

keen narwhal
#

euh

#

je sais pas ou aller la

dire latch
keen narwhal
#

oui mais je comprends pas

#

j'ai les bons flags

dire latch
#

C'est quel lien github ?

keen narwhal
#

j'ai des comptes et enfaite je veux les mettre dedans

dire latch
#

Ok, je viens de regarder

#

Tu as installé la dernière version de discord.js qui est la V13 actuellement

keen narwhal
#

oui

dire latch
#

Or que celui sur le github, c'est du V12

keen narwhal
#

ah

#

comment je peux l'update ?

dire latch
#

Tu modifies tout pour du v13

#

Ou sois tu met ton discord.js en v12

#

Et tu apprends pour le modifié en v13

keen narwhal
#

comment je peux le mettre en v12 ?

dire latch
#

npm i discord.js@12.5.1

sharp grail
#

@12.5.1 pour la dernière version de la v12

dire latch
#

Thx mdr

keen narwhal
#

Ok merci

keen narwhal
#
console.log("test");
const Discord = require("Discord.js");
const Client = new Discord.Client({
    intents: [
        Discord.Intents.FLAGS.GUILDS,
        Discord.Intents.FLAGS.GUILD_MESSAGES
    ]
});
const préfix = "!"

Client.on("ready", () =>{
console.log("bot operationel");


Client.on("messageCreate", message => { 
    if (message.author.bot) return; 

    if(message.content === préfix + "ping"){

    }
});


Client.login("token");

sa me met une erreur a mon token

keen narwhal
#

retires les "" à Client.login("token")

#

@keen narwhal

keen narwhal
worn garnet
#

hello hello, j'ai une erreur avec THREEjs, j'ai deja fait le meme setup et ca marchais. cependant cette fois ci je le fait avec vuejs. Je suppose que c'est une erreur de Vue mais je n'arrive pas a le résoudre 🤔

coarse hinge
worn garnet
#

yup je vais check de ce coter en espèrent le résoudre 🤔

#

conclusion, threejs + vuejs mauvaise idee 😅

slim anvil
#

Ça peut t’aider je pense à intégrer three sans vue

#

Dans*

worn garnet
burnt parrot
#

Hello, petite question...
Voici mon code

view.ejs

<!-- header + sidebar  -->
    <%- include('./partials/header.ejs') %>
    <%- include('./partials/sidebar.ejs') %>

    <div class="replay-dashboard-section section">
        <div class="replay-dashboard-wrapper">
            <div class="popUpBox" id="boxWinner">
                <div class="replay-section title">
                    <h2 style="text-align: center; font-weight: 700;">Who is the winner ?</h2>
                </div>
                <div class="choice-container">
                    <form action="/view/vote/<%= wager._id %>" method="post"> 
                        <input type="submit" name="player" class="btn theme-btn round voteB" value="<%= wager.createdBy %>">
                        <input type="submit" name="player" class="btn theme-btn round voteB" value="<%= wager.opponent %>">
                    </form>
                </div>
            </div>
        </div>
    </div>```

**app.post vote (version console.log)**
```js
app.post('/view/vote/:id', async function (req, res) {
  console.log(req.body)
})```

**app.post vote (version save db)**
```js
app.post('/view/vote/:id', async function (req, res) { 
    Wager.findByIdAndUpdate(req.params.id, {
      choice1: req.body,
    })
})```

**__EXPLICATION__**
Alors en gros, je voudrais save la value de mon input dans ma db (mongoose). J'arrive très bien à récup la value dans ma console mais je n'arrive pas à la save dans ma db...
#

Si je clique sur Alex0754, il sera affiché alex0754 dans la console et pareil pour l'autre utilisateur

burnt parrot
#

update: J'arrive à faire un Wager.create avec le req.body.. Donc le problème viens surement du req.params.id.
Update2: J'arrive à console.log mon req.params.id
Update3 : C'est bon!

mystic bison
#
  if (req.file?.mimetype?.includes("image")) {
      try {
      if (
          req.file.mimetype != "image/jpg" &&
          req.file.mimetype != "image/png" &&
          req.file.mimetype != "image/jpeg"
      )
          throw Error("invalid file");

      if (req.file.size > 50000) throw Error("max size"); 
      } catch (err) {
          const errors = uploadErrors(err);
          return res.status(201).json({ errors });
      }
  }

  try {

      const newPost = new postModel({
          posterId: req.body.posterId,
          message: req.body.message,
          picture:
              req.file
              ? "./uploads/posts/" + Date.now() + req.body.posterId + ".jpg"
              : "",
          video: req.body.video,
          likers: [],
          comments: [],
      });

      const post = await newPost.save();
      return res.status(201).json(post);
  } catch (err) {
      return res.status(400).send(err);
  }
};
#

il enregistre quand meme les fichiers que je veux pas

sharp grail
#

c'est quoi les fichiers que tu ne veux pas ? 🤔

mystic bison
#

touts les fichier à pars les fichier jpg, png, jpeg

sharp grail
#

mmh

hybrid elk
#

Quelqu'un peut m'aider? J'ai un soucis.

#

En gros

#

Y a l'argument message mais je voudrais aussi avoir le client

#

Mais je sais pas comment faire

sharp grail
desert riverBOT
hybrid elk
#

Le client c'est le bot on est d'accord?

sharp grail
#

yep x)

hybrid elk
#

Ah bah ça résout mon prob alors

#

merci

sharp grail
#

pas de soucis

mystic bison
sharp grail
#

bah

#

si les fichiers ne sont pas des images

#

le contenu de la condition s'exécutera pas

#

donc ils passeront kapp

mystic bison
#

le dois rajouter une esle

mystic bison
#

j'ai vraiment besoin d'aide

sharp grail
#

alors

sharp grail
mystic bison
#

?

sharp grail
#

Les fichiers

#

Dont leur mimetype n'inclus pas image

#

Ils passent sans vérification

cyan iron
#

Salut, j'ai un petit problème avec reccursive-readdir : https://www.npmjs.com/package/recursive-readdir

En gros voici mon code :
Cette fonction s'exécute avant le lancement du serveur, donc le 'haha' se met dans la console avant le lancement du serveur fastify.
Le for const, c'est pareil, d'abord la méthode GET, puis la méthode POST
Ce qui me pose problème c'est la fonction recursive(...). En fait la fonction se " termine " avant que les recursive aient faient leur taff. Le problème aussi c'est que les fichiers de la méthode POST se load avant ceux de la méthode GET ( dans le for of c'est l'inverse, d'abord je vois le GET et ensuite le POST).
Bref j'espère que vous pouvez m'aider, merci

for (const method of readdirSync(routesPath)) {
        recursive(resolve(__dirname, "..", "routes", method), (err: Error, files: any) => {
            if (err) return console.log(err)
            for (const file of files) {
                if ((file.endsWith(".js") || (file.endsWith(".ts") && !file.endsWith(".d.ts")))) {
                    console.log(file)
                    //api.route(require(file).default)
                }
            }
        })
    }
console.log('haha')
hazy mirage
#

@cyan iron
Comme ça ça regle ton probleme du 'haha', essaye voir si ça regle pas ton get/post mais j'ai un doute kappa

for (const method of readdirSync(routesPath)) {
    const files = await recursive(resolve(__dirname, "..", "routes", method)).catch(err => console.log)
    for (const file of files) {
        if ((file.endsWith(".js") || (file.endsWith(".ts") && !file.endsWith(".d.ts")))) {
            console.log(file)
            //api.route(require(file).default)
        }
    }
}
console.log('haha')
cyan iron
#

Je crois que j'ai trouvé un module similaire qui utilise des promises

#

@hazy mirage la fonction recursive ne retourne pas de promise donc ça marche pas ta technique

hazy mirage
cyan iron
#

Dans tous les cas j'ai réussi avec l'autre

#

C'est même mieux

#

Merci quand même 🙂

keen narwhal
#

Bonjour, j'ai créer un bot discord sous js et j'avais mis toute mes commandes dans un suel fichier (index.js) mtn je voudrais faire avec plusieurs fichiers différent (genre ban.js ou ping.js ....) mais je ne sais pas comment faire pouvez vous m'aider ?

cyan iron
keen narwhal
#

Merci et où puis-je trouver ceci ?

cyan iron
#

En voici un par exemple

keen narwhal
#

Merci !

#

J'ai config et tout mais j'ai cette erreur

worn garnet
#

salut, je fait un rendu 3D avec THREEjs et j'aimerais mettre sur mon screen 1 (celui en rouge) une page web fait a la main (donc pas heberger) mais je ne sais pas comment m'y prendre 🤷🏿‍♂️

mystic bison
#

j'ai besoin d'aide, je sais pas comment déployer mon projet react

#

quelqu'un pourrait me guider

slim anvil
#

Suffit de faire un npm ou yarn build

#

La commande est dans ton package.json

#

ça va te générer un dossier dist avec tout les fichiers dont tu as besoin

#

Par exemple

hybrid berry
#

@slim anvil c'est quoi la dif entre yarn et npm ?

slim anvil
#

c’est juste un gestionnaire de package différent

hybrid berry
#

ah okii

slim anvil
#

Le mieux ça reste d’utiliser pnpm qui a une écriture plus rapide je crois

#

Après c’est toujours les goûts et les couleurs

delicate yew
#

Salut

#

excusez moi

#

j'ai un ptit problème avec un code de captcha

#

Alors en gros

#
     .then(async messages => {
                if (messages.first().content === genCaptcha) {

                    if (message.deletable) {
                        message.delete();
                    }
                    let verificationEmbed = new Discord.MessageEmbed()
                        .setAuthor(member.user.tag, member.user.avatarURL({
                            dynamic: true
                        }))  
                        .setColor(colors.green)
                        .setDescription(`💕 **Tu viens d'être vérifié sur ${member.guild.name} !**`)
                    const role = member.guild.roles.cache.find(role => role.id === "933439884495044608");
                    member.roles.add(role);
                    
                    await channelnew.send(verificationEmbed).then(m => m.delete({
                        timeout: 3000
                    }))
                    console.log(`${member.tag} has been verified!`)
                } else {

                        member.kick().catch
                        channelnew.bulkDelete(2)
                        channelnew.createInvite({
                            maxAge: 0,
                            maxUses: 100
                        }).then(async invite => {
                            let retryEmbed = new Discord.MessageEmbed()
                            .setAuthor(member.user.username)
                            .setThumbnail(member.guild.iconURL({
                                dynamic: true
                            }))
                            .setTitle("Tu as raté la vérification")
                            .setColor(colors.red)
                            .setDescription(`Tu as raté la vérification \`${member.guild.name}\`! Si tu veux réesayer clique sur le lien pour rejoindre ${invite} pour rejoindre!`)
                            await member.send(retryEmbed)
            
                        })


            }
            });
    });```
#

dans cette partie

#

j'aimerai que si la personne réussis ou se trompe

#

ça supp son message (le code qu'il met)

#

et le message captcha du bot (l'embed avec le message de bienvenue + le code qu'il y a dessus)

#
 if (message.deletable) {
                        message.delete();
                    }```j'ai mis ça mais ça marche pas
#

comme j'ai essaye pleins de chose

#

mais j'y arrive pas

ashen rapids
#

Tu as essayé de débug ?

#

Avec un debugger ou des console.log ?

delicate yew
#

nan mais le truc

#

c'est que

#

j'veux jsute qui supp les msg

#

y'a pas d'erreur en soit

ashen rapids
#

Oui mais debugger ça te permettrait justement de voir où ça bloque

delicate yew
#

je sais où il faut mettre

#

je sais pas juste comment

#

j'sais pas comment expliquer 😭

#

@ashen rapids

#

Ok ok

#

j'vais essayer d'expliquer

#

en gros tu vois tu rejoins un serveur et le message du bot avec un captcha à faire

#

toi tu fais ton code

#

moi je voudrai que si tu réussit

#

ou tu rate

#

les 2 msg se suppriment

#

le tiens

#

et celui du bot

#

sauf que j'sais pas comment faire

#

je sais où mettre et tout

#

mais aps comment

ashen rapids
delicate yew
#

j'lai repris

#

un peu

delicate yew
#

@ashen rapids

dire latch
#

Hey !

#

Pourquoi j'ai cet erreur ?

#

Code:

module.exports = async (bot, message) => {
    if(message.author.bot || !message.guild || message.partial) return;
    const fetchGuildAuditLogs = await message.guild.fetchAuditLogs({
        limit: 1,
        type: 'MESSAGE_DELETE'
    });

    const latestMessageDeleted = fetchGuildAuditLogs.entries.first();
    if (!latestMessageDeleted) return console.log(`Le message de ${message.author.tag} a été supprimé mais je ne trouve pas l'auteur de la suppression.`);
    const { executor, target } = latestMessageDeleted;

    console.log(message.content)
    bdd.query(`SELECT * FROM logs WHERE guild_id = '${message.guild.id}'`, (err, log) => {
        const embed = new MessageEmbed()
        .setAuthor("Suppresion d'un message !")
        .setColor("#dc143c")
        .setDescription(`**Action**: Suppression de message\n**Message supprimé**: ${message.content}\n**Auteur du message**: ${target} - ${target.tag} (🆔 ${target.id})\n**Supprimé par**: ${executor} - ${executor.tag} (🆔 ${executor.id})`)
        .setTimestamp()
        .setFooter(`${executor.tag}`, executor.avatarURL());
        if (!log[0]) {
            bot.channels.cache.get('743070392729600040').send({embeds: [embed]});
        } else {
            bot.channels.cache.get(`${log[0].channel_id}`).send({embeds: [embed]});
        }
    });
};```
#

V13 de discord.js

bold sparrow
dire latch
#

J'obtient null @bold sparrow

bold sparrow
#

console log message

#

A partir de ces éléments tu peux comprendre pourquoi ça ne fonctionne pas correctement

dire latch
slim anvil
#

voilà tu as la réponse author est à null dans ton object

dire latch
#

Oui mais pk il est en null 🤔

bold sparrow
#

Btw j'ai une petite erreur avec mon DOM, j'aimerais qu'il rentre dans la boucle mais il ne veut pas :/

slim anvil
#

i est égal à rien

#

mais pourquoi pas juste faire un for of

#

éviter de déclarer un i etc, au moins il va juste naviguer dans ton tableau

slim anvil
dire latch
#

Hmm

bold sparrow
#

Et tu le fais avec l'exécuteur

bold sparrow
#

Ah mais du coup j'ai plus d'index mdrr

#

je voulais un index moi

slim anvil
#
for (const [index, value] of translatedItems.entries()) {
 console.log(index, value
}
#

sinon juste un forEach aussi ceci dit

bold sparrow
dire latch
#

Toujours pareil

bold sparrow
#

Ah, bah t'as pas d'author

#

Tant pis

dire latch
#

Ba jsp pk mdrr

bold sparrow
#

Qui l'a supprimé le message ?

dire latch
#

Moi

bold sparrow
#

Voilà

#

Si author est égal à null, c'est que c'est toi

#

Y'a beaucoup de problèmes pour récupérer l'auteur qui a supprimé le message si c'est toi

#

c'est dit dans djs guide je crois

dire latch
#

🤔

bold sparrow
dire latch
#

Donc, on peut pas savoir a qui appartient le message ?

bold sparrow
#

Si quelqu'un delete le message de qqun d'autre tu peux le savoir

dire latch
#

C'est pas mon propre message

bold sparrow
#

Ah

#

Bah écoute jsp

dire latch
#

Ba moi non plus

#

Pourtant, en v12, sa fonctionne nickel

bold sparrow
#

mets en commentaire // Donne moi l'auteur stp

#

Avec un peu de compassion il te le donnera ..

#

Et plus sérieusement, check discordjs guide, ils ont du en parler

slim anvil
#

@bold sparrow

for (const [index, value] of document.querySelectorAll('.translate').entries()) {
 console.log(index, value)
}
#

mais sinon forEach tout simplement tu auras element et itération en 2e param

bold sparrow
#

forEach il voulait pas

#

Mais bien vu le querySelector !

#

Ca fonctionne impec, merci

slim anvil
#
document.querySelectorAll('.tra').forEach((value, index) => {
    console.log(index, value)
})
#

pour le foreach

bold sparrow
#

Ouais du coup fallait faire un querySelector dans tous les cas, je préfère itérer

#

thanks

dire latch
#

Ok, j'ai ça, mais, le message est null maintenant 🤔

timid loom
#

Normal si il est supprimé

bold sparrow
#

Là pour le coup c'était évident

dire latch
#

Ba 🤔

bold sparrow
#

Faut récupérer le content avant la suppression

dire latch
#

Vraiment de la merde la v13 sérieux

timid loom
#

Mdrrr

bold sparrow
#

ptdrrr

#

y'a encore sûrement quelques soucis

#

Autrement elle est bien foutue

dire latch
#

Nan de la merde tout court

timid loom
#

T'as raison ça doit être la v13

#

Je vois que ça

dire latch
#

Ba en v12, sa fonctionne nickel

#

En v13, sa fonctionne plus, donc oui

bold sparrow
#

Il y a forcément un autre moyen

dire latch
#

Idk

bold sparrow
#

Jsp moi t'as les intents des messages ?

dire latch
#

Oui

bold sparrow
#

t'as le lien gca dans ton statut ?

dire latch
#

Non pk ?

#

Mdr

bold sparrow
#

Ca doit être pour ça

dire latch
#

Nimp 😂

bold sparrow
#

Nan vraiment je vois pas

slim anvil
#

Pourquoi tu fais pas juste un objet avec les infos dont t'as besoin pour ton log, comme ca même si tu le supprimes tu as deja tout stocké ?

#

const deletedMessages= {
author: message.author
}
message.delete()
// ....

bold sparrow
#

Dans ces cas là, ne pas le faire à l'event messageDelete

slim anvil
#

ah c'est a l'event messageDelete

bold sparrow
#

Yes, donc impossible

dire latch
#

Oui

bold sparrow
#

y'a pas une fonction beforeDelete() native kappathugs

ashen rapids
#

Il faut aller chercher dans les Audit Logs

slim anvil
#

Pourtant il y a bien l'author dans les param message c'est bizarre

ashen rapids
#

Mais pas fiable

bold sparrow
#

C'est que t'as aucune sûreté de récupérer

#

Lui ne l'avait pas en fetchant

ashen rapids
#

Tu peux pas faire autrement me semble

#

J'y ai passé des heures pourtant 😏

bold sparrow
#

Au pire .. si c'est null, tu dis que l'auteur n'a pas été trouvé

#

Point final

ashen rapids
#

Du coup quand je sais que l'audit log est à 100% bon : j'affiche
Quand je sais pas, j'affiche rien

#

Attends

#

Je crois que j'ai mal compris

slim anvil
#

fin sur gca on a les logs des msg delete

#

donc c'est juste mal fait

#

y a forcement un truc que tu as oublié ou mal fait

ashen rapids
#

Tu cherches à savoir qui a supprimé le message ou l'auteur qui a écrit le message ?

slim anvil
#

l'auteur du msg

ashen rapids
#

Haaaaa

#

Oui en effet, ça c'possible

dire latch
#

Hmm

ashen rapids
#

Oue moi je le récupère comme ça : const author = message.author;

bold sparrow
#

dans ton event ?

ashen rapids
#

Oui

dire latch
#

Mon code complet:

module.exports = async (bot, message) => {
    console.log(message.content);
    if(!message.guild) return;
    if (message.channel.type === "dm") return;
    const fetchGuildAuditLogs = await message.guild.fetchAuditLogs({
        limit: 1,
        type: 'MESSAGE_DELETE'
    });

    const latestMessageDeleted = fetchGuildAuditLogs.entries.first();
    if (!latestMessageDeleted) return console.log(`Le message de ${message.author.tag} a été supprimé mais je ne trouve pas l'auteur de la suppression.`);
    const { executor, target } = latestMessageDeleted;

    bdd.query(`SELECT * FROM logs WHERE guild_id = '${message.guild.id}'`, (err, log) => {
        const embed = new MessageEmbed()
        .setAuthor("Suppresion d'un message !")
        .setColor("#dc143c")
        .setDescription(`**Action**: Suppression de message\n**Message supprimé**: ${message.content}\n**Auteur du message**: ${target} - ${target.tag} (🆔 ${target.id})\n**Supprimé par**: ${executor} - ${executor.tag} (🆔 ${executor.id})`)
        .setTimestamp()
        .setFooter(`${executor.tag}`, executor.avatarURL());
        if (!log[0]) {
            bot.channels.cache.get('743070392729600040').send({embeds: [embed]});
        } else {
            bot.channels.cache.get(`${log[0].channel_id}`).send({embeds: [embed]});
        }
    });
};```
bold sparrow
#

sauf que, ça ne fonctionne pas

#

il a console log message author c'est null qd meme

dire latch
ashen rapids
#

Mmm

dire latch
#

Si tu veut, jsuis dispo pour te montrer en voc

bold sparrow
#

t'as console log target on est bien d'accord ?

dire latch
ashen rapids
#

Et si tu console.log message, tu peux montrer ce que ça te sort ?

bold sparrow
#

Essaye de le faire avec target

#

Peut être que lui va récup les infos User

#

target va forcément te return ce que tu veux

#

et pour ton content

#

au tout début tu le sauvegardes dans une var

dire latch
bold sparrow
#

Donc ton target fonctionne

#

tu as ton auteur

dire latch
#

Oui

timid loom
#

Ça c'est parce que ton message est une partial

ashen rapids
#

Ya pas une connerie du genre que si tu supprimes un message qui a été envoyé avant l'initialisation du bot, toutes les infos s'affichent pa ?

timid loom
#

Que les trucs sont null

#

T'y peux rien et c'est pas la faute de la lib

ashen rapids
#

Yep aussi pas con

dire latch
#

Hmm

bold sparrow
#

bah pourtant il a vérif si c'était un partial

timid loom
#

Tu peux tenter de fetch mais c'est mort je pense

timid loom
bold sparrow
#

Oui, mais il l'a fait

#

il return si c'est le cas

timid loom
#

Donc si il a vérifié il peut pas se plaindre que ce soit le cas

dire latch
#

Comment je fais pour l'enlever ce partial ?

bold sparrow
#

ah mais wtf t'as changé ton code

#

merde

#

if(message.author.bot || !message.guild || message.partial) return;

#

pourquoi t'as enlevé ça ?

timid loom
bold sparrow
#

fait un force true

#

A voir ??

#

Autrement si ça fonctionne pas, c'est mort

ashen rapids
#

J'ai jamais eu ce soucis, c'est étrange

bold sparrow
#

je l'ai jamais eu aussi lol

#

moi il récup tout

timid loom
ashen rapids
#

Le message que t'as supprimé, il a été envoyé avant que le bot soit initialisé ?

dire latch
ashen rapids
#

Start le bot

#

Envoie un message

#

Et essaie de le supprimer

dire latch
#

Oui

ashen rapids
#

T'as toujours des null ?

dire latch
#

Non

ashen rapids
#

Ok là tu vois les infos ?

dire latch
#

Oui

ashen rapids
#

Donc c'est ce que je disais
Si tu lances ton bot et que tu supprimes des messages qui datent d'avant le lancement, tu as pas les infos et c'est impossible de récupérer le message

timid loom
#

Bon bah voilà on a notre réponse

ashen rapids
#

Tu pourras récupérer seulement ceux qui sont supprimés après le lancement de ton bot

dire latch
#

Et c'est impossible de modifié ça ?

ashen rapids
#

Enfin

#

Qui datent d'après ton lancement

ashen rapids
timid loom
#

Au delete le message supprimé est resolve()(donc depuis le cache) et là il y est pas
Tente un fetch mais ça marchera sûrement pas

ashen rapids
#

A moins que tu saves tous les authors en base de données mais ça me semble un peu gros pour si peu au final 😂

dire latch
#

Mdrr

#

20G de message à force

ashen rapids
#

Après je sais pas le besoin que tu as
Si c'est juste un besoin de logs modos, tu t'en fou. Les gens vont supprimer les messages en temps réel, pas des trucs qui datent de 2 semaines

timid loom
#

Surtout que je crois que c'est pas TOS friendly de garder les messages suppr plus de 15 jours un truc comme ça faudrait revoir dans les termes

dire latch
#

Jamais entendu parler de ça

ashen rapids
#

Qui a déjà entendu parler des TOS KappaRetard

timid loom
#

Bah RGPD quoi tu peux pas garder de la data supprimée

#

Pour ça que tu peux pas report un message une fois supprimé parce que eux le gardent pas

dire latch
#

Ok je vois

timid loom
#

De toute façon généralement ce qui est intéressant de voir c'est les messages style ghost ping etc

dire latch
#

Moi je faisais tout les messages

bold sparrow
#

Yop, alors j'ai une petite requête, en fait, j'essaye de modifier un élément DOM, en l'occurence, un h1 et j'aimerais voir s'il y a le mot clé " developer " pour que l'élément html soit modifié de sorte à ce que ça devienne un span à l'intérieur du h1.
J'ai essayé ça, ça n'a pas l'air de fonctionner

function dynamicReplace(DOMelement: Element, value) {
    if( value === "t_subtitle") {
        return DOMelement.innerHTML = DOMelement.innerHTML.trim().replace("developer", "<span class='rainbow-text'> developer")
    }
}```
#

oui le span ici est pas fermé mais ça change rien, dans tous les cas ça fonctionne pas

#

J'ai pensé sinon à append l'élément éventuellement ?

bold sparrow
#

Il garde tout sur toi même ce que tu sais pas kappa

lone flax
#

Ça n’a rien à voir

#

Le RGPD te donne surtout des droits, ça n’empêche pas pour autant à Google de surveiller ton activité

bold sparrow
#

De la garder je parle

lone flax
#

Bah t’inquiète pas qu’ils sont RGPD compliant

slim anvil
#

Après ferme ton Span

#

Car c’est sûrement pour ça que ça marche pas

slim anvil
#

Passe par un create et append alors

bold sparrow
#

Ok, mais je pourrais le placer ou je veux dans la phrase ?

#

fin dans le content

slim anvil
#

c'est ton .trim

#

qui doit foutre la merde dans ton innerHTML je pense

#

Oui

#

element.innerHTML = element.innerText.replace('developpeur', '<span>designer !</span>')

#

tu peux faire ça par exemple

#

ca fonctionne