#javascript-typescript
1 messages · Page 83 of 1
C'est discord ça
Ou les / commande nan ?
j'en vois pas l'utilité du coup je les ai pas use
C'est mal foutu malheuresement
je sais j'ai déjà regardé vite fait
Si tu as un bot simple, qui a le prefix /, tu ne peut pas l'utiliser, c'est un peu nul
if (this.deferred === true || this.replied === true) throw new Error('BUTTON_ALREADY_REPLIED: This button already has a reply');
^
Error: BUTTON_ALREADY_REPLIED: This button already has a reply
at Object._send [as send] (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\v12\Classes\clickButton.js:82:72)
at Client.<anonymous> (D:\Téléchargements\discord-button-main\ticketbot-reaction.js:56:32)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
mais bon les linereply vont arrivé assez vite donc à part ça j'en vois pas trop trop l'utilité de vrai
Ok
Erreur fréquente, je crois que c'est une erreur de la dépendance car j'ai eu la même une fois et je l'ai pas réglé
if (user_ticket) {
await button.reply.send ('Tu a déjà créer un ticket !');
}
J'ai fait ça je sais si c'est good
le defer() est compté comme une réponse
Ahhh ouais
enlève le .defer() et il le fera
Je test att
Ok ça fait bien un reply
Par contre ça add des channel
Genre il me dit bien mon message
Mais il creer quand même un 2 ème tickets
bah parce que ton système de détection doit pas bien fonctionner
On regardera ensemble mais j'ai un autre problème
C'est useless les bot discord mdrr
J'en peu plus
tu te tapes tous les problèmes en même temps
je sais faut faire quoi pour y réparer
tu utilises discord-buttons ?
si oui, fais ça : npm i discord-buttons@latest
déjà réparé mec
@oak turret Tu peux voc ?
no
Code ?
client.on("clickButton", async (button) => {
if ( button?.id === "message_prive_buttons" ) {
let cat = button.message.guild.channels.cache.find(cat => cat.id === "860544911955066933");
let category_channels = Array.from(cat.children.values());
const user_ticket = category_channels.find(ticket => ticket.topic?.includes(`${button.clicker.user.id}`));
if (user_ticket) {
await button.reply.send ('Tu a déjà créer un ticket !');
}
button.guild.channels.create(`ticket-${button.clicker.user.username.toLowerCase()}`, {
type: 'text',
parent: '860544911955066933',
permissionOverwrites: [
{
id: button.clicker.user.id,
allow: ['VIEW_CHANNEL'],
},
{
id: button.message.guild.roles.everyone.id,
deny: ['VIEW_CHANNEL']
},
{
id: button.message.guild.roles.everyone.id,
deny: ['VIEW_CHANNEL']
}
],
})
.then(async (ticket) => {
const message_prive = button.clicker.user.id;
await ticket.setTopic(message_prive)
})
}
})
Regarde si le salon existe comme ça:
const user_ticket = await message.guild.channels.cache.find(ch => ch.name === `nom du salon`);
Mais il a bien un nom ton salon non ?
ticket-${button.clicker.user.username.toLowerCase()}
Oui, ba tu vérifies si sur ton discord, un salon nommé ticket-XXX existe
const user_ticket = await message.guild.channels.cache.find(ch => ch.name === `ticket-${button.clicker.user.username.toLowerCase()}`);
^
ReferenceError: message is not defined
at Client.<anonymous> (D:\Téléchargements\discord-button-main\ticketbot-reaction.js:53:29)
at Client.emit (node:events:394:28)
at WebSocketManager.<anonymous> (D:\Téléchargements\discord-button-main\node_modules\discord-buttons\src\index.js:35:16)
at WebSocketManager.emit (node:events:394:28)
at WebSocketShard.onMessage (D:\Téléchargements\discord-button-main\node_modules\discord.js\src\client\websocket\WebSocketShard.js:296:56)
at WebSocket.onMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (node:events:394:28)
at Receiver.receiverOnMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\websocket.js:970:20)
at Receiver.emit (node:events:394:28)
at Receiver.dataMessage (D:\Téléchargements\discord-button-main\node_modules\ws\lib\receiver.js:517:14)
PS D:\Téléchargements\discord-button-main>
comme je t'ai mis tout à l'heure
const user_ticket = category_channels.find(ticket => ticket.topic === `${button.clicker.user.id}`);
ça
ça marchera
client.on("clickButton", async (button) => {
if ( button?.id === "message_prive_buttons" ) {
let cat = button.message.guild.channels.cache.find(cat => cat.id === "860544911955066933");
let category_channels = Array.from(cat.children.values());
const user_ticket = await message.guild.channels.cache.find(ch => ch.name === `ticket-${button.clicker.user.username.toLowerCase()}`);
if (user_ticket) {
await button.reply.send ('Tu a déjà créer un ticket !');
}
↑
ton code
Pourquoi tu vérifies pas le nom du salon ?
Mais il m'en creer un malgrès le message d'erreur
quelle erreur
client.on("clickButton", async (button) => {
if ( button?.id === "message_prive_buttons" ) {
let cat = button.message.guild.channels.cache.find(cat => cat.id === "860544911955066933");
let category_channels = Array.from(cat.children.values());
const user_ticket = category_channels.find(ticket => ticket.topic === `${button.clicker.user.id}`);
if (user_ticket) {
await button.reply.send ('Tu a déjà créer un ticket !');
}
button.guild.channels.create(`ticket-${button.clicker.user.username.toLowerCase()}`, {
type: 'text',
parent: '860544911955066933',
permissionOverwrites: [
{
id: button.clicker.user.id,
allow: ['VIEW_CHANNEL'],
},
{
id: button.message.guild.roles.everyone.id,
deny: ['VIEW_CHANNEL']
},
{
id: button.message.guild.roles.everyone.id,
deny: ['VIEW_CHANNEL']
}
],
})
.then(async (ticket) => {
const message_prive = button.clicker.user.id;
await ticket.setTopic(message_prive)
})
}
})
il met le topic au moins ?
L'erreur que j'ai creer comme quoi le channel existe deja
Ou ?
if (user_ticket) {
return await button.reply.send ('Tu a déjà créer un ticket !');
}
Oe
ça marche
ça éxecute l'action
Mais par contre il me met echec de l'interaction
faut que tu le defer après
à ce moment là, enlèves le return du await button.reply, et après ça tu mettras return button.defer()
Mais ça créer le channel
Mais c'est pas la dessus
Ou il y a marquer echec
C'est pour créer le channel la première fois
^^
si tu le defer() pas ça fera toujours ça
mais tu pourras pas le reply si tu le defer() avant
je le met ou le defer ?
toujours pas réussi?
Ta les notifs? @oak turret
j'ai tout enlevé
Ah ok je comprends mieux 😅
je faisais autre chose, du coup j'ai pas vu lol
OK tkt
tu l'enlèves dès le début, et tu ne le defer() qu'au moment où tu créer le channel fin le ticket quoi
Bonjour je tente de récupérer le nom d'un jeu Steam par son ID (npm steam-game-browser) avec une boucle, seulement je n'arrive pas à récupérer la valeur de nomJeu en dehors de la fonction.
const sgb = require("steam-game-browser")
compteur = -1
nomJeux = ""
const arrayJeux = jsonGamesInfos.response.games
while (compteur != arrayJeux.length) {
compteur = compteur + 1
if(jsonGamesInfos.response.games[compteur]) {
const jeuID = jsonGamesInfos.response.games[compteur].appid
sgb.searchById(jeuID, async (err, data) => {
nomJeu = data.name
})
nomJeux = nomJeux + `- ${nomJeu}\n`;
}
}```
Avec ce code là j'obtient l'erreur "nomJeu is not defined", je la comprends mais je ne sais pas comment <extraire> `nomJeu`
Quelqu'un saurait m'aider svp?
tu fais pas comme dans leur exemple en même temps (extrait de la page npm)
// Search a game by ID
sgb.searchById("271590", (err, data) => {
if (err) return console.error(err) // If the game isn't found or you didn't add a string or integer
console.log(data) // Read the Game Object section, this shows in the console the name, the AppID, required age, if it's free, controller support, dlc, detailed description, short description
})
tu peux juste utiliser directement l'api de steam pour ça cela dit je pense
Je les vu l'exemple, mais c'est quoi le problème avec mon code ?
jeuID correspond à l'app ID
nan mais tu fais pas sgb.searchById() en fait
ou alors tu le montre pas dans ce que tu nous a donné
si si il y est, regarde bien
ah oui my bad
mais dans ce cas problème de scope
parce que tu peux pas faire nomJeu = data.name dans un callback et espérer y accéder dans le contexte de base
Pourquoi tu met un async aussi ? 🤔
nan mais ça c'est pas le problème
bah oui mais je vois pas comment faire
Je sais, je me demande juste
le async était dans la fonction de base de l'exemple, j'ai juste pas enlever
enfin je l'ai copier d'un autre code que j'avais fait avec un async plutot
x)
tu peux te débrouiller autrement mais ça sera chiant globalement, d'où mon conseil de passer par une requête directe
200requêtes max toutes les 5 minutes c'est honnête
@timid loomTu connais un module pour récupérer les infos d'un compte steam ? Pseudo, ses jeux, ect
Je comprends pas
l'api steam mais un module je suis pas sûr (ça doit sans doute exister)
oui l'api steam tu peux (c'est ce que j'utilise aussi dans mon code)
bah faire une requête directe à https://store.steampowered.com/api/appdetails?appids=271590 et récupérer le résultat dans une promesse ça sera plus gérable
Enfaite l'api steam renvoie que les APPid des jeux qu'un user a, ducoup j'essaie de convertir ces APPid en leur nom
tu peux essayer de passer par les callbacks mais globalement il faut que tu gères tout le reste du code dans le callback et il se peut que tu aies quelques problèmes vu que ça se fera pas tout de suite
Mhhh je réfléchis à comment faire mais je sais pas
Tu pourrais partagé pour se connecter à l'api ?
Yes
const userInfos = await fetch(encodeURI(`https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=${key}&steamids=${utilisateur}`))
const jsonUserInfos = await userInfos.json()
après t'as plusieurs api donc tu fais en fonction de ce que tu recherche
Merci
@uneven kayak une méthode un peu foireuse pour faire la requête qu'une seule fois c'est de se baser sur ça https://partner.steamgames.com/doc/webapi/ISteamApps#GetAppList
genre tu fetch ça au démarrage de ton app
et tu le mets dans un tableau
et tu récup les valeurs après
mais bon c'est entre 5 et 10 Mo de données JSON donc en fonction de ce que tu utilise ça peut prendre du temps avant que ce soit utilisable
j'ai vraiment rien compris mais c'est pas grave x)
bah en gros
tu fais une requête sur https://api.steampowered.com/ISteamApps/GetAppList/v2/, récupère le résultat qui est sous forme JSON,
et après avoir parsé le JSON tu stocke ça dans un tableau à l'aide duquel tu pourras trouver le jeu que tu veux trouver
c'est un gros tableau cela dit donc je sais pas si ça sera bien supporté
sinon la solution c'est de fouiller un peu l'api pour trouver une autre route pas trop limitée
mais à part https://store.steampowered.com/api/appdetails?appids=271590 tu trouveras pas grand chose je le crains
ton extension là elle est bien mais bon à part si tu sais promisifier un truc de cette forme ça risque d'être compliqué à faire
je vais chercher un guide pour faire ça attends
tiens tu peux tenter ça https://nodejs.org/api/util.html#util_util_promisify_original
je vais faire un test pour voir si ça fonctionne
ok ça va ça fonctionne
const smb = require('steam-game-browser')
const util = require('util')
const searchById = util.promisify(smb.searchById);
const logGtaV = async () => {
const game = await searchById('271590').catch(console.error);
console.log(game);
}
exemple de base
j'ajoute juste un .defer() ?
?
Même avec ça je comprends pas comment l'adapter à mon code ahah..
ah plus haut sans doute
je vais pas te mâcher tout le travail non plus mais en gros je vais rajouter des commentaires :
const smb = require('steam-game-browser')
const util = require('util')
const searchById = util.promisify(smb.searchById);
// ici je suis dans une fonction async parce que sinon je peux pas utiliser await
const logGtaV = async () => {
// la constante game contient les infos du jeu, comme documenté ici : https://www.npmjs.com/package/steam-game-browser#game-object
const game = await searchById('271590').catch(console.error);
// tu peux faire ce que tu veux dans le contexte de ta fonction, ça remplace l'appel de base
}
le code au début avec le util.promisify il va juste utiliser ta fonction et il va faire en sorte que ça puisse s'utiliser comme une promesse
c'est comme response.json() quand tu viens fetch quelque chose
là t'en dire plus c'est littéralement faire ton code à ta place donc je te laisse te débrouiller avec ça
C'est pas ce que je recherche de donner tout le travail de toute façon, mais là je vais laisser tomber j'essaie mais y arrive pas
Bah c'est déjà pas mal là hein mdr
en vrai là ce que je t'ai donné comme code tu peux très facilement l'adapter
Tout est sur internet tu sais une petite recherche et c'est bon je pense et oui ya il est juste question de tester plusieurs truc adapté et c'est bon
facile à dire quand on s'y connait à la perfection
le promisify ça peut être déroutant en vrai au début donc je préfère bien expliquer, là ça peut sauver son code
Oui oui biensur mais là il faut juste qu'il test des trucs et c'est bon
Mais après j'avoue même moi au début les promise je captais pas trop
bonjour j'ai trouver un code en js qui affiche du texte et qui le supprime par la suite mai il ne veux pas lire mes <br> il les affiche donc il ne fais pas de retour à la ligne, merci d'avance pour votre aide.
Se dit qu'il y a un module sympa à faire
@slim anvil possible que tu m'aide tu et chaud en js
Là je peux pas j’ai 4% de batterie
ok pg tkt
@oak turret
hey j'aurais besoin d'aide je n'arrive pas à récupérer un " message"
Comment ça ? @umbral lake
je vais te montrer
Dac
@dire latch
en gros j'aimerais récupérer que Bot et après que les valeurs qui y sont join
tu as compris ce que je voulais faire ?@dire latch
oui
je compte en gros mettre la categorie bot dand un bed moderateur dans un autre etc
Bot c'est une catégorie non ?
Pourquoi tu fais pas que si c'est la catégorie bot, tu l'affiches ici ou là
oui
Ba essaye comme je t'ai dis @umbral lake
Tu récupères bien les noms des commandes pour ton help non ?
@umbral lake
Tu fais pareil pour les catégories
il me fait ressortir un boolean
oui mais il est fait par discord.js-commando
Ah j'utilise pas commando
ah du coup tu penses pas pouvoir m'aider
Ba jsp comment fonctionne commando sorry
hey
je suis entrain de développer un robot en javascript, et j'aimerais avec une commande pouvoir ajouter du contenu dans un fichier json, es ce que quelqu’un peut m'aider? Je n'y arrive pas.
check ça ça devrait t'aider https://stackoverflow.com/questions/36856232/write-add-data-in-json-file-using-node-js
merci
(node:3929) UnhandledPromiseRejectionWarning: TypeError: fields.flat is not a function
c normal ça ???
mes embeds ne marchent plus
Ta version de nodejs
ah
c bon mes embed machent merci
je n'y arrive toujours pas mdrr
j'ai le demon
@fleet socket es ce que tu peux m'aider stp?
deso j'avais pas trop le tps mais donne plus d'info sur ce qui ne marche pas/ce que t'as tenté si j'i le tps je t'aiderais sinn je suis sur que quelqu'un d'autre le fera mais met plus de precision
bonjour j'ai trouver un code en js qui affiche du texte et qui le supprime par la suite mai il ne veux pas lire mes <br> il les affiche donc il ne fais pas de retour à la ligne, merci d'avance pour votre aide.
c'est du js taping
je sais pas d’où sortent tes echo
mais c’pas du js ça c’est clair
à moins que je sois fou et que je vois flou mais 
Non les echo c'est que de du style la c'est des screen du site pas du code
En gros je montre juste que ça écrit et supprime un texte que j'ai prédéfini dans le code
Mai ce ne lis pas les br ca les ca écrit <br> sur le site
Change element.value / element.text par element.innerHTML je pense
Hey
Je suis entrain de dev un bot mais cette commande ne fonctionne pas, quelqu’un peut m’aider ?
code:
const fs = require('fs');
const config = require('../config');
module.exports.run = async (client, message, args) => {
if(!message.guild.member(message.author).roles.cache.has(config.team)) return message.channel.send('Tu n\'a pas le droit d\'utiliser cette commande !')
const fileName = '../file.json';
const file = require(fileName);
file.push(args);
fs.writeFile(fileName, JSON.stringify(file), function writeJSON(err) {
if (err) return console.log(err);
});
message.channel.send(`Lien envoyé dans la **Base de donnée**`)
//message.channel.send('args: ${args}')
}
module.exports.help = {
name: "uploadgif",
aliases: ["uploadg"]
}
file.json:
[]
@keen narwhal json est bien pour stocker des petites choses
Puis, il ne veut pas que tu lui refasses le code, il veut qu'on l'aide car sa ne fonctionne pas 👍

Je voudrais faire en sorte une commande qui envoi un embed avec : @un rôle ( indiqué dans le code ) à actuellement : *le nombre de personnes qui à le rôle.
Mais je sais pas faire, pouvez vous m'aider ?
plutôt que de passer par une boucle :
let nb = message.guild.roles.cache.get('<id_role>').members.size;
juste il faut garder en tête que ça correspond au nombre de GuildMember dans le cache qui ont le rôle
et dans tous les cas le .map est pas bon, tu aurais du use un .reduce
ou un .forEach si le but était de rajouter un à nb
mais dans tous les cas les itérateurs vu que tu boucle dessus normalement t'as toujours moyen d'avoir la taille sans passer par une boucle
Merci de ton aide mai je n'e trouve pas ce que tu me propose dans mon code js ```js
const typedTextSpan = document.querySelector(".typed-text");
const cursorSpan = document.querySelector(".cursor");
const textArray = ["<?= $ipl ?>"];
const typingDelay = 25;
const erasingDelay = 5000;
const newTextDelay = 500; // Delay between current and next text
let textArrayIndex = 0;
let charIndex = 0;
function type() {
if (charIndex < textArray[textArrayIndex].length) {
if(!cursorSpan.classList.contains("typing")) cursorSpan.classList.add("typing");
typedTextSpan.textContent += textArray[textArrayIndex].charAt(charIndex);
charIndex++;
setTimeout(type, typingDelay);
}
else {
cursorSpan.classList.remove("typing");
setTimeout(erase, newTextDelay);
}
}
function erase() {
if (charIndex > 0) {
}
else {
cursorSpan.classList.remove("typing");
textArrayIndex++;
if(textArrayIndex>=textArray.length) textArrayIndex=0;
setTimeout(type, typingDelay + 20);
}
}
document.addEventListener("DOMContentLoaded", function() { // On DOM Load initiate the effect
if(textArray.length) setTimeout(type, newTextDelay + 2000);
});
↑
Non pas comme ça
Ah quoi que comme tu veux juste faire +1 et pas récupérer la prochaine value ca peut passer oui
Du coup oui
je répondais juste à ton .map
typedTextSpan.textContent
J'ai bien remplacer mai ce n'e marche toujours pas```js
typedTextSpan.innerHTML += textArray[textArrayIndex].charAt(charIndex);
il écrit les br
sur le site
au lieux de faire des retour à la ligne
Soit ton <br> est échappé (avec des antislash devant < et > soit le navigateur s'attend à un <br /> au lieu d'un <br>
bas si je mes un <br> dans mon html ça marche mai avec le code js ça l'écrit
Si tu console.log textArray[textArrayIndex].charAt(charIndex) tu obtiens quoi?
Ca donne rien ```js
console.log(textArray[textArrayIndex].charAt(charIndex));
j'ai des erreur qui vienne de mon site dans les logs mai il me dit rien par rapport à ça
Ah mais tu remplis ton tableau js avec une variable php
oui
Ça doit être php qui échappe tes données mais c'est normal c'est ce qu'on fait pour éviter les injections xss
Tu peux envoyer le code en entier ?
oui
<div class="col-md-6">
<div style="background-color: rgb(8, 8, 10); height: 400px;" class="card mb-3">
<div class="card-body">
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
<p class="card-title" style="color: rgb(70, 253, 146);">
<?php
if(isset($_POST['resolve'])){
$username = $_POST['username'];
strtolower($username);
if($username == null){
echo "Insérer un pseudonyme valide!";
} else
// This is blacklist:
if($username == "" || $username == "" || $username == "" || $username == ""){ // When adding blacklisted username, use lowercase letters.
echo " Blacklist";
} else {
$ipl = @file_get_contents("https://webresolver.nl/api.php?key=M9HNW-VBJYB-WXW02-O9I8D&action=geoip&string={$username}"); // Put own API link with Key in here. ?>
<?php } } else { ?>Localiser une IP<?php } ?><span class="typed-text"></span><span class="cursor"> </span>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!--/ Navigation -->
<script>
const typedTextSpan = document.querySelector(".typed-text");
const cursorSpan = document.querySelector(".cursor");
const textArray = ["<?= $ipl ?>"];
const typingDelay = 25;
const erasingDelay = 5000;
const newTextDelay = 500; // Delay between current and next text
let textArrayIndex = 0;
let charIndex = 0;
function type() {
if (charIndex < textArray[textArrayIndex].length) {
if(!cursorSpan.classList.contains("typing")) cursorSpan.classList.add("typing");
typedTextSpan.textContent += textArray[textArrayIndex].charAt(charIndex);
charIndex++;
setTimeout(type, typingDelay);
}
else {
cursorSpan.classList.remove("typing");
setTimeout(erase, newTextDelay);
}
}
function erase() {
if (charIndex > 0) {
}
else {
cursorSpan.classList.remove("typing");
textArrayIndex++;
if(textArrayIndex>=textArray.length) textArrayIndex=0;
setTimeout(type, typingDelay + 20);
}
}
document.addEventListener("DOMContentLoaded", function() { // On DOM Load initiate the effect
if(textArray.length) setTimeout(type, newTextDelay + 2000);
});
</script>
Et si c'était possible d'avoir un var_dump de $ipl ça serait cool aussi
oui mai ca écrirais plus pareil
enfaîte je veux un typed text juste our le style pour faire une genr de console
Qu'est-ce tu appelles typed text?
attend je te montre
du texte écrit
Ah je vois
mais là oui c'est du php ton truc donc javascript ou non tu auras le même souci
C'est l'effet console
Avec l'underscore qui clignote à la fin
Après quand tu veux mettre du php dans du JavaScript c'est mieux de faire une api avec php et appeler ta route avec un fetch en js
C'est beaucoup plus propre et ça te permet de tout bien séparer ce qui est plus facile à debugger
bas j'utilise l'api de webresolver mai j'utilise la version html pas JSON
ca doit donné ca à la fin
Je vois, je comprend pas trop l'intérêt du innerHTML dans ce cas
Pourquoi ne pas générer ton html avec php?
Pourquoi tu veux forcément append un span?
non c'est juste un code que j'ai trouvé sur internet je mi conné pas trop en js
Et tu peux pas utiliser la librairie typed.js?
message.guild.roles.cache.get(« id »).members.size
je réitère ce que j'ai dit plus haut :
#javascript-typescript message
donc ça correspond au nombre de GuildMember dans le cache qui ont le rôle
il faut récupérer tous les membres d'une guild pour être sûr d'avoir le bon nombre
Citation de Taink9231 posté dans #javascript
Clique sur [📝](#javascript-typescript message) pour accéder au message
plutôt que de passer par une boucle :
let nb = message.guild.roles.cache.get('<id_role>').members.size;
juste il faut garder en tête que ça correspond au nombre de GuildMember dans le cache qui ont le rôle
Quote par Taink#9231
·
Ha merci désolé j'avais pas vus
Pour avoir le résultat exact même pour les serveurs avec énormément de membres il va falloir fetch la liste complète : ```js
const role = message.mentions.roles.first()
const members = await message.guild.members.fetch();
const membersWithRole = members.filter(member => member.roles.cache.has(role.id));
const membersCount = membersWithRole.size;
oui merci mai même sur la doc j'ai pas trouvé mai pg tkt
Etant donné que fetch est une méthode, le mieux c'est d'utiliser le paramètre force et mettre sa valeur sur true pour forcer l'API.
En général je ne force pas pour ne pas fetch les membres qui sont déjà en cache
Ce que je fais perso, c'est accéder au cache, si rien n'est return, ça fetch automatiquement le membre via une query en paramètre, ça fonctionne dans 100% des cas.
Oui je fais comme ça aussi const member = message.guild.member(userId) || await message.guild.members.fetch(userId);
Mais l'exemple au dessus c'est pour fetch la liste entière des membres
Donc je ne peux pas vérifier si un membre est en cache ou pas avant d'avoir la liste complète du coup je ne force pas le fetch
Bien vu.
Je fais différemment mais ta façon de faire est impec aussi.
Je me suis créer un resolver lol
Après tu as aussi un évènement qui est appelé à chaque fois que ton bot reçoit un chunk de l'intent des membres tu peux jouer avec ça
Oui
Mais par exemple quand je fais ça sur un bot d'among us france (170k membres) c'est pas la bonne méthode car c'est trop long
Merci beaucoup Eno pour cet Event, super utile 👍🏼
Il faudra plus d'une minute pour recevoir tous les chunk
Je sens qu'il va me servir
Disons que, pour l'utilisation qu'on avait au départ, c'est clairement pas une meilleure idée
comment je fais pour importer le contenue d'une variable depuis un json
un exemple serait mieux
Ce fichier est une commande pour afficher les Ajouts de la maj du bot qui sont ecrit dans un json
const Discord = require('discord.js');
const { Command } = require('discord.js-commando');
const fs = require('fs');
const resume = require('./notes_de_version.json')
module.exports = class MemberCommand extends Command {
constructor(client) {
super(client, {
name: `${process.env.COM_RESUMEVERSION}`,
memberName: 'resumé de version',
group: 'stats',
description: 'Affiche la liste des ajouts de la derniere mise a jour de bot ',
});
}
async run(msg){
const embed = new Discord.MessageEmbed()
.setColor("#42AE87")
.setTitle(`Ajout de la version ${process.env.VERSION}`)
//Ajout 1
.addField(``,``)
//Ajout 2
.addField(``,``)
return msg.say(embed);
}
};```
aux .addfField je veux mettre les viariables Ajouts1/2 du json
Mon json
```json
{
"Version":"Béta 0.5.2",
"Nom_de_la_mise_a_jour":"Commande & Co",
"Description_de_la_mise_a_jour":"Cette mise à jour apporte une optimisation plus pousée du bot et de nouvelles commande",
"contenu1": [
{
"Ajout1":[ {
"nom":"Optimistation et simplification visuelle",
"description":[
"Les commandes on étés simplifiée et optimisée pour que le bot soit plus rapide de plus certaines commande on vues leur systeme d'execution changer radicalement et des fonctionnalitées on été rajouter",
"Les resultats des commandes ont été simplifier pour plus de clareté (rajout d'embed)"
]
}
],
"Ajout2":[{
"nom":"Rejout de commandes",
"description":[
"De nouvelles commandes sont disponible pour les membres, il est maintenant possible de voir la version du bot.",
"Il est aussi possible de voir le contenu de la prochaine mise a jour mais aussi le contenu de la version acctuelle"
]
}]
}]
}```
comment je fais ?
Je ne sais pas, sorry 😔
Normalement si tu fais un resume.contenu1.Ajout1.nom t'as "Optimistation et simplification visuelle"
à condition que ça soit bien ça que tu fais
Go le faire en mode brut, écrire dans le code directement 😅
@white sedge
S'il le fait comme ça c'est pour une raison je pense
Je sais tkt @cyan iron
ah non
Bah alors pourquoi tu dis des trucs comme ça lmao
Pour rire oh lala

merci je vais essayer de ce pas
@white sedge, An error occurred while running the command: TypeError: Cannot read property 'nom' of undefined
You shouldn't ever receive an error like this.
Please contact Nom d’utilisateur#9999.
ça marche pas
console log ton resume pour voir stp
console log ton resume pour voir stp
je marque quoi apres
console.log(resume);
ton json est pas bon déjà
du dois faire like this pour ton contenu
"contenu": [
{
"name": "name",
"description": "description"
},
{
"name": "name",
"description": "description"
}
]
pour lire toutes tes données tu feras un .forEach() et tu pourras get les name etc
hien
et ton json est où par rapport à ta commande ?
dans le meme dossier
screen ton dossier stp
ok et quand t'as fais ton require() ça t'as rien mis comme résultat pour le faire automatiquement ?
euh je crois pas
refais ton require et check
je debute en js donc ...
donc ?
je comprend pas trop ce que tu dis 😅
const resume = require('./notes_de_version.json'); c bon ?
javascript sujet 2
@white sedge Juste, console.log resume, et voit si ça donne ton JSON
Et montre où tu places ton resume
dans la console de debogage
const Discord = require('discord.js');
const { Command } = require('discord.js-commando');
const fs = require('fs');
const resume = require('./notes_de_version.json');
console.log(resume);
oui
Bah voilà
{
"Version":"Béta 0.5.2",
"Nom_de_la_mise_a_jour":"Commande & Co",
"Description_de_la_mise_a_jour":"Cette mise à jour apporte une optimisation plus pousée du bot et de nouvelles commande",
"contenu": [
{
"nom1":"Optimistation et simplification visuelle",
"description1":
"Les commandes on étés simplifiée et optimisée pour que le bot soit plus rapide de plus certaines commande on vues leur systeme d'execution changer radicalement et des fonctionnalitées on été rajouter mais aussi les resultats des commandes ont été simplifier pour plus de clareté (rajout d'embed)",
"nom2":"Rejout de commandes",
"description2":
"De nouvelles commandes sont disponible pour les membres, il est maintenant possible de voir la version du bot mais aussi il est aussi possible de voir le contenu de la prochaine mise a jour mais aussi le contenu de la version acctuelle."
}]
}```c bon comme ça ?
non
ah
{
"Version":"Béta 0.5.2",
"Nom_de_la_mise_a_jour":"Commande & Co",
"Description_de_la_mise_a_jour":"Cette mise à jour apporte une optimisation plus pousée du bot et de nouvelles commande",
"contenu": [
{
"nom":"Optimistation et simplification visuelle",
"description":
"Les commandes on étés simplifiée et optimisée pour que le bot soit plus rapide de plus certaines commande on vues leur systeme d'execution changer radicalement et des fonctionnalitées on été rajouter mais aussi les resultats des commandes ont été simplifier pour plus de clareté (rajout d'embed)",
"nom":"Rejout de commandes",
"description":
"De nouvelles commandes sont disponible pour les membres, il est maintenant possible de voir la version du bot mais aussi il est aussi possible de voir le contenu de la prochaine mise a jour mais aussi le contenu de la version acctuelle."
}]
}```
{
"Version":"Béta 0.5.2",
"Nom_de_la_mise_a_jour":"Commande & Co",
"Description_de_la_mise_a_jour":"Cette mise à jour apporte une optimisation plus pousée du bot et de nouvelles commande",
"contenu": [
{
"name":"Optimistation et simplification visuelle",
"description": "Les commandes on étés simplifiée et optimisée pour que le bot soit plus rapide de plus certaines commande on vues leur systeme d'execution changer radicalement et des fonctionnalitées on été rajouter mais aussi les resultats des commandes ont été simplifier pour plus de clareté (rajout d'embed)"
},
{
"name":"Rajout de commandes",
"description":"De nouvelles commandes sont disponible pour les membres, il est maintenant possible de voir la version du bot mais aussi il est aussi possible de voir le contenu de la prochaine mise a jour mais aussi le contenu de la version acctuelle."
}
]
}```
la c bon ?
oui
np
et je met ça ${resume.contenu.name}
bah là non du coup
faut que tu fasses un .forEach() pour tout afficher
du genre :
resume.contenu.forEach(element => {
console.log(element.name);
})
ça va te log tes 2 name
essaye tu verras ^^
ouais mais je veux que ça n'en sorte q'un
non
qu'un ?
🤷♀️
Oui, que sa première partie
resume.content[0].name
console.log(contenu.name[1]);
const embed = new Discord.MessageEmbed()
.setColor("#42AE87")
.setTitle(`Ajout de la version ${process.env.VERSION}`)
//Ajout 1
.addField(`${resume.contenu.name}`,`e`)
//Ajout 2
.addField(`r`,`a`)
je souhaite que le premier .addfield sorte le premier name et le deuxieme .addfield sotre le deuxieme name
oui bah voilà
mon forEach() passe dans ce cas
tu feras ça :
const embed = new Discord.MessageEmbed()
.setColor("BLUE")
.setTitle("ton titre")
resume.contenu.forEach(element => {
embed.addField(element.name, element.description, true)
})
return <message>.channel.send(embed)
ça marche nickel merci
np
Hello
J'ai un soucis, js const props = new(require(`${commandPath}${path.sep}${commandName}`))(this); ça me dit que require n'est pas un constructor
A oe mince dsl
Np, je réponds juste à sa place 🙂
@bold sparrow essaye d’enlever la première parenthèse et du coup celle de fin qui correspond
d’avoir new require et non new(require(…
Ca ne peut pas fonctionner
Puisque je dois load une fonction, avec comme param, mon client
@slim anvil
tu pourras pas via le new(require()) en tout cas ça c'est sur
Je pense je vais changer ma méthode de faire
Je vais tout foutre dans un array et mapper, puis initier les classes que j'aurais dedans
Ca fait trop longtemps je suis dessus ça me gave
Hello !
J'ai une question, est-ce que vous avez un regex pour détecter UNIQUEMENT si quelqu'un écrit avec des écriture comme ça:
𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳
𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣
𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟
𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫
𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇
𝑎𝑏𝑐𝑑𝑒𝑓𝑔ℎ𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧
𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻
𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛
𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯
𝒶𝒷𝒸𝒹𝑒𝒻𝑔𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝑜𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏
𝓪𝓫𝓬𝓭𝒆𝒇𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃
abcdefghijklmnopqrstuvwxyz
𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝑘𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝑦𝔷
ᵃᵇᶜᵈᵉᶠᵍʰᶤʲᵏˡᵐᶰᵒᵖᵠʳᶳᵗᵘᵛʷˣʸᶻ
En gros toutes les écritures autre que si je l'avais écrit avec mon clavier
fais plutot l'inverse dans ce cas là
de vérifier que le caractères est bien alphanumeric
Mais je veux aussi que ça prenne les caractère de ce type: ,;:!ù*$^?./§%µ£
tu veux que ça les autorise ou n'autorise pas ?
autoriser
Bah du coup tu te fais une regex pour les charactères spéciaux + alpha numeric
Bonsoir @spring breach,
J'ai peut-être une piste pour toi, utiliser cette regex /^[a-z0-9]+$/i puis faire un test() sur ce que tu veux, pour les caractères spéciaux, tu peux faire un array, et check chaque valeur si ça contient ou non
et si ca match pas ca dégage
Je ne suis pas un pro de Regex, il doit y avoir un moyen d'accepter ce que tu demandes.
Dites-moi, pour un projet single page, j'aurais besoin d'utiliser du TS dans du HTML, est-ce que Angular c'est trop pour du single page ? Lequel serait le plus adapté, Vue, React ? J'ai juste besoin d'afficher des éléments sur la page x)
En vanilla .. Pourquoi pas
Sinon utilises preact par exemple si tu veux vraiment du react par exemple
c'est bcp plus light
Preact, je connaissais pas
ou vitejs qui comprend vue et/ou react
EJS c'est du templating
Ca dépend de ce que tu dois, faire, mais si c'est très simple, je pense que du vanilla js c'est la meilleure idée, tu installes TS et après tu transpiles à la main ou alors tu setup un task runner style gulp pour automatiser la transpilation
Ouaip j'utilise gulp
Donc en vanilla ça serait plus adapté
C'est juste mapper des valeurs que je dois faire
Si c'est juste faire ça je vois meme pas l'utilité de ts finalement
L'habitude lol
Oui mais bon si tu passes + de temps sur la config de ton projet
Ca je suis pas spécialement d'accord pour le coup, ça rend le code plus lisible :p
Oui fin ca le rend plus lisible si c'est juste un tableau et un map
La config se fait une fois et puis il est tranquille
ts va rien changer
Après je ne connais pas l'étendue de son projet et de tout ce qu'il doit faire non plus
C'est pour ça que je dis "SI c'est juste pour faire ça"
En effet 😉
On va dire que je ferais juste une maquette, après je voudrais bien utiliser la tech PWA
Donc là -> Angular me parait adapté
Déjà voilà donne toutes les infos dès le début
Si tu veux passer par PWA, passe par un framework qui va le gérer complètement
Mais angular ca me parait trop gros pour ce si petit projet
Ouais c'est vrai lol
D'où vitejs, ou preact si tu veux du light
ou sinon react / vue
En vrai ... Je vais me renseigner sur vite
c'est très cool, ils ont leur propre serveur de build donc ils passent pas par webpack ou autre qui est très long
ca compile a une vitesse folle
Et tu as un support vue / react sur le template, et typescript aussi bien sur
C'est fait par des français ?
Vitejs c'est fait par un mec de vuejs
Evan you
(un des createurs de Vue.js, donc t'as pas trop de soucis a te faire
)
Ouais je m'en doute bien du coup
yo vous savez si on peut installer la version 13 de djs ?
Oui.
npm i discord.js@dev
;-;
Je te préviens juste que tu auras bcp de changements.
Pour savoir les différents changements : https://deploy-preview-680--discordjs-guide.netlify.app/additional-info/changes-in-v13.html
👌
Hey !
Quelqu'un qui sais utiliser rethinkdb et qui sais faire une sauvegarde avec ? 🤔
Pour faire une sauvegarde, tu dois utiliser rethinkdb dump
Quelles sont les erreurs ?
ceci et mon sys de log pour les msg des membres et je souhaite que avant le 'a écrit' il y ait le pseudo du membre et apres le 'a ecrit' le message du membres
module.exports = {
run:(client)=>{
client.logger.log('info',`a écrit `)
const chatbot = new Chatbot({name: "Udit", gender: "Male"});
client.chatbot.chat("Hello").then(console.log).catch(e => logger.log(e));```
Tu sais comment récupérer le pseudo du membre déjà ?
je crois que c client.user
C'est un bot Discord ?
oui
Et ça c'est un évent que tu reçois ? Quel est l'event ?.
Ok et bien effectivement ton user ça sera client.user
Cependant il te manque un paramètre d'arrivé dans ton évent pour pouvoir récupérer le message
Regarde bien la doc de l'event message
ah
client.user c'est ton bot hein
Doc je comprends pas l'intérêt de récupérer client.user dans un système de log
Franchement @white sedge il faudrait que tu suives un tutoriel histoire d'apprendre les bases
c'est plus message.author?
ouais effectivement
surtout que si c'est dans l'event message tu dois mettre message et pas client
Je pense qu'il a trouvé le code quelque part et qu'il comprends pas vraiment ce qu'il fait, c'est pour ça qu'il faudrait que tui suive un vrai tuto
C'est quoi ChatBot?
Bah le module que j'ai trouvé c'est pour internet
Ah 
c'est bizarre ça
Non mais je t'ai dit

Je suis pas sûr qu'il comprenne réellement ce qu'il fait
bah moi je comprends pas vraiment non plus
parce que si c'est juste pour récupérer le contenu d'un message
faut pas faire ça 
⭐Codez plus rapidement avec Kite : https://www.kite.com/get-kite/?utm_medium=referral&utm_source=youtube&utm_campaign=pentiminax&utm_content=description-only
Cette vidéo vous montre comment créer un bot Discord en JavaScript.
Ce bot peut envoyer des messages, supprimer des messages et jouer des son depuis YouTube.
Logiciels utilisés dans cette...
Tient @white sedge
Il me parait pas mal
Je conseillerai plutôt : https://discordjs.guide/
Créé par la communauté, il y a rien de mieux et t'es sûr à 100% que ce qu'ils te feront faire, c'est safe. Et ils te donnent que les bonnes pratiques de dev
Le problème des tutoriels youtube quand t'es débutant, c'est que tu sais jamais si on t'apprends à faire les choses de la bonne manière ou pas
DiscordJS Guide c'est ultra pédagogique. On va te dire : Pour faire ça, faut faire comme ça, parce que ....
La bonne pratique est de faire comme ça ... Parce que ...
Et surtout que en vidéo tu recopies bêtement la plus part du temps
Yo,
Je fais comment pour delete un channel discord grace à son ID quand le serveur se lance
Il faut que tu récupères le channel à partir de ton ID. Du genre :
await client.channels.fetch("L'ID_DE_TON_CHANNEL");
Et qu'une fois que t'as récupéré un object channel, suffit d'utiliser la méthode delete([raison]) pour supprimer le salon.
Si c'est un channel vocal par exemple : https://discord.js.org/#/docs/main/stable/class/VoiceChannel?scrollTo=delete
Pardon suppr un message grace à son ID
Tu le récupère où son ID ?
C'est un truc que t'as en dur comme ça ?
Quand je créer un embed, je l'écrirais dans une bd en json pour ensuite le récup
Du style ```js
let ancienpanel = bdd["panelcreateticketid"]
ancienpanel.delete()
```json
{
"panelcreateticketid": "871026151366213683"
}
@ashen rapids
Oue ok je vois
A mon avis si tu stockes l'ID du message, tu devrais aussi stocker l'ID du channel
De cette manière tu fetch le channel et ensuite tu fetch le message dans le channel
Puis tu supprimes
Ok
Hello !
Actuellement j'essaye de faire une commande pour blacklister des utilisateurs de mon bot. J'ai donc fait ce code : ```js
const target = client.users.cache.get(args[1]); //On prend l'id de l'utilisateur fournit
const reason = args.join(" ").slice(22); //On récupère la raison de ce blacklist
const embed = new MessageEmbed().setTimestamp() // et on fait un embed
switch(args[0]) {
case "add":
if(!target) return message.channel.send("Veuillez mettre l'id une personne !");
if(target.id === client.config.botId || target.id === client.config.ownerId) return message.channel.send("Cette personne fait partit du personnel du bot !"); //Si l'id est égal au mien ou au bot, on bloque
if(!reason) return message.channel.send("Veuillez mettre une raison !");
const newBl = {
id: target,
name: target.tag,
reason: reason,
author: message.author.id,
time: moment(new Date()).format("DD/MM/YYYY HH:mm:ss")
};
await client.createBl(newBl);
break;
default:
message.channel.send("Argument invalide !");
break;
}
Or, si je met mon id, il me blacklist correctement. Si je met l'id d'un ami, j'obtiens cette erreur : ```js
(node:12352) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'id' of undefined
at Object.module.exports.run (d:\programmation\PicsouBot\commands\Owner\bl.js:15:19)
at module.exports (d:\programmation\PicsouBot\events\client\messageCreate.js:53:9)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
(Use `node --trace-warnings ...` to show where the warning was created)
J'ai donc console.log(target) et : quand c'est moi, j'obtiens un object de User et, si c'est un ami : undefined.
Le problème est donc : pourquoi moi je me fait blacklist et pas mon ami ?
C'est parce que tu essaies de récupérer un utilisateur dans le cache mais il semble n'y avoir que toi. Pour pouvoir utiliser le cache, il faut utiliser les Intents
Je te conseille plutôt d'utiliser la méthode fetch pour récupérer un utilisateur
client.users.fetch(**)
Salut salut 
Vous pouvez m'aider, j'ai un mod mail ( support en mp ), je souhaite empêché le bot de transmettre les everyone et les here, par le weebook qu'il crée
Avez vous une solution
if(message.content.includes("@everyone") return;
Je présume.
Et si tu refusais la permission de ping here et everyone au bot?
Je ne sais pas si les webhooks sont concernés par les ClientOptions, en soit, ajoutes lorsque tu initialises ton bot disableMentions: « everyone »
Si tu peux créer un array ça serait encore mieux
Ou alors tout disable et ajouter l’option allowedMentions et choisir ce que tu veux ( rôles, users )
Nan, c'est pas le bit c'est un weebook
Humm, okay
Je vais essayer merci
il va te falloir une regex
if (message.content.startsWith("!test")) {
message.react('✅').then(() => message.react('☑️'));
const filter = (reaction, user) => {
return ['✅', '☑️'].includes(reaction.emoji.name) && user.id === message.author.id;
};
message.awaitReactions(filter, { max: 1, time: 60000, errors: ['time'] })
.then(collected => {
const reaction = collected.first();
if (reaction.emoji.name === '✅') {
message.reply('Tu a réagit avec le pousse vers le haut ');
} else {
message.reply('Tu a réagit avec le pousse vers le bas ');
}
})
.catch(collected => {
message.reply('T BO SI TU VOIS SA ');
});
}
comment je fait pour lui ajouter un role avec ce code ?
Merci
Il faut que tu utilises : member.roles.add()
Merci beaucoup
ok je vais test
entre les () je met quoi ?
il faut que je dev un role ?
L'ID du rôle
member.roles.add(871377033022812220)
ok je test
sa fait rien
if (message.content.startsWith("!test")) {
message.react('✅').then(() => message.react('☑️'));
const filter = (reaction, user) => {
return ['✅', '☑️'].includes(reaction.emoji.name) && user.id === message.author.id;
};
message.awaitReactions(filter, { max: 1, time: 60000, errors: ['time'] })
.then(collected => {
const reaction = collected.first();
if (reaction.emoji.name === '✅') {
message.reply('Tu a réagit avec le pousse vers le haut ');
member.roles.add(871377033022812220)
} else {
member.roles.add(871377033022812220)
message.reply('Tu a réagit avec le pousse vers le bas ');
}
})
.catch(collected => {
message.reply('T BO SI TU VOIS SA ');
});
}
member.roles.add("871377033022812220")
Yep
jsuis justez genre debile 😂
Mais ton object member doit correspondre à la bonne personne aussi dans ton code
C'est celui qui react qui doit avoir le rôle ?
Chose importante, la personne qui réagit est de classe User
Et toi tu dois ajouter à un GuildMember
donc
🤔
GuildMember.roles.add("l'id?")
Non
C'est une classe GuildMember
Je t'invite à apprendre un peu Javascript et lire la documentation DJS
Tu n'as pas l'air très familier avec
J'ai l'impression que tu fais à taton sans forcément réfléchir
Ou une vidéo youtube 😅
Car la c'est pas formé comme une commande, sa doit être dans un fichier genre le Index 
Je te connait twa, Hugo ^^
Just Heberg ;)
ah uyiiiiiiii
Tu peut apprendre avec des vidéos youtube hein 🤷♀️
Oui, mais la docu et cool
Aussi :)
Tu fais sans la doc Duck ?
Si je map un des valeurs d'un fichier en JS vanilla, le fichier sera dans les sources de mon site ?
Si c'est le cas, comment mapper sans qu'il y ait quelconque accès, faire une sorte de ngFor avec Angular sans montrer un seul fichier JS ?
Ouais, par youtube ou forum
Je sais pas si c'est clair
Ou je demande
Un génie
Après ... la doc quand tu connais le langage t'as pas forcément besoin d'exemples
tant qu'ils typent tout ce qui font, c'est cool
Ba pas forcément hein, tu peut oublier ou autres 🤷♀️
Puis, c'est mieux en vidéo avec des exemples/explications
Sauf qu'en vidéo tu recopie ce qui est dit et t'apprends pas
Ba tu peut apprendre comme ça 🤔
Pas tellement d'accord avec ça
Pas si tu recopies bêtement ce qui est dit
Ba après, chacun à ses manières de faire
Bien sûr
C'est tout à fait respectable
:p
Chaque manière est bonne à prendre tant qu'on y prends du plaisir
Yep
L'autre soucis des vidéos YouTube, c'est que tu sais pas si ce qu'on te fait faire c'est la bonne manière de faire ou non
Ya plusieurs manières de faire quelques choses, donc y'as aucune manière mieux que les autres
Tu préfères un chargement de 1seconde ou 0.7s ?
Merci bien
Ho que si ...
Simple exemple : une vidéo guide qui t'explique comment faire un bot modo avec 5 commandes et qui te met tout le code dans un évent messageCreate avec je ne sais combien de if / else
Et en parallèle un guide qui t'explique comment faire un command handler avec un fichier par commande de manière ultra propre
Donc oui il y a toujours plusieurs manières de faire mais tu as toujours des manières mieux que les autres
Oui, donc aucun rapport avec la manière de faire 👍
Ca c'est de l'optimisation
Son exemple est parfait
Je parle d'optimisation de lignes, (code)
Et pareil, l'optimisation d'affichage sur des sites web, suivant la manière de faire, ça sera différent
Tu peut faire plusieurs manières et que les deux sois optis ou non 🤷♀️
Donc bon, sa tient pas la route ce que tu dis
C'est aussi une question de maintenance et de lisibilité de code. C'est des bonnes pratiques à avoir dès le début et ça, les vidéos YouTube ne le proposent pas vraiment (ça dépend qui mais faut connaître un minimum)
Ca ne tient pas la route ce que je dis ?
please les gueguerres de code si vous pouviez juste faire un thread pour éviter de trop remplir le channel d’aide js avec votre débat
Yep sorry
merci les mecs
Très jolie ton portfolio btw

Après je suis plus trop sur Djs en ce moment
J'ai hâte !!
Perso j'ai déjà fait la migration de mon bot sur discord@dev, j'attends juste la release pour mettre en prod et être sûr
Mais en vrai ils ont fait du bon taff, c'cool 😇
Je créer un thread pour recenser les avis 👀
Si ça peut intéresser
Aimez-vous la v13 de Discord.js ?
Same, mon bot principal est en dev sur la @dev, il y aura pas beaucoup de changements je pense entre la prod et la release
Salut, j'ai un utilisateur qui a un problème avec une app que j'ai développé avec electron : il y a quelque chose sur son pc qui empêche mon app electron d'avoir accès à internet, il ne lui est pas possible de fetch une url (ERR_NETWORK_ACCESS_DENIED)
Je lui ai fait ajouter une exception à son pare-feu mais ça ne règle pas le problème
@red torrent Salut, escalade l'erreur avec des check : https://www.electronjs.org/docs/tutorial/online-offline-events
Note: If you need to communicate the connection status to the main process, use the IPC renderer API.
Ça ne vient pas du main process ça vient du process visuel
Le fetch qui ne fonctionne pas c'est le fetch du navigateur pas le electron-fetch
Ah d'acc, c'est moins évident dans ce cas de le régler ^^
Ouais ça vient vraiment de quelque-chose qui bloque l'accès à internet de l'appli
Pare-feu ou antivirus
Non à mon avis ca ne vient pas de là
En ouvrant la console et en tapant un fetch sur google.fr j'ai la même erreur
Ce fameux ERR_NETWORK_ACCESS_DENIED
L'erreur provient-elle uniquement de son environnement utilisateur ?
Sur quelques centaines d'utilisateur c'est le premier à avoir ce problème
Donc je suppose que oui, d'autant plus que si je recherche des erreurs similaires avec chromium ça finit toujours sur "désactiver le pare-feu et l'antivirus"
Peut-être à-t-il changé ses paramètres réseaux ?
Ca ne peu pas venir d'un conflit entre ton app et ses datas sur chromium ?
Un problème de pare-feux ou une connerie comme ça à mon avis
Ah c'est pas bête s'il a utilisé un proxy ou un vpn
Soit c'est un problème machine, soit un conflit de ton app avec un environnement utilisateur soit le problème est tous simplement l'utilisateur de la machine
Oui c'est ce que je pense
Check proxy
Hello, il me semblait avoir vu la possibilité de restreindre les slash commands à des permissions spécifiques.
Impossible de le trouver en tant que propriété sur la doc, et sur les forums rien de bien concluant...
Pourtant j'suis presque sûr de l'avoir vu une fois ! Quelqu'un saurait m'aiguiller ?
Et en effet, sur la doc dégeu de discord, il y est bien :
Bah du coup j'ai trouvé
Faudra leur dire d'update 
T'as une explication assez claire ici
Ah niquel merchi
Faut pas lire la Doc Discord si tu utilises DiscordJS
J'essaye de l'utiliser, j'ai ça comme erreur
TypeError [INVALID_TYPE]: Supplied permissions is not an Array of ApplicationCommandPermissionData.
at ApplicationCommandPermissionsManager.add (D:\Users\spam\Documents\bot-max\node_modules\discord.js\src\managers\ApplicationCommandPermissionsManager.js:225:13)
at Object.execute (D:\Users\spam\Documents\bot-max\src\events\commands.js:34:33)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
[Symbol(code)]: 'INVALID_TYPE'
}
alors que ma table de permissions est bien
[ { id: '238299830940598272', type: 'USER', permission: false } ]
C'est chelou
Hop my bad j'ai réussi
Bonjour, j'ai cette erreur mais je prend pas normalement tout devrais marcher :
https://cdn.discordapp.com/attachments/795046104223055902/872071446145413180/unknown.png
le code :
Ton get(e.channel_id) renvoie nul, ça veut dire que ton Channel est pas dans le cache
Faut que tu fetch le channel plutôt
Tu peux m'envoyer la modification a faire s'il te plaît (car ce code là c'est pas moi qui la fait c'est Quentinium)
Je préfère que tu le fasses toi pour que tu apprennes 😇
T'as juste à rajouter une ligne où tu fetch() le Channel directement sur bot.channels
Il est dev de bot certifié quand même donc je pense il sait faire il a juste la flemme 
J'ai mis ça @ashen rapids :
const channel = await bot.channels.fetch(e.channel_id).catch(err => {})
if(channel) {
channel.send(e.message)
}```
Hein quoi
C’est quoi ce catch ? Tu essayes dans ton catch de voir si y a un channel et de l’envoyer ?
ah non pardon bordel
J’ai cru que le if était dedans ouf
Pour try / catch, il faut que tu englobes ton await et pas que tu mettes un .catch sur la résolution de ta promesse
ça dépend juste de comment tu veux faire la chose cainiven, sois tu englobes tout dans un try catch, mais du coup dès que tu auras une erreur il kill tout le reste qui doit suivre et du coup dans ton catch tu renvoies une erreur ou autre
Sois tu viens juste faire un if (!channel) return
Mais c'est dans le cas ou tu peux faire sans imaginons ou que tu as quand meme du code a exécuter
Ou alors tu met pas tout dans ton try catch mais voilà à toi de voir en fonction de ton besoin surtout
Perso je conseille d'englober tous tes events d'un try / catch (dans ton Event Handler) pour catch les erreurs et éviter que ton bot crash
est ce que vous avez une alternative sérieuse à react.js en framework front ?
vue
Vue c'est excellent, c'est léger et simple à utiliser
Sinon si tu veux vraiment un bon framework, solide, t'as Angular
C'est généralement le framework que j'utilise sur les gros projets et où la durabilité / solidité est importante
pour des gros projet justement tu conseillerais plutot angular ou react pour du front pur ?
Du Angular plutôt que du React oui
React est trop libertaire et suivant tes paradigmes et façon de développer, ça peut vite devenir le cirque
Angular c'est ultra structuré, donc beaucoup plus facile à maintenir et à développer à plusieurs
D'autant plus que si une librairie pète sur React, tu dois tout changer à chaque fois. Angular a l'avantage d'être un framework maintenu par une grosse boite quand même
(React n'est pas un framework attention)
Et bien-sûr, Angular c'est full Typescript, donc maintenance du code beaucoup plus simple si tu l'utilises correctement
Angular a l'avantage d'être un framework maintenu par une grosse boite quand même
Pourquoi React c'est la startup du dimanche qui est dessus ? 🤣
Non mais ça reste une librairie !
@south steppe mon avis c'est que le choix du framework dépend essentiellement du type de projet
Angular et pas comparable a React/Vue, c'est du MVC, donc forcement plus complet, car c'est ce qu'il recherche
React/Vue sont des "librairies" (comme vient de le redire Calypso) mais ultra complète aussi, sinon ce ne serait pas tant utilisé
L'avantage de celle-ci c'est qu'elle s'accorde a d'autres framework ou autre très facilement, la preuve avec wordpress ou tu peux facilement ajouter une couche React ou Vue, Ghost, Laravel et autre
Ca dépend vraiment de ce que tu recherches
Si maintenant ton projet est amené à être exporté sur du mobile, je te conseille React, c'est celui ou plus facilement (voir vraiment facilement) tu vas pouvoir tout réutiliser pour ton app React Native
Si tu veux un projet assez light, mais toujours avec un max d'outils à dispo forcement, je te conseille Vue
Si tu veux un projet très complet, ou vous allez être une grosse équipe dessus vu la charge de travail, je te conseille Angular
Et si tu veux juste changer la couleur du background, je te conseille jquery 
ET ... si tu arrives pas à te décider, que tu veux faire du React et du Vue, tu peux utiliser Vitejs 
Mais en vrai d'ailleurs que ton projet soit light ou non, hésite pas a regarder Vitejs (le monsieur de Vue) qui apporte une vitesse de build juste dingue, qui intègre très facilement React ou Vue (et même du native code)
Hello, comment puis-je modifier la réponse à une interaction ?
interaction.reply(`Test`);
ne retourne rien
Montre tout le code
Bah le code c'est juste ça mais ça marche pas du coup
const reply = await interaction.reply(`🤖 Envoi d'une réponse`);
reply.edit("salut");
Il n'y a pas de fonction edit sur l'interaction
merci pour cet avis
pour le moment j'en suis au tout premier stade de recherche et la décision m'appartient pas complètement mais je vais vraiment prendre ça en compte pour la suite de mes recherches
et tu peux utiliser le .defer pour avoir une espèce de loading au lieu de ton :robot: Envoi d'une réponse
en vré
Yep t'inquiète mais c'est juste pour du debug, c'est pour faire des mini-jeux
Bordel j'ai cette erreur
ça fait 20 minutes je suis dessus impossible de la régler
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
require('discord-buttons')(client); // ceci cause l'erreur
Il y a des flags spéciaux à mettre pour les buttons discord ? (rien n'est dit dans la doc)
genre iscord-buttons ?
Nan -__- Je parlai de ton screen mdrr, j'y connais rien là dedans
ptdr
ok
le d vient du module
donc j'imagine qu'il n'y a pas d'erreur dans leurs trucs
@lone flax
non mais je veux pas edit un bouton
je veux en ajouter un
mais juste quand j'essaye de require le module ça veut déjà pas
j'ai une erreur
Pour utiliser les buttons, tu dois apporter de cette manière :
const { MessageButton } = require('discord.js');
discord.js ? 😮
Oui
C'est intégré dedans?
await button.reply.think(true) nan ?
Oui
Ensuite pour créer le bouton, rien de plus simple:
new MessageButton().setLabel('. . .')....```
Utilise ce qui est prévu par DiscordJS, t'auras moins de soucis
Et t'as bien une doc
Je ne savais même pas, merci
Je l'utilise aussi est c'est très facile et simple 😉
J’avais même pas vu qu’ils l’avaient ajouté, bien joué
Wow le boss le vrai @keen narwhal
😜
Elle est sortie officiellement car moi quand je la dl j'ai la 12.5.3
Trop cooool
C'était.une question ptdr
Non elle est pas sortie encore en release
Mais tu peux déjà dev dessus pour que une fois qu'elle sorte, tu as juste à deploy
Ouais mais je préfère dev quand elle est sortie et puis flemme de dev MTN en JS
Après j'ai surtout 0 chance
Parce que je fais juste mon handler
TypeError: Cannot create property 'shardCount' on string
direct
Deso j’ai cru que c’était une affirmation mdrrr, c’est que je n’ai pas suivie les dernières news de DJS
En effet
Bah ça m'énerve j'ai des erreurs internes moi là =)'
Oue envoie car même si c'est toujours en dev chez eux, ça fonctionne très bien
Pas tout fonctionne, les options d'intéractions déconnent
En tout cas il y a quelques semaines, à voir si c'est corrigé
Aujourd'hui j'ai pu tester tout sans problème
Je vous enverrai ça plus tard
Par hasard, quelqu'un connait un bon Form Builder open-source qu'on pourrait intégrer dans une application JS existante ? 😇
non désolé
Bonjour, j'ai un problème avec mon help.js ça me dit que fs.readdirSync('./commands') n'est pas une fonction mais je ne comprend pas l'erreur. J'ai essayer de mettre fs.readdir(..) ca ma mis la même erreur, j'ai aussi essayé de réinstaller fs la même chose aussi. Donc je viens ici pour vous demander de l'aide.
voici le code
const discord = require('discord.js');
const fs = ('fs')
const embed = new discord.MessageEmbed()
module.exports = {
name: 'help',
description: 'Affiche la liste des commandes.',
syntax: '`<commande>`',
alias: null,
run(message, args, client) {
const commandFiles = fs.readdir('./commands');
for (const file of commandFiles) {
const command = require(`./${file}`)
embed.addField(command.name, command.description)
message.channel.send(new discord.MessageEmbed()
.setTitle('__**:question:・Aide**__')
.setColor('#00ff00')
.setDescription(`__**🛠️・Utilitaires**__\n\n\`\`\`help,ping\`\`\`\n\n__**:shield:・Modération**__\n\n\`\`\`kick,ban\`\`\`\n\n__**:moneybag:・Économie**__\n\n\`\`\`withdraw,deposit,balance,top,work,slut,crime,rob\`\`\``))
}
}
}
voici l'erreur
TypeError: fs.readdir is not a function
at Object.run (C:\Users\neird\OneDrive\..\commands\help.js:11:33)
at Client.<anonymous> (C:\Users\neird\OneDrive\..\index.js:24:65)
at Client.emit (events.js:375:28)
at MessageCreateAction.handle (C:\Users\neird\OneDrive\..\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (C:\Users\neird\OneDrive\..\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (C:\Users\neird\OneDrive\..\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
at WebSocketShard.onPacket (C:\Users\neird\OneDrive\..\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
at WebSocketShard.onMessage (C:\Users\neird\OneDrive\..\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
at WebSocket.onMessage (C:\Users\neird\OneDrive\..\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (events.js:375:28)
me ping svp
const fs = ('fs')
->
const fs = require('fs')
^
ah mais oui, j'avais oublier mercii
Aie aie aie l'erreur du Dev Français.....
On doit te pendre normalement pour ce genre d'erreur mec
À ce stade, ce n'est plus une pendaison mais une torture qu'il faut.

Ouais je suis d’accord, mais c’était ma fatigue
Mdrrrr
DISCORD.JS 13 
Pouah je suis passé de la v12.18.1 de node à la v16.6.1 😂
il est sorti ?
rip ça va être super long de tout passer en v13
yes
Welcome to DJS v13 !!
Enfin 😎
good bye Commando 😦
En plus ya des bot gca qui tourne avec commando nn ?
Tu va devoir redev des trucs lors du passage en v13
Tout les bots de GCA sont sous commando
bah en plus de redev les parties qui change entre v12 et v13 il va falloir changer totalement toute les commandes
ça se voit t'es trop content 


Je confirme
Je comprend pas pk plus de commando c'était archi cool ce ptit framework après ça fait longtemps que j'ai pas touché du d.js
Mais sinon pourquoi pas rester en v12 :/
je vais clairement le faire
flemme en vrai des packages le font en v12, commando c’est très bien
La v13 de discord.js est sorti quand ?
aujourd'hui
C'est possible en définissant un type en TS de faire :
type group = {
GROUP: {
name: string
// Pour chaque clés mises dans GROUP, elles auraient automatiquement le type name: string
}```
Typer automatiquement les valeurs dans GROUP quoi
Je comprends pas trop ce que tu veux 🤔
En attendant voilà la généricité je ne sais pas si ça t'aide, si tu peux m'éclairer dans ta demande
export class Group<T> {
name: T;
}
Je vais expliquer plus simplement en tout cas j'espère
type group = {
GROUP: {
GROUP1: {
name: string
},
GROUP2: {
name: string
}
// J'aimerais ne pas avoir besoin d'écrire GROUP1, GROUP2, que tout ce qui se trouve dans GROUP prenne le type name: string
}```
@loud flint Est-ce mieux ?
Pourquoi tu ne fais pas un array au lieu de plein d'objets ?
Parce que je m'en sers après, c'est important que ça soit une multitude d'objets.
Ah
Pas pratique je sais
Mais à la fin ça me facilite la vie
C'est qu'une mauvaise passe lol
Non pas vraiment, je pense que c'est pas une bonne chose, m'enfin bon, là n'est pas ta question
C'est vraiment pas ouf car tu pourrais avoir l'objet groupe de type any et ensuite insérer group1, group2 etc comme tu le souhaites
Ou alors utiliser un dictionnaire
Mais une nouvelle fois tu te retrouves avec group1/group2 etc
const group = {
GROUP: [
{
name: "",
},
{
name: "",
},
{
name: "",
},
{
name: "",
}
]
};
C'est si simple avec un tableau :/
Comme je t'ai dit, avec un tableau j'aurais plus de mal à récupérer mes propriétés.
Elles doivent absolument être nommées ?
Yes.
Bah en gros avoir un système de clefs valeur
Oui oui, c'est pas bête tient
Là je pourrais typer à 100%
Indirectement tu as résolu mon problème lol
class MyThing {
name: string;
constructor(name: string) {
this.name = name;
}
}
const GROUP = new Map<string, MyThing>();
map.set("GROUP1", new MyThing("nom"));
// ...
Quelque chose dans le style
A implémenter selon ton projet bien sûr :p
Yep.
Content d'avoir pu t'aider :p
Et bah écoute je te remercie grandement
J'avais pas pensé à faire un dico !
Tu m'as sauvé un peu de temps
Dans le cas où ta clé doit avoir absolument un nom, le dico c'est la meilleure piste :p
Bien je commençais sans doute à fatiguer pour réfléchir correctement
Ou alors un any, mais dans ce cas c'est un peu contourner Typescript lol
C'est exactement la réflexion que j'allais te faire quand tu m'as dit de faire "any"
Et ça reste moins flexible avec le any
https://media.discordapp.net/attachments/873357772719271986/873359344253669386/unknown.png?width=960&height=467 , j'aimerai faire un formulaire sous forme de popup
Comment faire svp
On est d'accord mdr
je suis pret a payer car j'ai vraiment besoin d'aide
On ne donne pas de code ici lol
Pas forcement de code
"Comment faire" => Donne un peu plus de détails sur ce que tu veux on pourra te donner des pistes
Pas de soucis 🙂
Comment creer une popup en js et comment faire que quand tu clique sur le bouton sa l'affiche
sans donner ce resultat pas ouf
sa c'est pas ouf par exemple 😂
Ce que tu peux faire, c'est créer une division invisible, qui devient visible en premier-plan
Lorsque tu cliques sur un bouton ou quelque chose de la sorte
C'est ce que j'aurais fait en tout cas
Tu jouerais sur les props z-index et display
Si mes souvenirs sont bons
Ou visibility plutôt !
Oui, personnellement j'imagine une div display: none par défaut (ou alors cachée autrement si tu veux l'animer).
Tu la stylises comme tu veux, et en appuyant sur un bouton tu ajouterais/enlèverait une classe "active" et cette classe comporterait le "display: block"
J'étais revenu sur ça, visibility me parait plus approprié
Si tu veux l'animer, joue avec visibility, max height etc plutôt que display none
Cependant, si tu veux être user-friendly niveau accessibilité, si tu utilises PAS display none, n'oublie pas "aria-hidden"
@loud flint La doc va me complexifier la vie,
J'ai réfléchis dans ma tête
Mais c'est un type d'objet que je veux, pas un objet
Mais je pense avoir trouvé une alternative
Si ça correspond à ce que tu veux why not !
La généricité correspondait plus effectivement
Mais attends du coup là classe MyThing dans mon exemple tu la voulais générique ?
Je suis pas sur de bien piger ce dont tu as besoin du coup
C'est le " supportant plusieurs niveaux de profondeurs " qui m'a interpollé
Sous entendu que je peux typer dans une profondeur tous les éléments se trouvant dedans
Si j'ai bien compris
Je ne vais pas utiliser de class, mais un type
Sais-tu que discord.js est sur la v13 maintenant ?
donc si j'installe la v13 cela fonctionnera ?
Non
Je pense que ton erreur proviens du faite que discord.js a changé de version. Et donc des parti de ton code aussi on probablement change
Après je me trompe peut être
Je t'avoue je ne suis pas plus au courant que toi
Tu peux t’aider de la documentation discord.js pour essayer de trouvé l’erreur.. mais moi je n’est pas encore codé en étant dans la v13 donc..
je vais aller voir encore merci 😉
Avec plaisir, et désolé de ne pas pouvoir t’aider plus que ça :/
t'inquiète 😉 je vais trouver un autre moyen
D’accord
Non il peut rester en v12 sans problème.
Il a juste mal renseigné ses intents.
Le code stp
Je te l’envoie en privé dès que je suis chez moi
D'acc
les changements pour passer en discordjs v13 ;_;
@slim anvil regarde mp quand tu as le temps 🙂
plutôt que de passer par une boucle :

