Bot discord fortnite

Node.js

a marqué ce sujet comme résolu.

Bonjour,

étant donné qu’en ce moment Fortnite est à la mode, j’ai voulu faire un bot discord qui reprenait les stats d’un joueur sur ce jeu.

Je suis partis voir le site officiel, récupérer mon api key. J’ai d’abord voulu regarder un tutoriel : https://www.youtube.com/watch?v=QqB65WWdJWY&t Le problème est que lorsque je tape la commande "!fortnite pc monpseudo", le bot m’indique que le pseudo est introuvable. Je suis pourtant sûr à 100% que ce pseudo existe.

code : https://glitch.com/edit/#!/wistful-brian?path=server.js:1:0

Je vous donne le "server.js" car sur ce lien c’est le code de fortnite.js qui apparaît.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const Discord = require('discord.js');
const tools = require('./functions.js')

const client = new Discord.Client();
const prefix = '!';


client.on('ready', () =>{
    console.log(`Bot Fortnite ${client.user.tag} allumé !!`);
})


client.on('message', message => {
    let msg = message.content.toUpperCase();
    let sender = message.author;
    let args = message.content.slice(prefix.length).trim().split(' ');
    let cmd = args.shift().toLocaleLowerCase();

    if (!msg.startsWith(prefix)) return;
    if (message.author.bot) return;

try {
    let commandFile = require(`./commands/${cmd}.js`)
    commandFile.run(client, message, args);

} catch (e) {
    console.log(e.message)

   } finally {
    console.log(`${message.author.tag} a utilisé la commande ${cmd}`)
    }
})

client.login('token');

Ps: Je précise que j’ai bien inséré l’api key de mon compte fortnite et de même pour le token du bot.

Merci et bonne journée/soirée !

+0 -0

Dans le code Fetch Data (premier fichier qu’on voit dans ton lien) :

Tu rajoutes dans le catch (la ligne avant le username not found) :

1
2
console.log(error);
console.log("username", username);

Tu relances, tu tapes la commande avec ton pseudo et tu nous donnes ce qui s’affiche dans la console.

Le catch masque le vrai message d’erreur, il faut donc essayer de l’obtenir. Pour savoir si c’est vraiment un soucis d’username. Le code ci-dessus le permet.

Ensuite il faut s’assurer des données que tu reçois si ce n’est pas un problème d’authentification ou autre. Alors tu mets avant embed :

1
console.log(data);

Et tu nous donnes ce que tu as.

Après avoir suivi tes instructions j’obtiens une erreur dans la console mais j’arrive pas à tout ctrl c + ctrl v, je suis sous VSC et dans le cmd de windows y’a pas tout le contenu, comment je peux faire ? De plus il y a quelque chose qui me perturbe mais vu que tu n’as pas l’erreur tu ne peux pas savoir.

Voici le code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// This command requires the package 'fortnite'.
const Fortnite = require('fortnite');
const stats = new Fortnite('AN_API_KEY'); // This will be your API key from the description in replace of 'process.env.TRN'
const Discord = require('discord.js');

