#javascript-typescript
1 messages · Page 88 of 1
Voilà, faut trier et t'auras sûrement un meilleur score
j'ai regardé le array.sort sur le wiki ça a pas l'air compliqué
Oui la fonction de base te mache tout le boulot
y'as quelque chose que j'ai pas trés bien compris
comment j'peux demander al a fonction .sort() de trier par ordre décroissant ?
T'as regardé la Doc de la fonction ?
yep
Ta fonction sort() peut prendre une fonction en argument
Pour comparer des nombres plutôt que des chaînes, la fonction de comparaison peut simplement soustraire b à a
Tout est indiqué ici : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
yep c'est le lien sur le quel j'étais
Enfait le truc
C'est que je comprend pas comment je peux trier par level
Ok je viens de voir
Je vais essayer quelque chose et je reviens vers toi, merci de ton aide 😄
Ton a et ton b corresponde à un index de ton tableau
yep j'ai vu , fat que je fasse a.level - b.level
Exact
Comme ça tu pourras trier ton array d'object
j'ai reussi !!!
les teams sont équilibrés
je vais faire un peu plus de test, mais merci beaucoup @ashen rapids pour ton aide
Ca te donne quoi comme score ?
j'ai vraiment beaucoup appris en faisant cette commande, merci à toi pour ton temps 😉
15-16
Pas mal !
je vais approfondir un peu pour que le bot puisse retourner les équipe et pas que le score de chaqu'une, mais bon ça c'est un jeu d'enfant
Pas de soucis, avec plaisir
Content de voir quelqu'un qui veut juste apprendre 😇
en regardant mon code comme ça je me rend compte que c'est super simple, fallais juste y penser ^^
merci à toi, bonne soirée !
gg à toi
une alternative à vuex en beaucoup plus light, sans devoir créer son propre store
https://pinia.esm.dev/
Jvai l'utiliser juste pour l'ananas kawaiiii
Bonjour,
Je viens vers vous car j'ai ce regex : /file\(?.*?\)/gm, hors, j'aimerai bien pouvoir faire comme un insert d'un string dans mon regex à la place de file, savez-vous comment je peux m'y prendre car cela fait maintenant 30 minutes que je suis totalement bloqué
Merci d'avance 😉
J'ai pas compris exactement ce que tu voulais faire ?
J'ai mon regex que je t'ai envoyé
Et j'aimerai bien pouvoir replace le file par un string qui sera mis dans mon regex
@ashen rapids
Tu veux un regex pour remplacer tous les files par ce que tu veux ?
Non non
J'ai déjà mon regex
qui me permet de fetch quelque chose qui commence par file
Oue
Sauf que j'aimerai bien le modifier
par ce que je veux
sauf que je n'arrive pas du tout à remplacer le file par ce que je veux dans le rege
x
Ha je crois que je commence à comprendre 😂
Tu veux pouvoir modifier ton regex dynamiquement pour mettre quelque chose d'autre que file ?
yes
Tu peux utiliser RegExp => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
Ça prend un string en premier argument
C'est ce que j'ai essayé de faire justement
Mais avec le regex que j'ai, ça m'a mis des erreurs
Fais voir ?
Rien que quand je fais ça new RegExp("file(?.*?)", "gm"), ça ne fonctionne pas
J'ai un "Invalid group"
Que je n'arrive pas à faire sauter
Sauf si j'enlève le premier ?
Bonjour j'aimerai faire une commande de set prefix et j'en ai trouvé une sur ce site mais cela ne fonctionne pas
Un set de prefix ?
Je fais des tests
oui
Pas compris
Tu y arrives ou pas du tout ? car c'est vraiment chelou 😂
Merci beaucoup en tout cas x)
une commande qui permet de changer le prefixe du bot que sur un serveur
ca me met ça
if (!prefixes[message.guild.id]){
^
ReferenceError: message is not defined
at Object.<anonymous> (C:\Users\MESSAL\Documents\Guillaume\Codage\Bot discord\projet bot test\index.js:13:17)
←[90m at Module._compile (internal/modules/cjs/loader.js:1063:30)←[39m
←[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)←[39m
←[90m at Module.load (internal/modules/cjs/loader.js:928:32)←[39m
←[90m at Function.Module._load (internal/modules/cjs/loader.js:769:14)←[39m
←[90m at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)←[39m
←[90m at internal/main/run_main_module.js:17:47←[39m
C:\Users\MESSAL\Documents\Guillaume\Codage\Bot discord\projet bot test>```
L'erreur est claire : ta variable message n'existe pas
mais ca je sais mais faut mettre quoi
Tu sais développer ?
j'apprendq
Déjà il faudrait ton code
ok
const Discord = require('discord.js');
const fs = require('fs');
module.exports.run = async (bot, message, args) => {
if(!message.member.hasPermission("ADMINISTRATOR")) return message.reply("Vous n'avez pas la permission");
if(!args[0] || args[0 == "help"]) return message.reply("Syntaxes: !prefix <nouveau prefix>");
let prefixes = JSON.parse(fs.readFileSync("./prefixes.json", "utf8"));
prefixes[message.guild.id] = {
prefixes: args[0]
};
fs.writeFile("./prefixes.json", JSON.stringify(prefixes), (err) => {
if (err) console.log(err)
});
let prefixEmbed = new Discord.RichEmbed()
.setColor("#FF9900")
.setTitle("Prefix Set!")
.setDescription(`Set to ${args[0]}`);
message.channel.send(prefixEmbed);
}
module.exports.help = {
name: "prefix"
};```
let prefixes = JSON.parse(fs.readFileSync("./prefixes.json", "utf8"));
if (!prefixes[message.guild.id]){
prefixes[message.guild.id] = {
prefixes: process.env.PREFIX
};
}
let prefix = prefixes[message.guild.id].prefixes;
let messageArray = message.content.split(" ");
let command = messageArray[0];
let args = messageArray.slice(1);
if(prefix == command.slice(0, 1)) {
let commandFile = bot.commands.get(command.slice(prefix.length));
if(commandFile)
commandFile.run(bot, message, args);
}```
Tu utilises la dernière version de DiscordJS ?
oui
Donc normal, les commandes ne fonctionnent plus de la même façon
Sur la dernière version, t'as les slash command maintenant
ok
Sinon tu as besoin d'escape tes caractères
Tes parenthèses plus précisément
Comment ça escape ? avec un .split ?
Un truc du genre :
new RegExp("file\\(?.*?\\)", "gm")
Thx
Bonsoir, cette erreur me soûle comment je pourrais réglé ça ? CLIENT_MISSING_INTENTS
TypeError [CLIENT_MISSING_INTENTS]: Valid intents must be provided for the Client.
Hello
Cela veut dire que tu es en v13 de discord js
et que tu sois spécifier des intents pour ton client
Mhh d'accord mais je débute en js et je regardais un tuto mais cette erreur me bloque tu saurait remplacer ça const client = new Discord.Client(); par la bonne solutions ?
:_: Discord Developer docs results:
• Gateway: Gateway Intents - List of Intents
• Gateway: Commands and Events - Event Names
:_: discordjs.guide results:
• Popular Topics: Gateway Intents
• Popular Topics: Privileged Intents
Ci dessus des liens vers le guide et la ddoc sur ce que sont les intents et comment les utiliser
Sinon pour ton problème, tu peux faire un tour vers les options du client !
:_: ClientOptions
Options for a client.
Pour t'expliquer rapidement, les intents te permettent d'accéder à des events et des données
je sais que ça peut paraître beaucoup à lire, mais le guide / la doc est vraiment bien fait
Pour le début tu auras besoin au mininum je pense d'accéder aux messages créés dans une guild (event: message create) et de quelques autres events avec l'intents guilds.
Donc, les options du client sont sous forme d'objet et la valeur attendue pour les intents c'est un array des différents intents du client (logique)
const client = new Discord.Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES]})
Salut j'ai une erreur avec mon code DJS : TypeError: Cannot read properties of null (reading 'kick')
const { SlashCommandBuilder } = require('@discordjs/builders');
const Discord = require('discord.js');
module.exports = {
data:
new SlashCommandBuilder()
.setName("kick")
.setDescription("Kick someone")
.addUserOption(option =>
option.setName("membertokick")
.setDescription("Member to kick").setRequired(true)
).addStringOption(option =>
option.setName("reason").setDescription("Reason of kick").setRequired(true)
),
/**
* @param {Discord.CommandInteraction} interaction
*/
async execute(interaction){
if(!interaction.member.permissions.has("KICK_MEMBERS")){
return await interaction.reply("❌ You must have kick members permission")
}
let message = "kick"
await interaction.options.getMember("membertokick").kick({reason: interaction.options.getString("reason")}).catch(e => {
message = "❌ Missing permission"
})
await message.reply(message)
},
};
sa marche très bien avec ma commande ban mais celle de kick me génère une erreur
Check toujours ta variable membre avant d'essayer de le kick
salut j'ai un petit problème avec mon .catch qui n'est pas pris en compte, vous avez une idée ?
connection = await message.member.voice.channel.join().then((connection)=>{
try{
const receiver = connection.receiver.createStream(message.member, {
mode: "pcm",
end: "silence"
});
const writer = receiver.pipe(fs.createWriteStream(`./recorded-${message.author.id}.pcm`));
writer.on("finish", () => {
message.member.voice.channel.leave();
message.channel.send("fin");
});
}catch (err){
console.log(err)
}
})```
ton catch n'est pas pris en compte car tu l'as mal "positionner" essaye de le mettre là
connection = await message.member.voice.channel.join().then((connection)=>{
try{
const receiver = connection.receiver.createStream(message.member, {
mode: "pcm",
end: "silence"
});
const writer = receiver.pipe(fs.createWriteStream(`./recorded-${message.author.id}.pcm`));
writer.on("finish", () => {
message.member.voice.channel.leave();
message.channel.send("fin");
});
}
}).catch(err){
console.log(err)
}
je suis pas sur mais moi c'est ce que j'aurai fait en tout cas @analog hamlet
en fait un try{} doit forcément être suivi d'un catch du coup j'ai pas trop le choix de le mettre la, mais je vais essayer de le mettre pus haut :/
ahhh oui att
oué non même plus haut il est pas pris :/
je ne comprends pas la semaine dernière le code marchait -_-
bah logiquement si tu as pas d'erreur il te retourne rien en console
oué mais la j'ai une erreur et il crash
ah
en gros c'est pour rec un channel sauf que ce code marche seulement sur les gens qui sont sur la version app de discord les gens qui sont sur la version web font crash le code, du coup normalement juste à partir d'un try{} et d'un catch ça devrait marcher mais là non :/
bah là comme ça j'sais pas j'suis pas un expert en discord js essaye de voir avec quelqu'un d'autre désolé :/
justement personne n'y arrive :u
sinon j'ai trouver un code qui permet de bypass l'erreur mais c'est pas hyper recommander :/
à toi de voir en attendant
Discord dit travailler sur un nouveau système de permission pour les slash command, car c'est un peu maladroit sur la manière dont ça a été fait
Vous vous êtes organisé comment vous de votre côté pour les permissions ?
J'ai pas encore tout fait mais perso sur les slash commands c'est pas le plus gros souci je pense
En tout cas sur Discord.js le fait de créer des commandes c'est beaucoup trop verbeux et pour moi ils devraient le changer ça, que Discord update l'API ou pas
Après sur les permissions globalement que tu voies la commande ça me dérange pas et après tu fais des vérifications de base comme ce que tu pouvais faire sur les commandes de base en fonction de l'auteur du message donc au final je trouve que les perms sont pas si mal foutues, juste pas assez exploitées par Discord pour que sur ce point les slash commands soient meilleures
Perso j'suis pas fan de l'idée que les membres puissent voir toutes les commandes dispo, même si on check les droits derrière
ouais fin pour moi c'est pas le plus gros problème que j'ai avec les slash commands actuellement quoi
Tu utilises le DiscordJS Builder ?
pour l'instant ouais
je prévois d'utiliser d'autres trucs si j'en trouve voire de faire mon propre système
Apparrement ça bouge beaucoup en ce moment au niveau de Discord et DiscordJS, donc à voir ce que ça donne
Mais du coup pour set des permissions sur la commande, faut d'abord créer toutes les commandes, toutes les fetch, et set les permissions dans une boucle
Je trouve ça un peu lourd
ouais
Ha mais on peut pas cacher la commande quand on a pas la perm ?
Ca la grise en fait
Salut quelqu'un pourrait me dire pourquoi mon embed ne s'envoie pas ?
const { MessageEmbed } = require('discord.js');
const { prefix } = require('../config.json')
module.exports.execute = async (client, message) => {
console.log("ok")
if (message.author.bot) return;
if (message.content.startsWith(prefix + "infoembed")) {
console.log("ok")
const infoembed = new MessageEmbed()
.setColor('#0099ff')
.setTitle('Some title')
.setURL('https://discord.js.org/')
.setAuthor('Some name', 'https://i.imgur.com/AfFp7pu.png', 'https://discord.js.org')
.setDescription('Some description here')
.setThumbnail('https://i.imgur.com/AfFp7pu.png')
.addFields(
{ name: 'Regular field title', value: 'Some value here' },
{ name: '\u200B', value: '\u200B' },
{ name: 'Inline field title', value: 'Some value here', inline: true },
{ name: 'Inline field title', value: 'Some value here', inline: true },
)
.addField('Inline field title', 'Some value here', true)
.setImage('https://i.imgur.com/AfFp7pu.png')
.setTimestamp()
.setFooter('Some footer text here', 'https://i.imgur.com/AfFp7pu.png');
message.channel.send({ embeds: [infoembed] });
}
}
Le système de slash command est un peu en lui même maladroit 🤔
D'ailleurs j'ai pas compris pourquoi si la commande est en mp (commande globale), tu peux pas reply l'interaction 
tu dois mp l'utilisateur
c'est pas pratique ;_;
heyo, quels sont tes intents ?
Oue mais je pensais que si t'avais pas la perm sur la slash command, elle s'affichait pas
ah oui effectivement c'est bof
j'ai juste "const client = new Client({ intents: [Intents.FLAGS.GUILDS] });"
ah c'est normal alors
pour recevoir les events concernant les messages dans une guild
tu dois avoir l'intent GUILD_MESSAGES, donc Intents.FLAGS.GUILD_MESSAGES
pour avoir la liste de tous les intents et des events correspondant
:_: Discord Developer docs results:
• Gateway: Gateway Intents - List of Intents
• Gateway: Commands and Events - Event Names
const client = new Client({ intents: [
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MESSAGES
]});
j'ai fais comme ça
c'est bon ?
yes
ok merci
avec plaisir 👀
l'embed ne veut toujours pas s'envoyer :/
j'dois être maudit par djs je tente tout ce qui est possible pour l'envoyer mais rien n'y fait
Et les logs que t’a mit tu les vois ?
nan
Fallait commencer par ça 😏
Donc ta commande est pas exécuté 🤔
ton fichier s'appelle comment ?
messageCreate.js
const { SlashCommandBuilder } = require('@discordjs/builders');
const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');
const { clientId, guildId, token } = require('./config.json');
const fs = require('fs');
const rest = new REST({ version: '9' }).setToken(token);
const commands = [
]
const files = fs.readdirSync("./commands")
console.log(files)
files.forEach(f => {
const props = require('./commands/' + f)
if (props.data) commands.push(props.data.toJSON())
});
(async () => {
try {
await rest.put(
Routes.applicationGuildCommands(clientId, guildId),
{ body: commands },
);
console.log('✅ Successfully registered application commands.');
} catch (error) {
console.error(error);
}
})();
ah bah oui j'suis con

Bonjour, je fais actuellement un systeme de levels, le principe est simple est simple 1 message = entre 15 et 25 xp . Pour définir au bout de combien d'xp on a un niveau je fais 0.15 fois la racine carrée de l'experience de l'utilisateur et j'ai le niveau. mais je cherche a faire l'inverse, en sachant le niveau trouver l'xp de l'utilisateur. j'ai essayé de faire le niveau au carré divisé par 0.15 mais ça marche pas. si qqn aurait une idée merci
C'est simplement une équation 👀
soit x nombre de level et y xp nombre entiers positifs ou nuls
0.15 * Math.sqrt(y) = n
n / 0.15 = Math.sqrt(y)
(n / 0.15)² = y
du coup c'est pas le carré divisé par 0.15, c'est divisé par 0.15 au carré ;)
OK
re salut, j'ai refait un peu tout mon code de 0 mais j'ai encore c'te soucis d'embed qui ne s'envoie pas
par exemple pour ce code :
const { MessageEmbed } = require('discord.js');
module.exports = {
name: 'ping',
aliases: ['latency', 'lag'],
permissions: 'ADMINISTRATOR',
description: "Envoyer le ping de l'utilisateur",
cooldown: 5,
execute(message, args, commandName, client, Discord) {
const Response = new MessageEmbed()
.setColor("GREEN")
.setDescription(`🏓 ${client.ws.ping}ms`);
message.channel.send({ embeds: [Response] })
}
}
Mon commandHandler :
const { readdirSync } = require('fs');
module.exports = (client, Discord) => {
const commandFolders = readdirSync('./Commands');
for (const folder of commandFolders) {
const commandFiles = readdirSync(`./Commands/${folder}`).filter(files => files.endsWith('.js'));
for (const file of commandFiles) {
const command = require(`../Commands/${folder}/${file}`);
client.commands.set(command.name, command);
};
};
};
et pour les fichiers
Re bonjour, t'as un handler d'events ? x)
ah oui manifestement
yes, du coup, possible de voir ton event messageCreate ?
yep
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
tien
le message était trop long
je dois rajouter quoi ?
ah
mmh 🤔
j'suis bloquer sur la même erreur depuis cet aprèm j'peux pas avancer j'suis à deux doigts décéder sur place x)
est ce que tu es sur que ton execute dans ton fichier cmd s’exécute
et est ce que tu es sur que ton commande handler marche ? 🤔
la question est comment s'en assuré
const { readdirSync } = require('fs');
module.exports = (client, Discord) => {
const eventFolders = new readdirSync('./Events');
for (const folder of eventFolders) {
const eventFiles = readdirSync(`./Events/${folder}`).filter(files => files.endsWith('.js'));
for (const file of eventFiles) {
const event = require(`../Events/${folder}/${file}`);
if (event.once) {
client.once(event.name, (...args) => event.execute(...args, client, Discord));
} else {
client.on(event.name, (...args) => event.execute(...args, client, Discord));
};
};
};
};
en console il me détecte bien le fichier ping.js et les dossiers parents
ah peut être mon miracle de la soirée
est ce que tu peux faire un console.log dans ton fichier messageCreate
au tout début
je console.log quoi ?
ce que tu veux, ok par exemple, et ensuite test d'envoyer un message
ok j'ai att
ok la commande marche
D:\DiscordJS\Events\Message\messageCreate.js:18
const command = client.command.get(commandName) ||
TypeError: Cannot read properties of undefined (reading 'get')
client.commands
fin
ça dépend de ce que tu as def comme collection
ouais c'est client.commands.get
D:\DiscordJS\Events\Message\messageCreate.js:40
cooldowns.set(command.name, new Collection());
^
ReferenceError: Collection is not defined
ok j'ai
cet erreur est toute con enft

roh yes enfin doux jésus marie joseph
bon par contre le cooldown ne marche pas hahaha
const { Client, Message, MessageEmbed, Collection } = require('discord.js');
const { Prefix } = require('../../config.json');
ici
au tout début
bah là tu import les collection depuis discord js 🤔
en gros tu def où que client.cooldowns = new Collection()
nul part
const { cooldowns } = client;
if (!cooldowns.has(command.name)) {
cooldowns.set(command.name, new Collection());
};
ça doit se passer ici l'erreur je pense
/**
* @param {Client} client
* @param {Message} message
*/
j'ai ça aussi
je dois t'avouer que je ne connais absolument mais alors pas du tout ça
ah bon bah pg tkt tu m'as déjà bien aidé j'vais pouvoir continuer
mais je pense pas que le problème vienne de ça
juste avant, ton indeX.js il ressemble à quoi ? 🤔
const { token } = require('./config.json');
const Discord = require('discord.js');
const { Intents, Collection } = Discord;
const client = new Discord.Client({
intents:
[
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MESSAGES,
Intents.FLAGS.GUILD_INVITES
]
});
client.commands = new Collection();
client.cooldowns = new Collection();
['eventsHandler', 'commandsHandler'].forEach(handler => {
require(`./Handlers/${handler}`)(client, Discord)
});
client.login(token);
ah bah si il est là
j'avais zappé x)
ah je me disais
bah ça dépend x)
:_: Discord Developer docs results:
• Gateway: Gateway Intents - List of Intents
• Gateway: Commands and Events - Event Names
sur list of intents tu as tous les intents avec les events associés
nan je pense pas parce que le code doit envoyé un embed d'erreur si jamais la commande est exécuter 2 fois dans la même minute
et y a rien qui pourrait correspondre que j'ai pas déjà mis
Oui nan mais pour ton cooldowns les intents n'intervienent pas
mmh
problème function
Salut, jessaye de faire un truc comme ca : ```
async function FetchUserInformations(users) {
const token = await GetToken()
users.forEach(async user => {
const userResponse = await axios.get(
`URL`,
{
headers: {
Authorization: `Bearer ${token}`,
'Client-Id': ``
},
})
UserInformation = userResponse
})
return UserInformation
}```
mais ca me remplis le UserInformation avec la meme choses tous le temps
alors que j'aimerais avoir 2 résultats car j'ai 2 users
Du coup ca donne const xpAAtteindre = user.level * user.level / 0.15 * 0.15 sauf que comment on mets des parenthèses ? Prsq sinon ça va faire la division avant le 0.15 au carré
;_;
Math.pow(level / 0.15, 2)
ok merci
je comprend pas ce que tu fais ?
le users te return quoi ?
enfaite j'essaye de faire en sorte de récupérer les infos de plusieurs user toutes les 20 minutes et que ca soit stoker dans une table
ah bah j'ai reussi 😄
Mais c'est sur ton API à toi ?
pourquoi pas avoir une route qui elle même te return tous les users voulu ? que plutot faire de multiple get
non l'api twitch
Ah yup oki
Quelqu'un pourrait me dire comment faire pour avoir un format sympa pour le temps ? 2021-09-12T15:47:42Z
Tu peux utiliser MomentJS
C'est une librairie pour manipuler les Dates
Hyper pratique
top merci
Petite question
J'ai mon VSCODE qui me dit : 'await' has no effect on the type of this expression.
Sauf que j'ai bien une fonction async
On est d'accord que c'juste mon éditeur qui part en couille ?
Oue c'était bien ça
ça m’est jamais arrivé ou j’ai du bypass cette remarque de vs 
Ca me le fais souvent en ce moment
ça te bloque ton debug? ou c’est juste une information
généralement ca arrive surtout sur les gros projets avec du webpack, rolllup etc mais bon ca m'arrive pas tant que ça non plus, essaye peut etre de clear cache de vscode ? 
j'en profite pour rebondir là dessus, noooo ❌
momentjs est bcp trop lourd, et malheureusement tu ne peux pas choisir ce dont tu as besoin, tu es obligés d'importer tout moment
juste pour du formatage ou autre, tu peux simplement utiliser DateFNS, et à la limite Dayjs
Le package est pas lourd pour momentJS
D'après npm
Il est lourd
à partir du moment ou tu es obligés d'importer toute la lib pour utiliser uniquement .format()
là ou sur date-fns tu import uniquement format quand tu en as besoin qui plus est
Donc la différent est forcément notable
un exemple
Je suis d'accord que c'pas intelligent mais la diff est notable, c'est de l'opti au mm prêt
Pas au mm prêt
typiquement dateFns dispose d'une fonction uniquement pour addDays, moment c'est un .add() ou tu passes un argument pour lui dire que c'est pour ajouter un Day, donc la fonction est bcp plus lourde et lente lors de l'appel de celle-ci
y a pleins de comparaison ou on te dit que uniquement sur ce genre de chose c'est 8 à 10 fois plus rapide, c'est pas rien :/
c'est juste "plus chiant" a utiliser car oui tu dois import quand t'as besoin, mais après ton app tu lui fais gagner en perfomance sans trop d'effort, c'est tjrs important
Je suis intéressé par avoir une comparaison entre moment et date-fns au niveau de la perf alors (sans compter le poid du package)
Mais je suis ok que Moment a pas été très intelligent là-dessus*
C'est juste que c'est assez vieux, mais c'est juste pour ça qu'ils ont sortis Luxon hein
Bah du coup je te l'ai donné, moment tu vas devoir malheureusement utiliser tout le package, donc le poid entier du package
Je savais pas que Luxon = Moment
date-fns tu vas pouvoir simplement importer la fonction que tu veux, donc tu import pas tout dans ton projet
ah bah yes pour palier justement a ce probleme de poid, et pas que y avait quelques autres soucis à force
après je suis ok sur le fait que moment ca reste la moins verbeuse pour le coup
Ha oui du coup ils maintiennent plus Moment
Après tu peux juste utiliser les méthodes avec les dates en natif c'est complet
Fin ca suffit
Pas toujours, c'est souvent chiant à manipuler
c'est genre hyper chiant ouais mdr
Si tu veux un bon formatage, je vois pas l'intérêt de réecrire une fonction, surement moins bien, qu'une lib qui le fait déjà
Baah ça fait le taf en vrai
Après ouais c'est un peu chiant donc c'est à l'avis de chacun
Salut j'ai une erreur mais je comprends pas pourquoi RangeError [EMBED_FIELD_NAME]: MessageEmbed field names must be non-empty strings.
const { MessageEmbed } = require('discord.js');
module.exports = {
name: 'info',
aliases: ['about', 'me'],
description: "Envoyer ses infos personnels ou les infos d'un autre joueur",
execute(message, args, commandName, client, Discord) {
const guild = message.guild;
const info = new MessageEmbed()
.setTitle("Voici les informations de " + guild.name)
.addFields(`Le fondateur du serveur ${guild.name} est ${guild.owner}`)
.setColor("BLUE")
message.channel.send({ embeds: [info] })
}
}
Tu t'es tompé sur addFields à mon avis
La syntaxe c'est ça :
.addFields( { name: 'Regular field title', value: 'Some value here' }, { name: '\u200B', value: '\u200B' }, { name: 'Inline field title', value: 'Some value here', inline: true }, { name: 'Inline field title', value: 'Some value here', inline: true }, )
Ahhhhhh
La syntaxe c'est ça :
{ name: 'Regular field title', value: 'Some value here' },
{ name: '\u200B', value: '\u200B' },
{ name: 'Inline field title', value: 'Some value here', inline: true },
{ name: 'Inline field title', value: 'Some value here', inline: true },
)```
oui j'avais complètement oublier que ça avait changer
Ou si tu veux qu'un field : .addField('Inline field title', 'Some value here', true)
Même chose mais sans s
merci !
ah j'ai encore le même message d'erreur pourtant j'ai changer
const { MessageEmbed } = require('discord.js');
module.exports = {
name: 'info',
aliases: ['about', 'me'],
description: "Envoyer ses infos personnels ou les infos d'un autre joueur",
execute(message, args, commandName, client, Discord) {
const guild = message.guild;
const info = new MessageEmbed()
.setTitle("Voici les informations de " + guild.name)
.addField('Fondateur du serveur', guild.owner, true)
.setColor("BLUE")
message.channel.send({ embeds: [info] })
}
}
ok donc ça vient du guild.owner parce que quand je mets du texte il me dit rien
Il faut que tu rajoutes un .toString()
il me met une erreur sur le .toString()
const { MessageEmbed } = require('discord.js');
module.exports = {
name: 'info',
aliases: ['about', 'me'],
description: "Envoyer ses infos personnels ou les infos d'un autre joueur",
execute(message, args, commandName, client, Discord) {
const guild = message.guild;
const info = new MessageEmbed()
.setTitle("Voici les informations de " + guild.name)
.addField('Fondateur du serveur', guild.owner.toString(), true)
.setColor("BLUE")
message.channel.send({ embeds: [info] })
}
}
TypeError: Cannot read properties of undefined (reading 'toString')
ouais mais du coup ça me donne une suite de chiffre au lieu d'avoir le pseudo
du coup je mets entre ${} ?
ah bah sa marche pas j'ai tout de souligner
Montre ?
ah et aussi quelqu'un sait pourquoi j'obtient une valeur nul ici
{ name: '• Fondateur du serveur 👑', value: `${guild.ownerId.toString()}` },
{ name: '• Nombre de channel écrit 📝', value: `${guild.channels.cache.filter(ch => ch.type === "text").size}`},
{ name: '• Nombre de channel vocaux 🎼', value: `${guild.channels.cache.filter(ch => ch.type === "voice").size}`},
{ name: '• Nombre de personne présente sur le discord 🙋♂️', value: `${guild.memberCount - 1}`}
euh tu viens de me perdre t'as pas un exemple stp x)
<@guild.ownerId>
sans les {} du coup ?
j'pense pas que sa fonctionne dans un embed
mais du coup tu sais pourquoi j'ai une valeur nul pour mes salons vocaux et écrits ?
Si avec les {
j'pense que sa marche pas parce que j'ai une erreur
mais au pire j'laisse comme ça c'est pas grave
value: ${<@guild.ownerId>}
nan j'ai une erreur
Montre ?
T'as oublié les `
T'as oublié de fermer avec > déjà
toujours des erreurs
Et c'est seulement ton Owner id que tu dois mettre dans tes brackets
<@${guild.ownerId}>
j'enlève le guild ?
${guild.<@ownerId>} comme ça ?
Non comme ça
ah yes merci
BOnsoir, quelqu'un saurait expliquer pourquoi il me manque certains pseudo ?
compteur = 0
text = ""
text2 = ""
text3 = ""
while (compteur != data.params.used_slots) {
if(data.params.players[compteur]) {
var pseudo = data.params.players[compteur].name
if(compteur < 14) {
console.log('1ère condition'+compteur+' | '+pseudo)
text = text + `${pseudo}\n`
}
if(compteur > 14 && compteur < 29) {
console.log('2ème condition'+compteur+' | '+pseudo)
text2 = text2 + `${pseudo}\n`
}
if(compteur > 29) {
console.log('3ème condition'+compteur+' | '+pseudo)
text3 = text3 + `${pseudo}\n`
}
}
compteur = compteur + 1
}```
Résultats des console log
1ère condition0 | Bot01
1ère condition1 | Bot02
1ère condition2 | Bot03
1ère condition3 | Bot04
1ère condition4 | Bot05
1ère condition5 | Bot06
1ère condition6 | Bot07
1ère condition7 | Bot08
1ère condition8 | Bot09
1ère condition9 | Bot10
1ère condition10 | Bot11
1ère condition11 | Bot12
1ère condition12 | Bot13
1ère condition13 | Bot14
1ère condition14 | Bot15
2ème condition16 | Bot17
2ème condition17 | Bot18
2ème condition18 | Bot19
2ème condition19 | Bot20
2ème condition20 | Bot21
2ème condition21 | Bot22
2ème condition22 | Bot23
2ème condition23 | Bot24
2ème condition24 | Bot25
2ème condition25 | Bot26
2ème condition26 | Bot27
2ème condition27 | Bot28
2ème condition28 | Bot29
2ème condition29 | Bot30
3ème condition31 | Bot32
3ème condition32 | Bot33
3ème condition33 | Bot34
3ème condition34 | Bot35
3ème condition35 | Bot36
3ème condition36 | Bot37
3ème condition37 | Bot38
3ème condition38 | Bot39
3ème condition39 | Bot40
Problème toujours d’actualité ?
Oui
J'ai tout essayé mais j'ai toujours pas réussi à résoudre le problème
Tu pourrais envoyer tout le code stp je suis pas sûr que le probleme vienne de la portion que tu as envoyé
alors j'ai pas lu les logs que tu envoies ou quoi, mais si tu as des cases manquantes, ca peut peut etre venir de ta condition
if(compteur < 14) {
donc 14 est ignoré
if(compteur > 14 && compteur < 29) { 14 est ignoré, 29 aussi
if(compteur > 29) { 29 est ignoré
c'est voulu ?
Oui et non, enfaite le reste c'est juste du code de Mtx, j'utilise leur API pour récupérer les informations d'un serveur gmod
bah après
if(data.params.players[compteur]) {
il y a peut etre juste pas idk, et comme il incremente dans ts les cas
faudrait avoir un log de la data recu
ah non mais pardon étant sur tel j'avais mal vu ce qu'il loggait
ta full raison mdrrrr
Je log la data entière ?
non ça tu ne m'as pas répondus
si c'était voulu ou non
Il y a des cases qui sont pas pris en compte parce que tu fais des comparaisons strictement supérieur ou inférieur
a mon avis dans ton cas il y a des cases ou tu devrais faire <= ou >= par ex
Bah j'aimerais les 15 premiers donc oui c'est voulu comme ça commence à 0
if compteur >= 14 et >= 29 alors je pense
Je crois que je l'ai déjà fait, mais le truc c'est pour quoi Bot01 est ignoré ?
Dans le log oui mais pas dans l'embed
Dans les logs j'ai tout mais pas sur l'embed
là comme je ne sais pas, essaye de régler déjà l'autre soucis de retester
de log aussi text, voir si il est bien dedans avant de l'envoyer dans l'embed
pour remonter au coeur du probleme
petit à petit
je test
Quand je log text text2 text3 en dehors de la boucle
Bot01
Bot02
Bot03
Bot04
Bot05
Bot06
Bot07
Bot08
Bot09
Bot10
Bot11
Bot12
Bot13
Bot14
Bot15
Bot15
Bot16
Bot17
Bot18
Bot19
Bot20
Bot21
Bot22
Bot23
Bot24
Bot25
Bot26
Bot27
Bot28
Bot29
Bot30
Bot30
Bot31
Bot32
Bot33
Bot34
Bot35
Bot36
Bot37
Bot38
Bot39
Bot40
J'ai mis des >= et <= à chaque condition, maintenant j'ai tout sauf le 1er
Pourtant dans le log de text il y est
Yo, comment je récupère la personne qui a invité quelqu'un ?
message.mentions.users.first()
Hello, en gros le principe c'est qu'avant qu'un membre soit invité tu check toutes les invites, et ensuite quand le membre est invité tu regardes là où une invite s'est rajouté
Et le .inviter ?
ça dépend de comment tu veux le faire, si c'est juste combien de personnes l'utilisateur a invité (via les invitation illimités de préférences) tu recup toutes les invites d'une guild et tu prends celle de l'utilisateur, sinon pour un truc plus poussé tu stockes ça dans une db
et tu edit si une personne leave par ex, où réinvité après avoir quitté
etc.
Hello, je viens vers vous pour vous demandez un petit coup de main, j'ai un petit soucis, j'essaie de faire un petit bot musique pour moi mais j'ai un soucis quand je veux le lancer pour le tester ça m'affiche cette erreur (pourtant je ne vois pas d'erreur, je préfère demander à d'autres personnes au cas ou):
@fresh river je te conseille de regnérer le token de ton bot au plus vite
Déjà fait oui j'ai zappé
sinon pour ton problème c'est que quelque part tu essaies de lire la propriété de quelque chose qui n'existe pas (undefined)
Oui, mais le soucis, c'est que j'ai bien fait gaffe et y a rien qui n'est pas bon
Enfin si du coup il doit y avoir quelque chose, mais je vois pas ce qui ne va pas
t’as rien dans ton dossier commands/ ?
Nop
ok et t’as bien npm i discord.js-commando etc?
Peut etre que ton nodejs a pas les droits admin ?
Normalement à moins que tu ai modifié ton installation NodeJs est dans ton path donc t'es pas obligé de tracer tout le chemin
Si normalement y a les droit admin
Non ça ne marche pas
Essaye sans le mode debug
Juste à un endroit il a mis client.once c'est pas client.on
Il peut utiliser client.once 🤔
Ok non mais je dis ça comme ça moi j'apprends juste à coder
Les bots musique vont être shutdown par discord
Ça sert à rien de s’embêter à en faire un
Seulement les bots public
Je pense que si tu utilises l'API Youtube juste pour un serveur, ça passe
D’ailleurs tu sais pourquoi ?
J’ai pas plus creuser que ça
Parce que Groovy a payé un Youtube Premium et utilise l'API pour des milliers de personnes derrière
En se faisant de l'argent
Ah donc tout les autres doivent aussi abandonner leur bot juste pour lui
Genre rythm et tout
Oui
C'est Youtube qui strike
Mais si tu utilises l'API Youtube juste pour un serveur, t'auras jamais de soucis je pense
Là le problème c'est que des milliers de gens en profitaient derrière
Ya Spotify après
Après ce sera meme sentence avec spotify a mon avis 
Un jour ou l'autre je pense oui
En même temps il y a légalement un problème et un manque à gagner énorme pour les musiciens (et maisons de disques) du fait de ne payer que 10€ par mois pour des centaines d'utilisateur
La seule solution légale serait de faire payer la même redevance que les magasins (pour la musique) aux bots et encore c'est pas la même population
Bonjour,
J'aurais besoin d'aide pour fetch un membre via son ID en gros je stock l'id du joueur, et je voudrais récupérer les informations complete de la personne comme je peux faire pour un channel avec un fetch
Cordialement
GPOIRE
Un Member ou un User ?
Un membre
Dans ton object Guild, t'as les membres
Et tu utilises la méthode fetch() pour récupérer ton membre
@fresh riverEssaye ma solution pour voir 🙂
Je vais essayer
Hello,
Comment je peux faire pour check tout les joueurs connecté dans un channel vocal
Regarde sur la Doc DiscordJS, l'object VoiceChannel
Tu as pu voir la doc du VoiceChannel. Sur la page de la doc, qu'est ce qui peut être intéressant pour toi déjà ?
Problème réglé
Salut est ce que c'est bien d'utiliser repl.it pour coder un bot en JS ?? Ou c'est mieux d'utiliser Node.JS
Ou peu importe
Mais replit c’est simplement un IDE online je crois donc aucun rapport avec node.js ou non
Mais c’est juste ton ide logiquement
Dans tous les cas utilise nodejs et vscode
https://nuxtjs.org/fr/v3/
le vite bundler sur nuxt ça va etre le feu
Ah ouais pas mal
Salut !
Je viens un peu vous partager mon code pour faire du code review et avoir un peu l'avis de tout le monde 😇
J'ai voulu rendre un peu plus propre mon code (et surtout plus lisible), pour enlever un enchainement de if / else.
Je suis donc arrivé à ça :
const actions = {
'view': async () => {
const score = await interaction.client.scoreboard.getScore(user);
return `${user} a ${score} FatPoint(s)`;
},
'add': async () => {
if (points <= 0) {
return interaction.reply('Le nombre de points doit être supérieur à 0');
}
await interaction.client.scoreboard.editScore(user, points);
return `${user} a reçu ${points} FatPoint(s)`;
},
'remove': async () => {
if (points <= 0) {
return interaction.reply('Le nombre de points doit être supérieur à 0');
}
await interaction.client.scoreboard.editScore(user, -points);
return `${user} a perdu ${points} FatPoint(s)`;
},
'set': async () => {
if (points <= 0) {
return interaction.reply('Le nombre de points doit être supérieur à 0');
}
await interaction.client.scoreboard.setScore(user, points);
return `Le nombre de points de ${user} a été défini à ${points} FatPoint(s)`;
},
'reset': async () => {
await interaction.client.scoreboard.resetScore(user);
return `Les points de ${user} ont été reset`;
},
};
return interaction.reply(await actions[type]());
Bon ce qui me dérange ici, c'est que je répète le :
if (points <= 0) {
return interaction.reply('Le nombre de points doit être supérieur à 0');
}```
Donc si vous avez des retours, je suis preneur !
add, remove et set sont quasi les memes finalement
tu ne pourrais pas les regrouper ?
update: async (type: string = 'edit') {
if (points <= 0) return interaction.reply('Le nombre de points doit être supérieur à 0')
// code here
}
et du coup venir conditionner
await interaction.client.scoreboard[type === 'edit' ? 'editScore' : 'setScore'](user, points);
par ezemple
Oui du coup au lieu de :
return interaction.reply(await actions[type]());```
J'aurais:
```js
return ['view', 'reset'].includes(action) ?
interaction.reply(await actions[type])()
:
interaction.reply(await actions['edit'])(type);
Les paramètres tu veux dire ?
C'est vrai mais je trouve ça bizarre d'envoyer des paramètres à une fonction qui n'en prend pas
Ya pas de soucis niveau opti ?
De cette sorte, j'ai pas de répétition de code mais ça me fais toujours 3 if dans la fonction 'update', pas bien grave
En fait j'ai une sous commande, 'manage', qui regroupe du coup add, remove, set, reset et view
Après ce que tu peux faire c'est avoir un objet de tes strings que tu return aussi
Je suis obligé de conditionner mon ternaire
comme ca tu l'appelles elle pour savoir le texte que tu dois return
et tu peux le faire pour chaque aussi
Moi à ta place enfaite j'aurai simplement eu un service qui updateOrCreate
C'est-à-dire ?
{
'add': '%user% blablabalabla %points%'
}
et venir remplacer les %__% par le bon params
J'ai mon service update() qui permet d'ajouter des points et le service set() permet de fixer le nombre de points, pas de créer
le update ajoute à la valeure existante et le set remplace ?
Exact
Ah yes okay
Donc vu que je récupère l'action dans la commande directement, avec : const type = interaction.options.getString('action');
Bah je suis obligé d'avoir mon ternaire pour dire que add / remove et set, c'est l'action update
Ah oui okay
attend je réfléchis
Bah enfaite dans ce cas là t'emmerde pas
avant le call de ton action
if (['set', 'add', 'remove'].includes(type)) return interaction.reply('Le nombre de points doit être supérieur à 0');
comme ça il appelle meme pas le reste
car de toute façon ça servira à rien
J'ai pas compris ta condition là ?
Tu veux plutôt dire : && point <= 0
Putain oui pourquoi je me fais chier comme ça
Ce qui donne :
const actions = {
'view': async () => {
const score = await interaction.client.scoreboard.getScore(user);
return `${user} a ${score} FatPoint(s)`;
},
'add': async () => {
await interaction.client.scoreboard.editScore(user, points);
return `${user} a reçu ${points} FatPoint(s)`;
},
'remove': async () => {
await interaction.client.scoreboard.editScore(user, -points);
return `${user} a perdu ${points} FatPoint(s)`;
},
'set': async () => {
await interaction.client.scoreboard.setScore(user, points);
return `Le nombre de points de ${user} a été défini à ${points} FatPoint(s)`;
},
'reset': async () => {
await interaction.client.scoreboard.resetScore(user);
return `Les points de ${user} ont été reset`;
},
};
if (['set', 'add', 'remove'].includes(type) && points <= 0) {
return interaction.reply('Le nombre de points doit être supérieur à 0');
} else {
return interaction.reply(await actions[type]());
}
C'est déjà moins long 😂
pas nécessaire le else
Oue je peux le mettre en dehors aussi, c'est vrai
Merci pour tes retours intéressants !
bonsoir
j'ai un petit problème
const {
Client,
Message,
MessageEmbed
} = require('discord.js');
const maildb = require('../../models/maildb');
module.exports = {
name: 'mail',
description : 'Enregistre votre adresse mail',
/**
* @param {Client} client
* @param {Message} message
* @param {String[]} args
*/
run: async (client, message, args) => {
const email = args.join(' ');
const member = interaction.options.getMember(message.author.id);
if (!email) return message.channel.send(`\`Merci de refaire la commande en indiquant votre adresse mail.\``)
message.channel.bulkDelete(parseInt(1), true);
maildb.findOne({
guild: message.guild.id,
user: message.author.id
}, async (err, data) => {
if (err) throw err;
if (!data) {
data = new maildb({
content: [{
mail: email
}]
})
} else {
const object = {
mail: email
}
data.content.push(object)
}
data.save()
})
message.reply(`\`E-mail enregistré avec succès : ${email}\``).then(m => {
setTimeout(() => {
m.delete()
}, 7000)
const role = interaction.options.getRole('mail');
const member = interaction.options.getMember(user);
member.roles.add(role);
})
}
}```
et j'ai cette erreur là
C:\Users\melvi\Desktop\FollowDorian Elon\commands\utility\mail.js:19
const member = interaction.options.getMember(message.author.id);
^
ReferenceError: interaction is not defined
at Object.run (C:\Users\melvi\Desktop\FollowDorian Elon\commands\utility\mail.js:19:24)
at Client.<anonymous> (C:\Users\melvi\Desktop\FollowDorian Elon\events\MessageCreate.js:21:23)
at Client.emit (node:events:394:28)
at MessageCreateAction.handle (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\discord.js\src\client\actions\MessageCreate.js:23:14)
at Object.module.exports [as MESSAGE_CREATE] (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\discord.js\src\client\websocket\WebSocketManager.js:345:31)
at WebSocketShard.onPacket (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\discord.js\src\client\websocket\WebSocketShard.js:443:22)
at WebSocketShard.onMessage (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\discord.js\src\client\websocket\WebSocketShard.js:300:10)
at WebSocket.onMessage (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\ws\lib\event-target.js:132:16)
at WebSocket.emit (node:events:394:28)
at Receiver.receiverOnMessage (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\ws\lib\websocket.js:970:20)
at Receiver.emit (node:events:394:28)
at Receiver.dataMessage (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\ws\lib\receiver.js:517:14)
at Receiver.getData (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\ws\lib\receiver.js:435:17)
at Receiver.startLoop (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\ws\lib\receiver.js:143:22)
at Receiver._write (C:\Users\melvi\Desktop\FollowDorian Elon\node_modules\ws\lib\receiver.js:78:10)
PS C:\Users\melvi\Desktop\FollowDorian Elon>
Tu as un mélange entre DiscordJS V12 et DiscordJS V13
hello
en v13 je devrais l'écrire comment, car la j'ai recopier la doc discord
Tu peux regarder ce guide pour les commandes sur DiscordJS V13 : https://discordjs.guide/creating-your-bot/command-handling.html
même chose
Même chose c'est-à-dire ?
tu définis toujours pas de variable interaction dans ton code 👁️
d'ou est-ce que tu sort const member = interaction.options.getMember(message.author.id); ?
j'ai réglé se problème mais maintenant j'en ai un autre
la ligne 42 sur le screen est pas la même que tu as d'actuellement exécutée, mais sinon c'est message.member.roles.add
thanks but now I have this error
Il ne trouve pas le message @mystic bison
C’est bon j’ai trouvé merci en tous cas
Dr @mystic bison
qui peux m'aider pour un de bot discord musique
C'est probablement trouvable sur internet c'est vu et revu les bot musique
oe mais avec le tuto que j'ai trouver je suis bloquer a une etape
En expliquant ton bloquage, on pourra peut-être mieux t’aider 🙂
Tu peux voc pour que je puisse te montrer
Non
ok
Il y a quoi de compliqué à envoyer son erreur ici ?
ducoup
@lyric oasis, as-tu bien installé le module discord.js ?
oui
Je peux voir ton package.json ?
Tout s’explique !
Je te laisse lire ceci : https://github.com/discordjs/Commando/issues/413
Évite de montrer ton token à tout le monde
j'ai pas compirs mon erreur
oe
Et donc ? Qu’est-ce que tu n’as pas compris ?
mon erreur
Dans ce cas, qu’est-ce que tu as compris ?
rien
si
Dans ce cas, tu as mal lu
La réponse t’es donnée noir sur blanc
DiscordJS Commando est abandonné et ne sera donc pas compatible avec la v13.
Ils vous demandent donc de migrer vers le framework Saphire.
a ok comment je fais
Bah tu migres vers Saphire
@lyric oasis après une recherche Google que tu aurais pu faire toi-même : https://sapphiredev.github.io/framework/
Documentation for @sapphire/framework
donc je dois tout recommencer
En gros, oui
Moi non, Google, oui
ok
je trouve rien
Dans ce cas, il faut apprendre à chercher 🙂
j'ai cette erreur : Aucun débogueur disponible. Impossible d'envoyer 'variables' sur un bot de musique comment je peux régler ça ?
Euh, avec plus d’infos ce serait mieux 🙂
Au lieu d’utiliser le debuggueur utilise le terminal à gauche et fait node . dedans
Exactement
Oui…
Est-ce que vous savez qu’avant d’apprendre à utiliser une libraire, il faut apprendre le langage auquel il se rapporte et son environnement ?
Ou sinon regarder mon super tuto de bot pour cette étape 
😂
j'ai essayé mais ça m'affiche qu'il trouve pas le module commando
Quel as de la pub !
Bah il faut l’installer alors…
je l'ai fais ...
et bien fait npm i -s discord.js@commando
npm i
Ah merde déjà dans le package.json alors fais ce qu’à dis lprogead
😄
une personne de dispo pour m'aider pour le code d'en bot discord Svp
tu peux m'aider pour le code de mon bot discord de musique je suis bloquer
envoie ton code
mon code est bon mais je suis bloquer car apres je ne connait pas les commande qui faut mettre pour un bot discord musique
regarde sur youtube pour un premier bot
ducoup tu pourrais voc pour m'aider
One message removed from a suspended account.
Si c'est possible oe
@lyric oasis déjà, inspire-toi des bots déjà existants pour avoir une base
Ensuite, si tu en as les capacités, innove en ajoutant des commandes originales
One message removed from a suspended account.
@slim anvil Du coup j'suis allé voir un peu ce quep proposait date-fns par curiosité.
A ce que je vois dans la doc, ils fournissent rien pour gérer la timezone, si ?
Ha si d'accord, ya cette librairie : https://github.com/marnusw/date-fns-tz
Yup
Si si, il a demandé une liste de commandes
Il y a eu beaucuoup de débat sur DiscordJS V13 ici mais maintenant que j'ai pu tester, je peux le donner 😂
J'avoue que la gestion des permissions sur les slash commande n'est vraiment pas ouf, c'est pas pratique et je partage cet avis
Par contre pour les bouttons (les intéractions), je n'ai eu aucun soucis d'utilisation et je ne comprends pas le besoin d'utiliser une librairie externe discordjs-button comme beaucoup font
Voilà !
La librairie externe si les personnes sont toujours en v12 ça se comprend 🤔
Oui ça ok
et t’as la même chose pour les slash command en v12
donc perso je reste en v12 avec mon commando 😜
t'as pas des problèmes à rester en V12 ?
C'est un risque sur le long terme après
A voir en fonction du besoin
Aucun problème justement lol
C'est quoi la librairie que tu utilises en V12 pour les slash command ?
sur le coup j’ai pas le nom je suis pas sur pc
mais look sur npm y en a quelques unes
bah enfaite oui et non
c'est juste que du coup il va devoir maintenir plusieurs sytème différents
Mais après en soit c'est pas Discord API qui update réellement, c'est surtout Discord.JS qui est simplement un wrapper a DiscordAPI
Mais du coup les appels sont toujours les mêmes je suppose, sinon la v12 serait deja broke
pour l’instant je reste en v12 après ce n’est que mon avis perso ^^
en gros c'est juste la version de la gateway utilisée qui est pas la même @slim anvil
le truc c'est que les versions de gateway, Discord fait pas mal de roulement dessus
et dans tous les cas ils update parfois certains trucs aussi
donc au final rester sur la v12 @oak turret c'est pas bête hein mais c'est comme rester sur un bateau qui coule
ça fonctionne pendant un temps mais j'espère que t'as bien la suite en tête parce que sinon tu vas te noyer
Je rebondis juste sur le passage sur les permissions de slash commands.
DJS v13 propose une classe simplement utilisable pour pouvoir justement ajouter des permissions spécifiques à un slash command.
Après j’ai pas forcément le besoin de passer en v13 pour le moment, si je dois le faire je le ferais mais bon mon petit commando me plaît bien pour l’instant ^^
Je l'ai pas vu passer
Ha si tu parles du Permission Manager
Oui ok mais c'est toujours une galère entre la création de la commande et le set des permissions
Mouais
Le mieux serait de pouvoir set une permission en même temps que la création de la commande
Ça c’est pas de la faute de DJS, c’est l’API Discord qui oblige cela
Yep
Salut j'ai un ti soucis j'essaye de faire un truc comme ca :
console.log(results)
let xp = await results.xp + xpToAdd
let level = await results.level
let invite = await results.invite
const needed = getNeededXP(level)
if (xp >= needed) {
level++
xp -= needed
}
let insertExp = ` UPDATE member SET guild_id="${guildId}", user_id="${userId}", xp='${xp}', level='${level}' WHERE guild_id = '${guildId}' AND user_id = '${userId}'; `;
console.log(insertExp)
mais je recois ca en console : [ RowDataPacket { id: 2, guild_id: '770348620993658920', user_id: '216029549769654273', name: 'Snox', xp: 38, level: 0, invite: 0 } ] UPDATE member SET guild_id="770348620993658920", user_id="216029549769654273", xp='NaN', level='undefined' WHERE guild_id = '770348620993658920' AND user_id = '216029549769654273';
l'erreur est au niveau du update
« await results.xp » « await results.level »……..
et du coup pour ton problème ça devrait être results[0].xp
par exemple
ah bah oui
ct pour test monsieu
let { xp, level, invite } = results[0] voila ! :p
je cherche a savoir quel lien a utiliser la personne pour rentrer dans le serveur vous pouvez me dire ce que c'est ?
jparle plus francais hein jsuis fatiguer
Ta pas l'info de mémoire, ce que tu peux faire par contre c'est save dans une table le nombre d'utilisation de chaque invit puis quand un mec join tu check quelle invitation a plus d'utilisation que ce que tu avais enregistré
ouais mais justement j'aimerais bien savoir quand un mec rejoin la quel il a utiliser
si c'est celle de michel ou celle de jean jean
Bah je viens de te dire comment faire

C'étais clair nan ? 
oui mais a quel moment je recup l'invitation
au lancement de ton bot, tu récup toutes les invitations
quand un utilisateur join, tu regarde quelle invitation a +1
Voila 
je crois qu'ils vont bientot ajouter cette info à l'event member joined de tte façon
il y avait de la discussion sur le git de l'api
Ouais fin c'est juste le résultat ca, ca explique pas comment faire 😉
😅
Dans un guildMemberAdd
Trop d'information tue l'information
Tu es en v12 ? @floral bolt
oui
Ok
@floral bolt au pire paye moi pour faire ton bot 
l'euro symbolique si tu veux :p
Ouais nan du coup hein
salut j'essaye de crée un code que je peu éxécuté dans la console
document.getElementsByClassName("swal2-input")[0]
var speed = prompt("Speed of checker/gen (Recommended 1000 for fast pcs, 500 for slow)")
function generateCode() {
var code = "";
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (var i = 0; i < 4; i++)
code += chars.charAt(Math.floor(Math.random() * chars.length));
return code;
}
function main() {
document.getElementById("swal2-input").value = generateCode()+ "-"+ generateCode()+ "-"+ generateCode()+"-"+ generateCode();
document.getElementsByClassName("swal2-confirm swal2-styled").click();
}
setInterval(function() {
main();
}, speed);```
j'ai un probleme danss cette ligne
```document.getElementsByClassName("swal2-confirm swal2-styled").click();```
je n'arrive pas a trouvé la class name alors que regardé dans le code c'est écris quoi
```<button type="button" class="swal2-confirm swal2-styled" aria-label="" style="display: inline-block;">Redeem</button>```
Ici : class="swal2-confirm swal2-styled"
Ton button comporte la class swal2-confirm ET swal2-styled
La fonction getElementsByClassName doit prendre en paramètre une class
swal2-confirm swal2-styled n'est pas une class
ah daccord merci
et tu auras un tableau attention
pas simplement un element
qui peux m'aider je ne comprend pas mon erreur
Faut donner l’erreur pour ça 👀
ok voila le code mon erreur est a partit de for
const fs = require('fs');
const { Client, Collection, Intents, Interaction} = require('discord.js');
const{ token } = require('./config.json');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
client.commands = new Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
const command = require(./commands/${file});
client.command.set(command.date.name, command);
}
client.once('ready',() =>{
console.log('Je suis prêt!');
});
client.on('interactionCreate',async interaction =>{
});
client.login(token);
tu pourrais voc
Nop
en gros des que j'ecrit se que il a partir de for mon bot ne veux plus se co
sur mon serv
J'ai pas compris
si je met sa
for (const file of commandFiles) {
const command = require(./commands/${file});
client.command.set(command.date.name, command);
}
mon bot ne marche plus et jsp pk
Si tu peux donner l'erreur que t'as
ducoup ?
ok et je dois faire quoi ?
Tu comprends ce que fait ton code ou non ?
Je pense pas
Ici c'est plutôt réservé pour de l'aide en developpement
Si tu veux qu'on le fasse à ta place, tu peux créer une annonce sur le site de GCA !
non tkt et oui je comprend
Donc si tu comprends tu devrais savoir comment régler cette erreur 🤔
mais j'ai du mal pour corriger mes erreur
Bah c'est le principe du truc, en gros pour chaque fichier de ton dossier commands, il va set dans ta collection commands son nom en key et en valeur la cmd
donc command.date (je crois que c'est ça) n'existe pas, car manifestement tu ne l'as pas exporté dans un de tes fichiers
name*
Oui mais par extension .date aussi
ou data je suppose car je vois que tu as un event interactionCreate
ok mrc
Yo les gars je debute en developpement et j espere que vous pourriez m aider
ca me met ca sur le terminale
et ca sur la console
et des fois ca me met ca
merci de bien m aide
Nan mais pour la première erreur c'est juste qu'il est en v13 et qu'il n'a mis aucun intents ou pas de valiss intents pour le client
Vérifie bien ta version de discord.js puis ton code ou adapte le a la nouvelle version de discord.js@13.
@keen narwhalCode si jamais 🤔
Bonsoir,
J'ai ceci comme erreur dans ma console en lançant un bot :
node:internal/modules/cjs/loader:1183
return process.dlopen(module, path.toNamespacedPath(filename));
^
Error: The module '/home/container/node_modules/canvas/build/Release/canvas.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 83. This version of Node.js requires
NODE_MODULE_VERSION 93. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Object.Module._extensions..node (node:internal/modules/cjs/loader:1183:18)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:94:18)
at Object.<anonymous> (/home/container/node_modules/canvas/lib/bindings.js:3:18)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12) {
code: 'ERR_DLOPEN_FAILED'
}
Je suis sur un VPS perso donc possible que je n'ai pas tout installé 🤔 J'ai cherché mais je ne comprend pas bien au niveau des versions^^
Fais un node -v pour voir ta version ?
v14.17.6
Code 🤔
Je pense pas que il y aie un rapport avec le code ? 🤔
C'est une histoire d'erreur de version
T'as une issue dessus sur Git
Ok je vais check ça merci
Dit nous tout
C'est good, j'ai juste du changer la version dans le panel pterodcatyl
salut quelqun sais faire en sorte qu'un bot renvoie une video local ?
Salut !
Tu peux utiliser ça dans ton send => https://discord.js.org/#/docs/main/stable/class/MessagePayload?scrollTo=files
hey , merci je vais regarder ca de suite
petite question on est daccord que le bot est limité a 50mo en poid d'image ?
car j'essaye de faire un bot pour envoier des video lourde car j'ai pas nitro
nous on est limité a 8 sans nitro
je pense que le bot est limité a +
const path = require('path')
const { MessageAttachment,MessageEmbed } = require('discord.js')
const Commando = require('discord.js-commando')
module.exports = class VideoCommand extends Commando.Command {
constructor(client) {
super(client, {
name: 'test',
group: 'misc',
memberName: 'test',
description: 'Sends an image',
})
}
run = (message) => {
const embed = new MessageEmbed()
.setTitle('test')
.setDescription('test')
.files(test.mp4)
message.say(embed)
}
}
bon j'en suis a ca
mais je me retrouve avec une erreur mdr
ReferenceError: test is not defined
Tu peux pas mettre un file dans un embed ? 🤨
je sais pas mdr je par en live
Et faut que tu mettes le chemin vers me fichier
C'est une option que tu dois utiliser directement dans ton send
message.send.files(test.mp4) ?
je comprend quedal mdr
const path = require('path')
const { MessageAttachment,MessageEmbed } = require('discord.js')
const Commando = require('discord.js-commando')
const { testmp4 } = require('./test.mp4')
module.exports = class VideoCommand extends Commando.Command {
constructor(client) {
super(client, {
name: 'test',
group: 'misc',
memberName: 'test',
description: 'Sends an image',
})
}
async run(message) {
if (message) {
return message.send(testmp4)
}
}
}
j'en suis rendu a ca
mais avec ca
😅
les gens qui vont lire ca vont avoir des pensée suicidaire je le sais
Mais dis moi, tu es en v13 ou v12 ? 🤔
alors je suis en "discord.js": "^12.4.1",
Ha oui commando effectivement pas vu
Pas une bonne idée si tu créés un projet dessus, c'est mort commando
apres je comprend pas grand chose
Ca fonctionne quand même le lien que je t'ai envoyé
Prends juste en compte la ligne rouge
Et pas la ligne verte
c'est un petit bot perso pour envoyer des video +lourdes rien de bien grand
je vais voir ca merci
Ligne rouge : V12
Ligne verte : V13
okay thanks
const path = require('path')
const { MessageEmbed } = require('discord.js')
const { discord } = require('discord.js')
const Commando = require('discord.js-commando')
const embed = new discord.MessageEmbed().setTitle('Attachments').attachFiles(['./test.mp4']);
module.exports = class VideoCommand extends Commando.Command {
constructor(client) {
super(client, {
name: 'test',
group: 'misc',
memberName: 'test',
description: 'Sends an image',
})
}
run = message.send(embed);
}
je sais pas ce que je fais mdrrr
Pour ça qu'il faudrait que tu tu commences par les bases en JS 😅
ouh dur ce que tu as fait honnêtement
tu importes discord dans la librairie après avoir en plus importé messageembed
jsuis trop fort mdr
bas ouais mais si je mest les deux ensemble jai une autre erreur mdr
donc discord n'est pas défini de un
il est pas fun
ensuite use MessageEmbed() direct car tu l'as import de discord.js
mais parce que discord n'existe juste pas dans discord.js, tu peux importer l'objet Discord en entier si tu veux, mais pas avec des {}
;_;
mdr
je vais te faire un ex
// ton fichier fichier.js
function def() {
// ta function
}
module.exports = {
def,
}
// ton fichier index
const { def } = require('./fichier.js')
const defObj = require('./fichier.js')
// def() = defObj.def()
console.log(defObj)
// { def: [function:def] } (je crois que c'est affiché comme ça)
console.log(def)
// [function:def]
donc si jai bien compris def du module exporte vien de ma fonction def() ?
oui, principe de module.exports
mais en fait ça donne ça car je l'exporte à travers un objet
si j'avais fait
module.exports = def
def aurait été undefined dans mon fichier index
je sais pas si tu as compris
calypso t'expliquera sans doute mieux que moi mdr
Et bah alors ça galère mdr
Ahah littéralement 😝😅
@pulsar fiberducoups ta réussi ?
Officiellement non mdr
Mais la j'ai pas accès au pc car comment dire
Il est en petite pièce mdr
Ok mdr
Vous connaissez une lib qui permet de garder l'état d'un setTimeout après un restart d'une application ?
J'sais pas si vous comprenez ce que je veux dire
Oue j'y ai pensé mais si si je peux m'en passer ça m'arrange
la réponse est pas possible il faut stocker la donnée quelques part: ficher json, db ^^
si je peux me permettre tu en as besoin pourquoi ?
Quand je dis db, c'est que j'aimerais éviter de stocker ça dans mon MongoDB
Si le module gère ça lui même dans un fichier local, ça m'éviterais de coder un truc
Garder en mémoire des rappels, des temp role, etc ..
quick.db
bah tu peux faire qu'avec une db ^^
Non mais je sais 😂
La question c'est est-ce qu'il existe une lib qui existe déjà pour ce genre de besoin
Qui serait en gros un rewrite d'un setTimeout et qui gérerait lui même le stockage dans un fichier local
à ma connaisance non, ça m'étonnerait mais avec quick.db c'est plutot facile x)
Si rien existe, je ferai sûrement ça yep
car automatiser ce genre de chose, trop complexe, trop limiter
fais le toi même tu auras tout ce que tu veux 😄
Trop limité ça dépend, si quelque chose existe déjà et où ça répond à 100% à mes besoins why not
Tellement de choses à coder que j'ai pas envie de tout refaire
bah moi j'en connais pas, peut être qlq sera t'aider ^^
Ya cron après mais ça c'est pour les tâches récurrentes
oui plus
go poser ta question directement
ha mais je dev pas dans en java
Bonsoir je cherche a effectuer une redirection mais je n'ai pas accé a mon routeur dans ma class et je ne sais pas comme y avaoir accée si quelqu'un peut m'aider merci
export default class Search extends React.Component {
constructor(props){
super(props)
this.state = {
city : "Limoges",
}
}
setCity = (city) => {
this.setState({city})
}
goTo = () => {
this.props.navigation.navigate('List',{
city : this.state.city
})
}
render(){
return (
<View >
<TextInput style = {style.form} onChangeText={(city) => this.setCity({city})}/>
<Button
onPress={this.goTo}
title="rechercher"
color="#841584"
/>
</View>
);
}
}
Hello @slim anvil, dis moi t'aurais des références de dataTables cool à uses ?
bah react native c'est du javascript donc t'es sur le bon channel je te rassure
si tu prefere je posais la question pour qu'elqu'un
yes deux sec je vérifie juste la doc pour pas te dire de bétises
tu confonds nuxt je crois
ouais
de mémoire ça passe par des imports
nn c'est bon
Mais normalement tu l’as dans ton props
c'est bien ca la redirection
ah bah ptn
oui props
j'aurais pas cru
sinon tu peux import Redirect de react router aussi
Y a les 2
dans ce cas ¯_(ツ)_/¯
@oak turret euh la non pas de tête look github t’en auras des sympas
là je suis sur tel sorry
j'ai deja essayé d'importer ca
import { Redirect } from 'react-router'
et
import { Redirect } from "react-router-dom"
mais j'ai toujours un null qui est return
Pas de nouvelles bonne nouvelle on dis ça nan ? Bon bas ducoup ça a marché mais que si je l'héberge sur mon pc . Mais comme je dois m'en servir depuis mon téléphone j'ai pris un hébergeur et je me suis rendu compte que je suis un GROS TROU DU CUL j'ai voulu utiliser discord js commando pour me simplifier la vie vue que je n'y connais que dalle et arrivée la mon hébergeur est en v13 donc mon bot ne marche pas
Ducoup retour case départ car je
Suis complètement con
Tu peut te mettre en v12 🙂
Heu jsp mdr
Comment faire car jsais même plus ou jai pris l'hébergement
Rigole pas trop fort stp
Ok 😦
Le bot est sur un ptérodactyl
Oui
😂😂
Tu peut quand même
"bloqué" = ?
stoppe le et rallume le
deja fais
sinon ça doit venir de ton code, je suis pas un pro de ptéro
de mémoire mes process ptéro étaient en "online" donc bon :p
bas tout mes bot discord etais en "starting" mais marchais tres bien
si tu le dis ^^ donc ton bot est en v12 ?
et tu utilises commando?
fais voir une de tes commandes
const path = require('path')
const messageEmbed = require("discord.js");
const Commando = require('discord.js-commando')
module.exports = class VideoCommand extends Commando.Command {
constructor(client) {
super(client, {
name: 'test',
group: 'misc',
memberName: 'test',
description: 'Sends an image',
})
}
async run(message){
message.say({
files: [{
attachment: 'test.mp4',
name: 'test.mp4'
}]
})
}
}
mais jai ca qui ressort
/home/container/node_modules/discord.js/src/rest/RequestHandler.js:154
throw new DiscordAPIError(request.path, data, request.method, res.status);
^
DiscordAPIError: Request entity too large
at RequestHandler.execute (/home/container/node_modules/discord.js/src/rest/RequestHandler.js:154:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async RequestHandler.push (/home/container/node_modules/discord.js/src/rest/RequestHandler.js:39:14) {
method: 'post',
path: '/channels/891337960455295046/messages',
code: 40005,
httpStatus: 413
}
ouais ok sûrement le mp4 qui est trop gros
11mb
check mais c'est peut-être ça
je vais test
mais jai le seum si c'est ca
sachant que cetais pour contourner ca
SON ONCLE LE DINO c'est a cause de ca
donc le bot est limité a 8mo
quelle bougre des montagne
xd
si quelqu'un a une idée pour remedier a ca
Tu pensez qu'il ya moyen de faire en sorte que le bot coupe le fichier en petit Fichier de 8mo et les envoie les un après les autre ?


