n128

PS Bot (Mini) - by KevinF15

Jul 12th, 2017
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*--
  2.     PS Bot! (Mini)
  3.         Esta es una pequeña version de un bot
  4.         para PS, este bot se ejecuta automaticamente
  5.         al iniciar el servidor(si es que asi se
  6.         desea).
  7.  
  8.         El bot se conecta al servidor mediante
  9.         'websocket' o 'ws', por lo cual el mismo
  10.         debe ser configurado anteriormente.
  11.  
  12.             (c) KevinF15
  13. --*/
  14.  
  15. 'use strict';
  16.  
  17. const request = require('request'); //eslint-disable-line no-restricted-modules
  18. const util = require('util');
  19. const WebSocket = require('ws');
  20.  
  21. function consolemessage(content, type) {
  22.     if (type === 'boterror') {
  23.         console.log('\nCRASH [BOT]'.red.bold + '\t' + content);
  24.     } else if (type === 'info') {
  25.         console.log('BOT'.green.bold + '\t' + content);
  26.     }
  27.  
  28.     if (!type) return console.log(content);
  29. }
  30.  
  31. let config = {
  32.     server: '',
  33.     user: '',
  34.     pass: '',
  35.     rooms: ['lobby'],
  36.     symbol: '.',
  37.     operative: false,
  38. };
  39.  
  40. let commands = {
  41.     about: function (args, room, user) {
  42.         return 'Hola!, soy **' + config.user + '**, un bot creado y diseñado por **KevinF15**, Si tienes dudas sobre mi funcionamiento consultalo con el.';
  43.     },
  44.  
  45.     help: function (args, room, user) {
  46.         return 'Actualmente mis comandos son: **about**, **help**, **chiste** y **helix**. Muy pronto tendre mas comandos disponibles.';
  47.     },
  48.  
  49.     chiste: function (args, room, user) {
  50.         const chistes = [
  51.             '- Íbamos yo y Nacho. - No hijo, íbamos Nacho y yo. - ¿Cómo? ¿entonces yo no iba?',
  52.             'Le dice una madre a su hijo: - ¡Me ha dicho un pajarito que te drogas! - ¡La que se droga eres tu que hablas con pajaritos!.',
  53.             'Mi mujer me ha dejado una nota en la nevera que decía: - Me voy porque esto ya no funciona. Jo, pues si llevo dos horas revisando este cacharro y enfría de lujo.',
  54.             '¿Cómo se llama el campeón de buceo japonés?. Tokofondo. ¿Y el subcampeón?. Kasitoko.',
  55.             'Dos amigos: - Oye, pues mi hijo en su nuevo trabajo se siente como pez en el agua. - ¿Qué hace? - Nada...',
  56.             '- Hola ¿te llamas google? - No, ¿por qué? - Porque tienes todo lo que busco, nena. - ¿Y tú te llamas yahoorespuestas? - No, ¿por qué? - Porque haces preguntas estúpidas...',
  57.             '- Papá, ¿qué se siente tener un hijo tan guapo?. - No sé hijo, pregúntale a tu abuelo...',
  58.             'Estaba una pizza llorando en el cementerio, llega otra pizza y le dice: - ¿Era familiar? - No, era mediana..',
  59.             '- Paco ¿dónde estuviste? - En una clínica donde te quitan las ganas de fumar. - ¡Pero si estás fumando! - Ya... pero sin ganas.',
  60.             '- ¿Bailamos? - Claro. ¿Pero quién saca a mi amiga? - Ahhh, por eso no te preocupes. ¡SEGURIDAAAAD!',
  61.             '- ¡Señorita!¡Eh, usted, la rubia! - ¿Si, es a mi? - ¡Le comunicamos que su avión viene demorado!. - Hay qué lindo, ese es mi color favorito...',
  62.             'Marcelo estaba trabajando, cuando su jefe va y le pregunta: - ¿Oiga, no piensa ir al velatorio de su suegra?. Y él le contesta: - No jefe, primero el trabajo, y después la diversión.',
  63.             '- Tía Teresa, ¿para qué te pintas? - Para estar más guapa. - ¿Y tarda mucho en hacer efecto?',
  64.             '- Te vendo un caballo. - Y yo, ¿para qué quiero un caballo vendado?.',
  65.             '- Capitán, ¿Puedo desembarcar por la izquierda? – Se dice por babor... – Por babor Capitán, ¿Puedo desembarcar por la izquierda?',
  66.             '- Oye, dile a tu hermana que no está gorda, que sólo es talla \'L\' fante...',
  67.             '- Quiero decirle que estoy enamorado de su hija, y no es por el dinero. - ¿Y de cuál de las cuatro? - Ah pues.., de cualquiera.',
  68.             'Dos amigos charlando: - ¿Y tú a quién votarás en las próximas elecciones? - Yo a Alibaba y los 40 ladrones. - ¿Y eso? - Para asegurarme de que solo sean 40.',
  69.             '- Camarero, camarero ¿tiene ancas de rana?. - Sí. - ¡Entonces pegue un saltito y tráigame un café!.',
  70.             '- Mi amor, estoy embarazada. ¿Qué te gustaría que fuera? - ¿Una broma?.',
  71.             'Un codicioso estaba hablando con Dios y le pregunta:- Dios, ¿Cuánto es para ti mil años? Y Dios le contesta:- Un segundo.- ¿Y un millón de pesos?. Y Dios le contesta: - Un centavo.  Entonces el codicioso le dice: ¿Me das un un centavo?. A lo que Dios le contesta:- Espérate un segundo.',
  72.             'Jaimito le pregunta a la maestra: Maestra, ¿usted me castigaría por algo que yo no hice? Claro que no, Jaimito. Ahh, pues que bueno, porque yo no hice mi tarea',
  73.         ];
  74.  
  75.         let chiste = chistes[Math.floor(Math.random() * chistes.length)];
  76.         return chiste;
  77.     },
  78.  
  79.     helix: function (args, room, user) {
  80.         const respuestas = [
  81.             'Las señales apuntan a que sí.',
  82.             'Sí.',
  83.             'Hay mucha niebla. Inténtalo de nuevo.',
  84.             'Sin lugar a duda.',
  85.             'Mis fuentes dicen que no.',
  86.             'Tal y como lo veo, sí.',
  87.             'Cuenta con ello.',
  88.             'Concéntrate y pregunta de nuevo.',
  89.             'No es buena idea.',
  90.             'Definitivamente no.',
  91.             'Mejor no quieras saber la respuesta.',
  92.             'Muy dudoso.',
  93.             'Sí - Definitivamente.',
  94.             'Es cierto.',
  95.             'No puedo predecir en este momento..',
  96.             'Probablemente.',
  97.             'No entiendo la pregunta.',
  98.             'Mi respuesta es no.',
  99.             'Es buena idea.',
  100.             'No cuentes con ello.',
  101.         ];
  102.  
  103.         let respuesta = respuestas[Math.floor(Math.random() * respuestas.length)];
  104.         return respuesta;
  105.     },
  106. };
  107.  
  108. function joinServer() {
  109.     if (config.operative === false) {
  110.         consolemessage('Bot desactivado por administrador.', 'info');
  111.         return false;
  112.     }
  113.  
  114.     if (!config.server) {
  115.         consolemessage("Se necesita especificar un servidor al cual entrar.", 'boterror');
  116.     } else if (!config.user && !config.pass) {
  117.         consolemessage("Se necesita especificar un nombre de usuario y una contraseña.", 'boterror');
  118.     } else if (config.rooms.length === 0) {
  119.         consolemessage("Se necesita especificar almenos 1 sala a la cual entrar.", 'boterror');
  120.     }
  121.  
  122.     const ws = new WebSocket("ws://" + config.server + "/showdown/websocket");
  123.  
  124.     ws.on('open', function () {
  125.         consolemessage('Bot iniciado exitosamente!.', 'bot');
  126.     });
  127.  
  128.     ws.on('error', function (err) {
  129.         consolemessage(util.inspect(err), 'boterror');
  130.     });
  131.  
  132.     ws.on('message', function (data) {
  133.         data = data.replace(/(^>|\n)/, '').replace('\n', '');
  134.         let msg = data.split('|');
  135.         switch (msg[1]) {
  136.         case 'challstr':
  137.             let url = "http://play.pokemonshowdown.com/action.php";
  138.             if (config.pass === '') {
  139.                 let q = {"act": "getassertion", "userid": config.user, "challengekeyid": msg[2], "challenge": msg[3]};
  140.                 request({url: url, qs: q}, function (err, res, body) {
  141.                     ws.send("|/trn " + config.user + ",0," + body);
  142.                 });
  143.             } else {
  144.                 request.post(url, {form: {"act": "login", name: config.user, pass: config.pass,
  145.                     "challengekeyid": msg[2], "challenge": msg[3]}}, function (err, res, body) {
  146.                         let d = JSON.parse(body.split(']')[1]);
  147.                         ws.send("|/trn " + config.user + ",0," + d.assertion);
  148.                     });
  149.             }
  150.             for (let x = 0; x < config.rooms.length; x++) {
  151.                 ws.send("|/join " + config.rooms[x]);
  152.             }
  153.             break;
  154.         case 'c:':
  155.             let room = msg[0];
  156.             let user = msg[3];
  157.             if (msg[4][0] === config.symbol) {
  158.                 let cmd = msg[4].split(config.symbol)[1].split(' ')[0];
  159.                 let args = msg[4].split(cmd + ' ')[1];
  160.                 if (commands[cmd]) {
  161.                     if (typeof commands[cmd] === 'function') {
  162.                         let m = commands[cmd].call(this, args, room, user);
  163.                         ws.send(room + "|" + m);
  164.                     }
  165.                 }
  166.             }
  167.             break;
  168.         case 'pm':
  169.             const emisor = msg[2];
  170.             const lowmsg = msg[4].toLowerCase();
  171.             if (msg[4][0] === config.symbol) {
  172.                 let cmd = msg[4].split(config.symbol)[1].split(' ')[0];
  173.                 let args = msg[3].split(cmd + ' ')[1];
  174.                 if (commands[cmd]) {
  175.                     if (typeof commands[cmd] === 'function') {
  176.                         let m = commands[cmd].call(this, args, emisor);
  177.                         ws.send('|/pm ' + emisor + ', ' + m);
  178.                     }
  179.                 }
  180.             }
  181.             break;
  182.         }
  183.     });
  184. }
  185.  
  186. const Bot = exports;
  187.  
  188. Bot.config = config;
  189. Bot.commands = commands;
  190. Bot.on = joinServer;
Advertisement
Add Comment
Please, Sign In to add comment