#javascript-typescript
1 messages · Page 97 of 1
Comme ca ?
Remarque on est pas en c si ça se trouve ça fonction en js
La il en manque une
A la fin
console.log(message.content) dans ton event messageCreate @azure belfry
T'es en quelle version de Discord js ?
Tente déjà de voir si tu reçois bien l'event avec un consle log

Ah bah

,
Yep
Ici bg
la ,

Y'a rien
Tu start même pas le bot
Si
Abon
Bah non là il est pas démarré ton bot
Si là ton bot il est démarré je suis la reine d'Angleterre
Pour démarrer le bot tu fais node index.js
Dans le dossier du bot
Sinon bah ça marche pas
Ici
Tu l'as redémarré depuis la dernière modification que tu as fait ?
C'est censé afficher un truc dans ta console
Nn que start
Et surtout j'ai pas l'impression que tu as lancé le bon bot
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
C'est le bouton vert
https://openclassrooms.com/fr/courses/6175841-apprenez-a-programmer-avec-javascript
Tient tu devrais faire ça avant ça va t'aider pour le début
Comment il peut mettre Start alors
Il a ptêt un bot à ce chemin là j'en sais rien
Ah à moins que ce soit node d'installé là
Ouais my bad
Ca paraît plus logique
Dans tous les cas il devrait plutôt le lancer en faisant node index
Oui c'est le bouton vert
Yep
Mais bon admettons
Mais bon je comprends l'erreur
Je le faisais au début..
Sur YouTube certains disent de faire comme ça donc voilà
Bah tu peux faire ça c'est juste que t'es coincé sur vscode quoi
Juste @azure belfry quelle est ta version de discord js ?
Bah ça pourrait expliquer le problème justement x)
Nn c'est un fichier qui date de quelmque mois
Aah

Comment ça ?
Explique toi
Car si c'est pas en v13 c'est pas messageCreate
Avant c'était l'évent message, pas messageCreate
@timid loom @azure belfry remplace "messageCreate" par "message" ligne 15
Taink 
OK je fais ça @cyan iron
Yep
Et si ça marche pas bah 
Sinon je vois les partials
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 