exports.run = (client, message, args, tools) => {

  // Now, we have 2 variables we need input for, first the platform, then the username.
  let platform;
  let username;

  // There are only 3 platform options: pc, xbl, psn. We need to make sure they are typing one of these.

  // Also, make sure you are using return statements when something evaluates to false and you want it to exit,

  // Since args contains the message contents, we can get the first item in the array to be the platform
  if (!['pc','xbl','psn'].includes(args[0])) return message.channel.send('**Please Include the platform: `!fortnite [ pc | xbl | psn ] <username>`**');
  // We also need the username, which would be args[1] & on...
  if (!args[1]) return message.channel.send('**Please Include the username: `!fortnite [ pc | xbl | psn ] <username>`**');

  // Assign Values
  platform = args.shift(); // This will shift the first item in the args array into platform.
  username = args.join(' '); // Now, we can combine args to form the username.

  // Fetch Data
  stats.getInfo(username, platform).then( data => { // Data will now hold the response, the full JSON tree can be found in the description.

    // Now, since we have all the correct data, we can output an error message, or the user stats.
    // We can form an embed to respond in chat, make sure you require Discord to form these.
    console.log(data);
    const embed = new Discord.MessageEmbed() // On the stable branch, this will be new Discord.RichEmbed()
      .setColor(0xffffff) // You can change the color, or anything in this file to what you want it to look like
      .setTitle(`Stats for ${data.username}`) // This will set the title of the emebd as the username
      .setDescription(`**Top Placement**\n\n**Top 3s:** *${data.lifetimeStats[0].value}*\n**Top 5s:** *${data.lifetimeStats[1].value}*\n**Top 6s:** *${data.lifetimeStats[3].value}*\n**Top 12s:** *${data.lifetimeStats[4].value}*\n**Top 25s:** *${data.lifetimeStats[5].value}*`, true) // We can have other information look different, in fields or in the description.
      .setThumbnail('https://vignette.wikia.nocookie.net/fortnite/images/d/d8/Icon_Founders_Badge.png') // Fortnite Logo
      .addField('Total Score', data.lifetimeStats[6].value, true)
      .addField('Matches Played', data.lifetimeStats[7].value, true)
      .addField('Wins', data.lifetimeStats[8].value, true)
      .addField('Win Percentage', data.lifetimeStats[9].value, true)
      .addField('Kills', data.lifetimeStats[10].value, true)
      .addField('K/D Ratio', data.lifetimeStats[11].value, true)
      .addField('Kills Per Minute', data.lifetimeStats[12].value, true)
      .addField('Time Played', data.lifetimeStats[13].value, true)
      .addField('Average Survival Time', data.lifetimeStats[14].value, true)

    // Now, we can test this command! Remeber, you can modify the output to what you think looks best.
    message.channel.send(embed);

  // All `data` can be found in the description.

  })
  .catch(error => { // We can start with the error, an error will return if the username is not found.
    console.log(error);
    console.log("username", username);
    message.channel.send('Username not found!');

  })

}

C’est ça qui m’intrigue :

1
2
3
4
5
TypeError: Cannot read property 'client' of undefined
    at new MessageEmbed (C:\Users\admin\Desktop\fds\node_modules\discord.js\src\structures\MessageEmbed.js:13:59)
    at stats.getInfo.then.data (C:\Users\admin\Desktop\fds\commands\fortnite.js:31:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:169:7)

En fait je comprends pas le "TypeError: Cannot read property ’client’ of undefined" car j’ai essayé en faisant "const client = new Discord.Client();" comme dans le server.js mais après ça me met que "discord" n’est pas défini.

PS : Peut-être que ce n’est pas de mon niveau ?

Merci et bonne soirée.

Edit : Suppression de la clé API

+0 -0

Si tu as écris Discord.client, tu as oublié de mettre const Discord = require('discord.js'); dans ton fichier. C’est pour ça que tu obtiens l’erreur.

Je crois qu’on te l’a dit dans tes précédents sujets ça serait bien que tu cherches à comprendre le message d’erreur. ;) Comme ça tu gagneras du temps plutôt que d’attendre une de nos réponse. Ici, l’erreur est assez simple à comprendre et à corriger.

+0 -0

Si tu as écris Discord.client, tu as oublié de mettre const Discord = require('discord.js'); dans ton fichier. C’est pour ça que tu obtiens l’erreur.

Je crois qu’on te l’a dit dans tes précédents sujets ça serait bien que tu cherches à comprendre le message d’erreur. ;) Comme ça tu gagneras du temps plutôt que d’attendre une de nos réponse. Ici, l’erreur est assez simple à comprendre et à corriger.

A-312

Non, c’est une erreur de ma part lorsque j’ai ctrl c ctrl v le code sur le forum, je me suis trompé. Voici le code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
const Fortnite = require('fortnite');
const stats = new Fortnite('API KEY'); // This will be your API key from the description in replace of 'process.env.TRN'
const Discord = require('discord.js');
const client = new Discord.Client();

