How to create a like fivem status in discord

so i have done JS before but not like grabbing a json file from like {ip}:{port}/players.json/ or whatnot and displaying it in a discord channel and it would edit the message when a player’s ping,leaves,joins,etc any idea how i would do this? or how i would get started on it thanks!

Could use the request package with node and use the get property of request. For example…

const request = require('request');

request.get("http://ip:port/players.json", function(err, response, body){
    // run the code here...
})
1 Like

Yeah that’s a good way to do it, I use the same method :stuck_out_tongue:

how would i implement in a message?

for the code i have it’s:

const request = require('request');

const Discord = require('discord.js');
const client = new Discord.Client();

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

var ip = "ip"
var port = "30120"

request.get(`http://${ip}:${port}/players.json`, function(err, response, body) {

    data.channel.send(`${players}`).then((msg)=>{
        msg.edit(`${players}`)
    })
})

client.login(config.token);

but i’m not sure how i would send it as

{playername} {identifiers} {ping}

then it would edit the message everytime it gets updated or whatever.

Probably making a function then using setInterval() or so…

i edited a msg with my code btw but how would i like define the playername ingame id and ping so i can put it in a send.msg or whatever.

ok well i kind of got it…

to print in console.

code:

const config = require("./config.js");
const request = require('request');

const Discord = require('discord.js');
const client = new Discord.Client();

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

var ip = "ip"
var port = "30120"
var timeoutvar = "60000"

request(`http://${ip}:${port}/players.json`, function (players, error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', `${players}`); // Print the HTML for the Google homepage.
});

client.login(token);

console print:

     href: 'http://private:30120/players.json',
     req:
      ClientRequest {
        _events: [Object],
        _eventsCount: 5,
        _maxListeners: undefined,
        outputData: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [Socket],
        connection: [Socket],
        _header:
         'GET /players.json HTTP/1.1\r\nhost: private:30120\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'GET',
        path: '/players.json',
        _ended: true,
        res: [Circular],
        aborted: false,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     ntick: true,
     response: [Circular],
     originalHost: 'private:30120',
     originalHostHeaderName: 'host',
     responseContent: [Circular],
     _destdata: true,
     _ended: true,
     _callbackCalled: true },
  toJSON: [Function: responseToJSON],
  caseless:
   Caseless {
     dict:
      { date: 'Fri, 05 Apr 2019 00:18:03 GMT',
        connection: 'close',
        'transfer-encoding': 'chunked' } },
  body:
   '[{"endpoint":"[::ffff:private]:31539","id":39,"identifiers":["steam:private","licenseprivate","discord:private","ip:private"],"name":"Rhys19","ping":94}]' }
statusCode: undefined
body: null
Logged in as Rhys19 TestBot#5232!

but how would i make it say something like:

Playername ID Ping

instead of that huge amount of text?

request.get *

well i sort of got it but when there’s no one in the server it says [object Object]

code:

const config = require("./config.js");
const request = require('request');

const Discord = require('discord.js');
const client = new Discord.Client();

var ip = "private"
var port = "30120"
var timeoutvar = "60000"

const players = request.get(`http://${ip}:${port}/players.json`, function (players, error, response, body) {
  console.log('body:', body);
});

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

// Set the bot's presence (activity and status)
client.on("ready", () => {
  client.user.setPresence({
      game: { 
          name: 'MODPS',
          type: 'WATCHING'
      },
      status: 'dnd'
  })
})

client.on('ready', msg => {
  client.channels.get("channel-id").send(`${players}`)
  .then((msg) => {
    setTimeout(function() {
    msg.edit(`${players}`)
  }, 2000)}
  )}
)

/*client.on('message', msg => {
  client.channels.get("channel-id").send(`${players}`)
  .then((msg) => {
    setTimeout(function() {
    msg.edit(`${players}`)
  }, 2000)}
  )}
)*/

client.login(token);

i got the edit part working but not the fivem part still says like [object Object]
code:

const config = require("./config.js");
const request = require('request');

const Discord = require('discord.js');
const client = new Discord.Client();

