15/02/2021, 07:38 PM
(Última modificación: 15/02/2021, 07:47 PM por JoaquoCL. Edited 5 times in total.)
Bueno, este "bot" más que nada solo muestra la cantidad de jugadores/maximo y el mapa actual con la ip.
Necesitamos:
- Pagina con PHP
- GameQ PHP https://github.com/Austinb/GameQ
- VPS para montar el .js
Lo primero que necesitamos es un token para el bot, para eso nos vamos a https://discord.com/developers/applications
Creamos una aplicación, después seleccionamos la app y nos vamos a Bot para copiar el token
Después necesitaremos creare 2 php, uno que se dedicará a tomar todos los datos del servidor de GameQ y otro que servirá para reducir esos datos y tomarlos con variables que definiremos.
Primer PHP:
Este php recolectará toda la información del servidor con los datos del GameQ
Segundo PHP:
Este php tomará los datos de json para que se puedan mostrar con las variables que definiremos.
En este caso definimos:
IP
Jugadores
Maximo
Nombre
Name
Puerto
Mapa
Creamos el .js que se debe subir a la VPS
Recuerda cambiar el Token del bot
Yo lo guardé como 1.js
Para instalar las dependencias ejecutamos
npm install discord.js y npm install request
El comando que yo usaba era datos1, pero en este caso le pueden poner lo que quieran
Está definido para que se use el ! y luego el comando
Ejemplo: !datos1
Creditos a Mukaaxz que me ayudó con el json.
También pueden usarlo para mostrar los datos en su servidor con el modulo gRIP:
Creditos a Hypnotize por su guía del gRIP y a metita por algunas cosas que le pedí en el pasado
Foto del Bot en Discord:
Foto del Plugin [usé un servidor de TS3]
Necesitamos:
- Pagina con PHP
- GameQ PHP https://github.com/Austinb/GameQ
- VPS para montar el .js
Lo primero que necesitamos es un token para el bot, para eso nos vamos a https://discord.com/developers/applications
Creamos una aplicación, después seleccionamos la app y nos vamos a Bot para copiar el token
Después necesitaremos creare 2 php, uno que se dedicará a tomar todos los datos del servidor de GameQ y otro que servirá para reducir esos datos y tomarlos con variables que definiremos.
Primer PHP:
Este php recolectará toda la información del servidor con los datos del GameQ
Código PHP:
<?php
require_once 'GameQ/Autoloader.php';
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$servers = [ 'type' => 'cs16', 'host' => 'IP:PUERTO', ];
$GameQ = new \GameQ\GameQ(); // or $GameQ = \GameQ\GameQ::factory();
$GameQ->addServer($servers);
$GameQ->setOption('timeout', 5000); // seconds
$info = $GameQ->process();
$myObj = NULL;
if(!is_object($myObj))
{
$myObj = new stdClass;
}
$myJSON = json_encode($info);
echo $myJSON;
Segundo PHP:
Este php tomará los datos de json para que se puedan mostrar con las variables que definiremos.
Código PHP:
<?php
/********************
by: Mukaaxz;
*********************/
//Archivo JSON:
$eljson = file_get_contents('LINK DEL PRIMER PHP DONDE ESTAN TODAS LAS VARIABLES DE GAMEQ');
//Convertir JSON en Array:
$data = json_decode($eljson, TRUE);
$Jugadores = 0;
$Maximo = 0;
$Nombre = "";
$IP = "";
//Obtenemos lo que necesitamos del Array:
foreach ($data as $valor)
{
$IP = $valor['gq_address'];
$Jugadores = $valor['gq_numplayers'];
$Maximo = $valor['gq_maxplayers'];
$Nombre = $valor['gq_name'];
$Name = $valor['gq_hostname'];
$Puerto = $valor['gq_port_client'];
$Mapa = $valor['gq_mapname'];
}
$myObj = NULL;
if(!is_object($myObj))
{
$myObj = new stdClass;
}
$myObj->IP=$IP;
$myObj->Jugadores=$Jugadores;
$myObj->Maximo=$Maximo;
$myObj->Nombre=$Nombre;
$myObj->Name=$Name;
$myObj->Puerto=$Puerto;
$myObj->Mapa=$Mapa;
$myJSON=json_encode($myObj);
echo $myJSON;
?>
IP
Jugadores
Maximo
Nombre
Name
Puerto
Mapa
Creamos el .js que se debe subir a la VPS
Recuerda cambiar el Token del bot
Yo lo guardé como 1.js
Para instalar las dependencias ejecutamos
npm install discord.js y npm install request
Código PHP:
const request = require('request');
const Discord = require('discord.js');
const bot = new Discord.Client();
var prefix = '!';
var currentPlayers;
var maxPlayers;
var mapa;
var name;
var ip;
var puerto;
bot.login('Token de bot');
console.log(`[AlliedModders] Script Iniciado Correctamente`)
bot.on('ready', () => {
setInterval(function()
{
request('AQUI VA EL LINK DEL 2DO PHP, DONDE DEFINIMOS LAS VARIABLES PROPIAS', function (error, response, body) {
console.error('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
body = JSON.parse(body)
currentPlayers = body.Jugadores;
maxPlayers = body.Maximo;
mapa = body.Mapa;
name = body.Nombre;
ip = body.IP;
puerto = body.Puerto;
console.log(`Se han actualizado los datos query - php`)
bot.user.setActivity(`${currentPlayers} / ${maxPlayers} (${ip}:${puerto}) (${mapa}) `, ({type: "WATCHING"}))
});
},60000)
})
bot.on("message", message =>
{
const args = message.content.slice(prefix.length).split(/ +/);
const command = args.shift().toLowerCase();
if (command === 'datos1')
{
message.channel.send(`
Información de: ${name}
IP: ${ip}
Conectados: ${currentPlayers}/${maxPlayers}
Mapa actual: ${mapa}`);
}
});
El comando que yo usaba era datos1, pero en este caso le pueden poner lo que quieran
Está definido para que se use el ! y luego el comando
Ejemplo: !datos1
Creditos a Mukaaxz que me ayudó con el json.
También pueden usarlo para mostrar los datos en su servidor con el modulo gRIP:
Código PHP:
#include <amxmisc>
#include <grip>
public plugin_init()
{
register_plugin("Datos de 1 servidor", "1.0", "AlliedModders")
register_clcmd("say /datos1", "Datos1")
}
public Datos1(id)
{
new szURL[256]
formatex(szURL, charsmax(szURL), "LINK DEL SEGUNDO PHP DONDE TENEMOS LAS VARIABLES DEFINIDAS")
grip_request(szURL, Empty_GripBody, GripRequestTypeGet, "CheckDatos1", Empty_GripRequestOptions,id)
print_EasyChat(id,"\g[AlliedModders] \nCargando informacion del Servidor...")
}
public CheckDatos1(id)
{
new GripResponseState:iState = grip_get_response_state()
if(iState == GripResponseStateError)
{
print_EasyChat(id,"\g[AlliedModders] \nHubo un error al consultar los datos")
return
}
new XD[512]
grip_get_response_body_string(XD, charsmax(XD))
new GripJSONValue:szData = grip_json_parse_response_body(XD, charsmax(XD))
if(szData == Invalid_GripJSONValue)
{
print_EasyChat(id,"\g[AlliedModders] \nLos datos ingresados fueron rechazados")
server_print("JSON Invalido: [ %d ]", Invalid_GripJSONValue)
return
}
new jugadores = grip_json_get_number(grip_json_object_get_value(szData, "Jugadores"))
new Maximo = grip_json_get_number(grip_json_object_get_value(szData, "Maximo"))
new len[2000], menu
formatex(len, charsmax(len), "\r[AlliedModders]\w Informacion Servidor 1")
menu = menu_create(len, "handler_menu_datos1")
menu_addtext2( menu, fmt( "\wNOMBRE DEL SERVIDOR"));
menu_addtext2( menu, fmt( "\wConectados: \y%d/%d",jugadores,Maximo));
menu_setprop(menu, MPROP_EXITNAME, "\w[\rSALIR\w]")
menu_display(id, menu, 0)
grip_destroy_json_value(szData)
}
public handler_menu_datos1(id, menu, item)
{
if(item==MENU_EXIT)
return
return
}
Foto del Bot en Discord:
Foto del Plugin [usé un servidor de TS3]