exports.run = (client, message, args, tools) => {

  // Now, we have 2 variables we need input for, first the platform, then the username.
  let platform;
  let username;

  // There are only 3 platform options: pc, xbl, psn. We need to make sure they are typing one of these.

  // Also, make sure you are using return statements when something evaluates to false and you want it to exit,

  // Since args contains the message contents, we can get the first item in the array to be the platform
  if (!['pc','xbl','psn'].includes(args[0])) return message.channel.send('**Please Include the platform: `!fortnite [ pc | xbl | psn ] <username>`**');
  // We also need the username, which would be args[1] & on...
  if (!args[1]) return message.channel.send('**Please Include the username: `!fortnite [ pc | xbl | psn ] <username>`**');

  // Assign Values
  platform = args.shift(); // This will shift the first item in the args array into platform.
  username = args.join(' '); // Now, we can combine args to form the username.

  // Fetch Data
  stats.getInfo(username, platform).then( data => { // Data will now hold the response, the full JSON tree can be found in the description.

    // Now, since we have all the correct data, we can output an error message, or the user stats.
    // We can form an embed to respond in chat, make sure you require Discord to form these.
    console.log(data);
    const embed = new Discord.MessageEmbed() // On the stable branch, this will be new Discord.RichEmbed()
      .setColor(0xffffff) // You can change the color, or anything in this file to what you want it to look like
      .setTitle(`Stats for ${data.username}`) // This will set the title of the emebd as the username
      .setDescription(`**Top Placement**\n\n**Top 3s:** *${data.lifetimeStats[0].value}*\n**Top 5s:** *${data.lifetimeStats[1].value}*\n**Top 6s:** *${data.lifetimeStats[3].value}*\n**Top 12s:** *${data.lifetimeStats[4].value}*\n**Top 25s:** *${data.lifetimeStats[5].value}*`, true) // We can have other information look different, in fields or in the description.
      .setThumbnail('https://vignette.wikia.nocookie.net/fortnite/images/d/d8/Icon_Founders_Badge.png') // Fortnite Logo
      .addField('Total Score', data.lifetimeStats[6].value, true)
      .addField('Matches Played', data.lifetimeStats[7].value, true)
      .addField('Wins', data.lifetimeStats[8].value, true)
      .addField('Win Percentage', data.lifetimeStats[9].value, true)
      .addField('Kills', data.lifetimeStats[10].value, true)
      .addField('K/D Ratio', data.lifetimeStats[11].value, true)
      .addField('Kills Per Minute', data.lifetimeStats[12].value, true)
      .addField('Time Played', data.lifetimeStats[13].value, true)
      .addField('Average Survival Time', data.lifetimeStats[14].value, true)

    // Now, we can test this command! Remeber, you can modify the output to what you think looks best.
    message.channel.send(embed);

  // All `data` can be found in the description.

  })
  .catch(error => { // We can start with the error, an error will return if the username is not found.
    console.log(error);
    console.log("username", username);
    message.channel.send('Username not found!');

  })

}

`

Oui effectivement vous me le dites beaucoup, mon premier réflexe a été d’essayer de le comprendre, ensuite de le chercher sur internet mais ça ne résolvait pas mon problème.

Merci.

Bonne journée.

Quand tu postes une clé d’Api accidentellement sur internet, le réflexe c’est d’en demander une nouvelle et de désactiver l’autre.

Je suppose que discord est un module node, donc tu dois sûrement faire var Discord = require("discord");

Quand tu mets sans .js, node comprend que tu veux charger un module et non un fichier.js.

Quand tu postes une clé d’Api accidentellement sur internet, le réflexe c’est d’en demander une nouvelle et de désactiver l’autre.

Je suppose que discord est un module node, donc tu dois sûrement faire var Discord = require("discord");

Quand tu mets sans .js, node comprend que tu veux charger un module et non un fichier.js.

A-312

Je sais, j’ai essayé mais ils m’ont redonner la même.

Et j’en conclus que non étant donné que j’ai cette erreur text Cannot find module 'discord' Ce qui signifie que node ne comprend pas que je cherche le module discord.js

Je commence à perdre la tête mais merci de m’aider :D

Bonne soirée !

npm install permet d’installer toutes les dépendances renseignées dans package.json.

A-312

Oui effectivement, j’ai vu qu’il y avait node.modules dans package.json, mais je vois pas quel est le rapport :/ Le problème ne viendrait pas de l’api de fortnite directement ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte