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...
})
Yeah that’s a good way to do it, I use the same method
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?