Oui mais ce que je veux dire c'est que si tous les messages qu'il envoie sont en partial il les recevra pas dans son event
Après ca serait bizarre
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
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
C'est pas encore effectif et on peut déjà faire la demande
Bah techniquement si le bot est en mention ça passe mais bon
30 avril 2022 tous les bots certfiés qui n'ont pas été approuvés ne pourront pas lire le contenu des messages
Ouais je sais mais pour les bots jugés inéligibles
Bonne chance à eux 
Yep juste une idée comme ça
Ils font exprès pour que tout le monde utilise les / cmds
T'as toujours les mentions mais c'est pas ultra pratique
Ah le fait de mentionner le bot il capte ?
Quelqu'un a un peu de temps pour m'expliqer en voc
Ouais mais genre pour remplir des formulaires c'est pas ouf
Je suis pas chez moi désolé
Ouais je crois
Ah oui 
Mais dans ces cas là Discord donnent l'accès à l'intent je pense
On peut pas t'en dire plus que ce qu'on t'a déjà dit honnêtement
Ok pas grv merci quand meme
Quelle est la version de ton discord.js ?
Ouais mais c'est bête de demander aux gens alors quel intérêt
Au pire tu peux faire une / commande qui te permet de rentrer des informations
Comment le voit-on ?
Pour que tout le monde passe en / cmds
Yep mais le truc c'est que c'est pas mieux que la mention là
Montre nous ton package.json
J'imagine
Pas faux
v12
Maintenant restart ton bot avec le bouton vert
Met le !xd
Et montre nous ta console
Bah déjà on est bien d'accord que tu l'as relancé le bot ?
oui
Tu mélanges du v12 et du v13 🤔
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());
}
}
})
v12 ou v13 ?
v12
ok
pour l'instant car je trouve la v13 compliqué
t’as qu’a faire
button.message.channel.delete()
j’imagine que tu veux supprimer le channel d’où vient le message
ExtendedMessage {channel: ExtendedTextChannel, deleted: false, id: '930850051264233472', type: 'DEFAULT', system: false, …}
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
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
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
toujours mais enfaite le bot veut supprimer le message 2x
mets un .catch()
if (button.message) return button.message.delete().catch() comme ça ?
si oui ça marche pas
button.message.delete().catch(() => {})
if (button.message instanceof Message) button.message.delete()
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?
ça me fait tjr la même :/
Il y a quoi dans ton config.json ?
{
"token": "montoken",
"prefix": "?",
"idGuildMemberAdd": "idchannel"
}```
Fais voir la disposition de tes fichiers
Ah, ducoups, c'est const { idGuildMemberAdd } = require('../config.json');
Oui voilà mais ça marche pas :/
Hmm
attend
tu require ton truc où ?
C'est dans ton Guildmemberadd
quel fichier
Une fois dans mon index.js et une autre dans mon guildMemberAdd.js
Qu'il faut modif
Dans ton guildMemberAdd.js ou il faut modifié 👍
C'est marqué dans ta console
../../config.json
Ahh mercii à vous deux je savais même pas que c'était possible de faire comme ça 😦
j'avais essayé .../
c’est events => src
Vu que c'était dans un sous dossier
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 ?
Yep c'est good thx !
Dr
avec plaisir
ça donne un embed ? J'ai quasi le même code que toi
oui
bonjour j'ai un problème installation de packages sur la machine est-ce que quelqu'un connait cette erreur?
Au dessus tu pourras pas, pas de cette taille du moins
Tu peux à la limite l’envoyer dans un premier embed avant
Ou envoyer l'image puis l'embed selon ta préférence.
Okok merci
Hello vous savez comment je peux mentionner un membre avec discord.js v13
<@ID>
Merci, j'ai essayé comme ça js <@${member.id}>
mais ça me donne ça
Bonsoir, quelqu'un sait comment faire pour que les citoyens dans mon serv ne puissent pas faire la commande ?
?
Citoyens ?
Tu peux pas ping dans le titre d'un embed
Ou membre normal
Tu parles d'une commande discord ?
Ah merde, tu saurais comment faire pour afficher le nom discord avec le tag par hasard?
Tu check si il a les perms admins?
${member.user.tag}
Merci !
Je l'ai aidé en voc du coup 👌
Okk pas de pb !
Quelqu'un saurais me dire pourquoi le inline de mon addFields ne marche pas svp ?
Montre ton embed global ?
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
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?
Rajoute dans la description
Tout simplement xD
**Membres discord :** ${taVariable}
Okk merci
Comment ça ce fait que c'est pas possible de faire ça?
Car c'est pas prévu pour marcher comme ca
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;```
...
les gens quelqu'un sait pourquoi quand je join ca fonctionne mais quitter non svp ?
c'est du discordjs
Intents
Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.
Littéralement, tu avais ta réponse en une recherche
Essaye ça
comment ca
ta route post est bien appelé ?
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
Ouais mais j'ai essayé plein de façon
pour vérifier déjà que ce soit appelé met juste un console.log dans ta route post
Genre /vote/:id/...
vérifier que ce soit bien appelé
et oui remet /vote/:id/:wager ca reste plus propre dans tous les cas
Nan, le console.log est pas retourné mais même avec le /vote/:id/:wager le console.log fonctionne pas :/
Oui effectivement
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
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 ?
Aucun soucis ^^
yes et ce n'est pas call ?
Nope! Et je galère avec ça depuis 2 jours ^^'
même si elle n’existe pas dans le network tu le verras en rouge avec un 404, et une erreur à l’intérieur
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
ouais y a un soucis
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
c’est déjà mieux
pas sur du tout mais dans le doute tester
ouais test
J'ai changé le method="POST" pour GET
Aaah
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
Toujours la même erreur.. C'est embêtant tout ça ^^
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
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
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
bah opponent c'est le nom de l'adversaire
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
🤔 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
haha thanks
je te laisse m'envoyer le tout ici ou en mp
Ah mais bordel j'ai passé 5min à essayer de comprendre de quoi tu parlais et en fait il avait edit son message 
@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
Hahah déso! Mais
En fait, même si je l'enlève ça fonctionne pas
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 ?
Attend quoi
Enzo quel bg
c'était vraiment juste un truc con 
ça venait de quoi
............
mais tu déclares ton viewRouter avec par default /view
donc forcement c'est pas /vote/:id/:id
J'avais pas pensé à ça
Et il a pas déclaré l'autre ?

😭 Deux jours que je galère sur ça, haha
Bah du coup c'est plutôt voteRouter, ça fonctionne comment son truc ?
Comme du chinois