var ip = "ip"
var port = "30120"
var timeoutvar = "60000"

const players = request.get(`http://${ip}:${port}/players.json`, function (players, error, response, body) {
  console.log('body:', body);
});

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('ready', msg => {
  client.channels.get("555945877483814915").send(`${players}`)
  .then((msg) => {
    setInterval(function() {
    msg.edit(`${players}`)
  }, 60000)}
  )}
)
client.login(token);

how would i make it so i can do like a new line and enter different variables like for ${players} it would display players online or for ${id} it would display their id?

Loop through tables and declare a property. Or parse it using JSON.parse

never parsed anything in JS before i don’t think any example maybe?

so i got it used some code from your bot @JHodgson1 but when it edits it when a player is in the server it doesn’t show it just keeps showing Players: 0/32
code:

const request = require('request')
const Discord = require('discord.js')


function error(channel, ip, errorCode, errCode) {
    errCode = "Could not determine status code."
    if (errorCode.toString() === "1")
        errCode = "404 - `info.json could not be reached.`"
    if (errorCode.toString() === "2")
        errCode = "404 - `players.json could not be reached.`"
    if (errorCode.toString() === "3")
        errCode = "404 - `Server policy could not be obtained.`"
   let embed = new Discord.RichEmbed()
    .setTitle("Error")
    .setColor('#FA3838')
    .setDescription("Server could not be reached.")
    .addField("Error Code", errCode)
    .setFooter(ip)
    channel.send(embed)
}

module.exports.run = async (Client, message, args) => {
  message.delete()
  let IP = "Private:30120";
    let server = Private:30120";

    if(!server) {
        let embed = new Discord.RichEmbed()
        .setTitle("Error")
        .setColor('#FA3838')
        .setDescription("Server could not be found.")
        return message.channel.send(embed)
    }
    else {
        IP = "Private:30120"
  let   Title = "Server Information"
    }

    try {
        let api1 = `http://${IP}/players.json`
        let api2 = `http://${IP}/info.json`
        request.get(api2, {timeout: 2000},function (err, response, main) {
            if (err) return error(message.channel, `IP: ${IP}`, 1)
            request.get(api1, {timeout: 2000},function (err, response, body) {
                if (err) return error(message.channel, `IP: ${IP}`, 2)
                request.get(`https://policy-live.fivem.net/api/policy/${JSON.parse(main).vars.sv_licenseKeyToken}`, {timeout: 2000}, function(err, response, content) {
                    if (err) return error(message.channel, `IP: ${IP}`, 3)
                    try {
                        var start = JSON.parse(body)
                        var start2 = JSON.parse(main)
                        var start3 = JSON.parse(content)

                        if (start == null || start == []) {
                            var playersCount = 0
                        } else {
                            var playersCount = start.length;
                        }

                        if (start3 === [] || start3.length === 0) {
                            var policy = `No policy.`
                        } else {
                            var policy = `${start3.join("\n")}`
                        }

                        message.channel.send('**Players:** ' + playersCount + "/" + start2.vars.sv_maxClients + "\n" + start.map(element => '\n **' + element.name + "** | ID: ``" + element.id + "`` | Ping:" + element.ping))
.then((message) => {
  setInterval(function() {
    if (start == null || start == []) {
      message.edit('Error: No Players Online!')
      } else {
        message.edit('**Players:** ' + playersCount + "/" + start2.vars.sv_maxClients + "\n" + start.map(element => '\n **' + element.name + "** | ID: ``" + element.id + "`` | Ping:" + element.ping));
      }
  }, 5000)})
                    } catch (err) {
                        error(message.channel, `Server IP: ${IP}`)
                        console.log(err.toString())
                    }

                    })

                })

            })

    } catch (err) {
        return;
    }

  };

  exports.conf = {
  enabled: true,
  guildOnly: false,
  aliases: [],
  permLevel: "user"
};

exports.help = {
  name: "players",
  category: "Moderation",
  description: "Shows Players",
  usage: "players"
};

any idea why?