Bah en gros, c'est assez incompréhensible
Il faut que tu comprennes ce que tu fais bg
oui c'est bizarre de mettre ta route dans un /view
/view ce sont juste tes pages qui seront affichés
Bizarre
Ouais je sais. Il était dans mon app avant mais je l'ai retiré pour tester
Et j'ai pas updatedepuis
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
Bah tout ce que j'affiche sur la page /view est dans le fichier view.js
Tu parles de la création des fichiers?
De leur gestion plutôt
Ouais et non parce que /vote est juste une url qui sert a save le résultat du vote
Puis qui redirige vers /
Ouais mais ça reste une route
Attends, jvais te faire un exemple
bonsoir tout le monde, j'ai un gros problème (vous vous en doutez sûrement )
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);
}
};```
req.file est undefined
Utilise l'optional chaining : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/Optional_chaining
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")) {
c'est normal que req.file ne sois pas def
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)
Je peux te dm pour te montrer l'exemple ? @cyan iron
De ?
Ça
Tu peux montrer ici
alors je n'ai plus d'erreur mais il ne sait pas enregistrer dans ma base de données
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
mais image son bien enregistré, mais dans ma base de données, j'a aucun nouveau post
quelqu'un peut m'expliquer pourquoi ca me donne que 3 membres svp ?
alors que l'on est plus
Faut mettre les intents @jovial quartz
comment ca
Les intents discord v13
0 results in 418.099ms
limited to 0
Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.
rien avoir
j'ai mis les intents
mais trql j'ai fais ca
mais le probleme
c'est que jsp comment sortir la variable
Tu met ton let ninja = avant ton guild.members.fetch()
Ba oui
bah je fais comment ducp
je suis juste trop con
Et tu met let ninja = avant ton guild.members.fetch()
Ba a rien ??
okk
Mais je t'ai dis de mettre ton let ninja = avant ton guild.members.fetch()
Ton ninja = ... est dans ton guild.members
j'ai mis
-__-
j'ai mis let ninja = 0
Je t'ai jamais dis ça
Je t'ai dis de le mettre avant ton guild.members.fetch()
J'ai jamais dis ça, relis moi
flm
Ba si tu comprends pas, sa va être difficile
c'est sur
Je vais pas te faire ton code
... Ton but c'est quoi?
sortir la variable ninja du fetch
En gros tu veux juste avoir le nombre de personne dans ton serveur?
Il a la solution, faut qu'il comprenne maintenant
non tu lui donnes pas de solution là
en gros et qui ont un certains role
Totalement que si mdr
je t'aime meme si je suis pas gay mon reuf
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
okk
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
guild.roles.cache.get()*
Pas faux!
bonne question
oui effectivement
ouais donc guild.fetchMembers()
bon, du coup la solution que tu utilises de base me parait correcte 👀
guild.members.fetch() en v13 🤔 après à voir sa version
Je fais plus trop de discord.js depuis la v13 ducoup ouais t'as surement raison
@sharp grail je t'aime ca fonctionne merci
pas de soucis 
j'ai cette erreur que lorsque je fais un post sans image
donc c'est normal que tu reçoives une erreur 🤔 ou que l'intérieur de ta condition ne soit pas exécuté
bah non
yep, car new post n'est pas def dans le deuxième try (autre block et le code n'est pas exécuté si pas d'image) 🤔
mais même si j'ai une image je n'ai rien d'enregistré dans ma base de données
je te montre
ok
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);
}
};
comment je peux régler ça ?
en changeant de place la déclaration de ta variable
je devrais la mettre où ?
tu penses à quoi ?
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é
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
il ne manque pas quelle chose qui fait ```js
if req.file == null
const newPost = new....
si req.file est nul, le contenu de la condition ne s'exécutera pas
je te renvoie vers la doc comme wailrone l'a fait plus haut si tu veux plus d'infos : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/Optional_chaining
ton new post tu peux par exemple le mettre dans ton deuxième try
sauf si tu as besoin qu'il soit accesible autre part
if (req.file) c'est égal à if (req.file !== null) c'est ça ?
globalement, oui
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
montre ton code 👀
req.file qui est undefined surement 🤔
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);
}
};
ah bon ?
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);
}
};
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
T'inquiète pas 
merci infiniment
Bonjour !
Excusez moi de vous déranger , mais ( cela peut paraitre bizarre ... ) auriez-vous un code complet en Discord.JS svp ?
Merci d'avance
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
Code complet , c'est avec le maximum de commandes possibles ( logs et/ou discussion et/ou modération ... )
le lien vers https://g-ca.fr/offres est donc parfaitement adapté 👀
Ok
alors, pas exactement, pour ce que tu veux faire c'est plutot
if (Target.id != Sender.id)
ou !==, si il faut que les types soient égaux
t'inquiète, plus d'infos ici si tu veux https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Expressions_and_Operators
la doc est plutot bien faite donc hésite pas
Merci !
Quelqu'un saurais comment je peux faire pr get le channel dans lequel un membre a executé une commande svp?
slash command
interaction.channel
:_: CommandInteraction#channel
The channel this interaction was sent in
la doc de discord.js aussi est très bien faite donc hésite pas 
Merci!
Oui je vais aller check ça !
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>```
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 ?
J'ai du mal à récup le "contenu" du bouton pour le save dans la db
En gros, dans ma db, y'aura choice1 et choice2.
Choice1 = Résultat du vote utilisateur #1
Choice2 = Résultat du vote utilisateur #2
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
ctx .drawImage(bakground, o, o, 853, 480);
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
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
yes plus probable déjà
là pour le coup c'est déjà un vrai problème
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
nan mais t'as fait ce qu'on t'as dit ou pas?
oui
et ce qu'il dit est vrai
il faut que tu ferme ton array avec un ] sinon le code est invalide
ha ok
sa me dis sa
bon ok bah bizarre
bon je crois que je suis pas aite pour le programations
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é
merci
maitenant mon bots marche plus dutout
ben maitenant il est plus afficher en ligne
bah si y a des erreurs dans la console tu peux corriger
sa me mets bot operationnel
Ah ouais ok je vois! Je vais check ça!
bon ben je ves tout supr et recommencer mon codes a zero
Un truc comme
document.getElementById(voteBtn").addEventListener("click", function() {
voteBtn(wager.opponent);
}, false);``` ? @zenith wave
oui
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
C'est avec les interactions tu as juste a mettre le paramètre ephemeral à true
on peut pas sans les interaction ?
Peut être en faisant message.interaction j'ai pas essayé
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.
Tu as pas mis les intents sur ton bot
si sur discord developement j'ai mis
Oui mais faut dans le code aussi
5 results in 479.302ms
limited to 5
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.
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...
dsc.gg/intention
Добро пожаловать на новый ламповый майнкрафт-сервер!
dsc.gg/intent
Takes you to the official server
Claimed so no one else does
C'est quel lien github ?
j'ai des comptes et enfaite je veux les mettre dedans
Ok, je viens de regarder
Tu as installé la dernière version de discord.js qui est la V13 actuellement
oui
Or que celui sur le github, c'est du V12
Tu modifies tout pour du v13
Ou sois tu met ton discord.js en v12
Et tu apprends pour le modifié en v13
comment je peux le mettre en v12 ?
npm i discord.js@12.5.1
@12.5.1 pour la dernière version de la v12
Thx mdr
Ok merci
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
non ses bon jai resolu le probleme
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 🤔
Three js quand ca bug ca pique il faut bien faire attention que il charge bien après tout le reste et pas avant moi j'ai vite abandonner XD
si ca peut t'aider https://stackoverflow.com/questions/62259571/syntaxerror-when-loading-a-gltf-file-via-three-js-in-react
yup je vais check de ce coter en espèrent le résoudre 🤔
conclusion, threejs + vuejs mauvaise idee 😅
yup c'est a peu pres ce que j'ai fais en plus
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
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!
me revoila
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
c'est quoi les fichiers que tu ne veux pas ? 🤔
touts les fichier à pars les fichier jpg, png, jpeg
mmh
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
Je ne connais pas le framework sheweny donc je ne pourrais pas t'aider maybe #sheweny-js, néanmoins tu peux accéder au client via <Message>.client
:_: Message#client
The client that instantiated this
Le client c'est le bot on est d'accord?
yep x)
pas de soucis
tu vois le problème ?
bah
si les fichiers ne sont pas des images
le contenu de la condition s'exécutera pas
donc ils passeront 
le dois rajouter une esle
j'ai vraiment besoin d'aide
alors
est ce que tes fichiers ont la mention image dans req.file.mimetype ?
?
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')
@cyan iron
Comme ça ça regle ton probleme du 'haha', essaye voir si ça regle pas ton get/post mais j'ai un doute 
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')
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
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 ?
Bonjour, il s'agit d'un handler. Pour faire ça tu as plein de tutos ou de handlers déjà tout prêts
Merci et où puis-je trouver ceci ?
En voici un par exemple
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 🤷🏿♂️
j'ai besoin d'aide, je sais pas comment déployer mon projet react
quelqu'un pourrait me guider
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
@slim anvil c'est quoi la dif entre yarn et npm ?
c’est juste un gestionnaire de package différent
ah okii
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
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
nop
nan mais le truc
c'est que
j'veux jsute qui supp les msg
y'a pas d'erreur en soit
Oui mais debugger ça te permettrait justement de voir où ça bloque
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
Mais c'est toi qui a fait ce code ?
@ashen rapids
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
console log message author
J'obtient null @bold sparrow
console log message
A partir de ces éléments tu peux comprendre pourquoi ça ne fonctionne pas correctement
voilà tu as la réponse author est à null dans ton object
Oui mais pk il est en null 🤔
Btw j'ai une petite erreur avec mon DOM, j'aimerais qu'il rentre dans la boucle mais il ne veut pas :/
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
ça je ne sais pas
Hmm
Essaye de faire ton check après ton fetch des logs
Et tu le fais avec l'exécuteur
Impec, merci
Ah mais du coup j'ai plus d'index mdrr
je voulais un index moi
for (const [index, value] of translatedItems.entries()) {
console.log(index, value
}
sinon juste un forEach aussi ceci dit
Je vais essayer ça plutôt
Ba jsp pk mdrr
Qui l'a supprimé le message ?
Moi
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
🤔
j'ai pas d'entries sur le type HTMLCollectionOf
Donc, on peut pas savoir a qui appartient le message ?
Si tu supprimes ton propre message, c'est compliqué
Si quelqu'un delete le message de qqun d'autre tu peux le savoir
C'est pas mon propre message
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
@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
forEach il voulait pas
Mais bien vu le querySelector !
Ca fonctionne impec, merci
document.querySelectorAll('.tra').forEach((value, index) => {
console.log(index, value)
})
pour le foreach
Ouais du coup fallait faire un querySelector dans tous les cas, je préfère itérer
thanks
Normal si il est supprimé
Là pour le coup c'était évident
Ba 🤔
Faut récupérer le content avant la suppression
Vraiment de la merde la v13 sérieux
Mdrrr
Nan de la merde tout court
Il y a forcément un autre moyen
Idk
Jsp moi t'as les intents des messages ?
Oui
t'as le lien gca dans ton statut ?
Ca doit être pour ça
Nimp 😂
Nan vraiment je vois pas
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()
// ....
Dans ces cas là, ne pas le faire à l'event messageDelete
ah c'est a l'event messageDelete
Yes, donc impossible
Oui
y'a pas une fonction beforeDelete() native 
Il faut aller chercher dans les Audit Logs
Pourtant il y a bien l'author dans les param message c'est bizarre
Mais pas fiable
c'est ça le problème
C'est que t'as aucune sûreté de récupérer
Lui ne l'avait pas en fetchant
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
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
Tu cherches à savoir qui a supprimé le message ou l'auteur qui a écrit le message ?
l'auteur du msg
Hmm
Oue moi je le récupère comme ça : const author = message.author;
dans ton event ?
Oui
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]});
}
});
};```
Quand je fais ça, j'obtient null
Mmm
Si tu veut, jsuis dispo pour te montrer en voc
t'as console log target on est bien d'accord ?
Là non
Et si tu console.log message, tu peux montrer ce que ça te sort ?
@ashen rapids
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
Oui
Ça c'est parce que ton message est une partial
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 ?
Yep aussi pas con
Hmm
bah pourtant il a vérif si c'était un partial
Tu peux tenter de fetch mais c'est mort je pense
La vérification consiste à regarder que le content est une string et que l'auteur est pas null
Donc si il a vérifié il peut pas se plaindre que ce soit le cas
Comment je fais pour l'enlever ce partial ?
ah mais wtf t'as changé ton code
merde
if(message.author.bot || !message.guild || message.partial) return;
pourquoi t'as enlevé ça ?
Bah tu peux tenter de fetch mais je pense pas que ça marche sur un message deleted
il sera dans le cache donc normalement si
fait un force true
A voir ??
Autrement si ça fonctionne pas, c'est mort
J'ai jamais eu ce soucis, c'est étrange
Y a moyen que Discord aient fait une update récemment hein j'en sais rien
Si l'auteur est null c'est forcément une partial cela dit
Le message que t'as supprimé, il a été envoyé avant que le bot soit initialisé ?
Comme je restart à chaque fois, oui
Oui
T'as toujours des null ?
Non
Ok là tu vois les infos ?
Oui
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
Bon bah voilà on a notre réponse
Tu pourras récupérer seulement ceux qui sont supprimés après le lancement de ton bot
Et c'est impossible de modifié ça ?
Me semble que tu peux vraiment pas
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
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 😂
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
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
Jamais entendu parler de ça
Qui a déjà entendu parler des TOS 
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
Ok je vois
De toute façon généralement ce qui est intéressant de voir c'est les messages style ghost ping etc
Moi je faisais tout les messages
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 ?
Google pour toi RGPD friendly ?
Il garde tout sur toi même ce que tu sais pas 
Ça n’a rien à voir
Le RGPD te donne surtout des droits, ça n’empêche pas pour autant à Google de surveiller ton activité
De la garder je parle
Bah t’inquiète pas qu’ils sont RGPD compliant
.
Passe par un create et append alors

