Add files via upload
This commit is contained in:
		
							
								
								
									
										83
									
								
								DiskoBOTlo_Discord/bot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								DiskoBOTlo_Discord/bot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
// Librerías y dependendias:
 | 
			
		||||
const Discord = require("discord.js");
 | 
			
		||||
const client = new Discord.Client();
 | 
			
		||||
const config = require("./config.json");
 | 
			
		||||
const mcping = require('mc-ping-updated');
 | 
			
		||||
 | 
			
		||||
// Prefijo para comandos "/":
 | 
			
		||||
let prefix = config.prefix;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Funciones del bot:
 | 
			
		||||
client.on('ready', () => {
 | 
			
		||||
    // Mensaje al iniciar el bot:
 | 
			
		||||
    console.log("[ " + Date() + " ] Se ha iniciado el bot.");
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
client.on('message', message => {
 | 
			
		||||
  // Ignoramos el contenido de los mensajes del BOT (evita bucle infinito):
 | 
			
		||||
  // if (!message.content.startsWith(prefix)) return;
 | 
			
		||||
  // if (message.author.bot) return;
 | 
			
		||||
 | 
			
		||||
  // Id del canal de bienvenida:
 | 
			
		||||
  var welcomeChanel = client.channels.cache.get(config.welcomeChanel);
 | 
			
		||||
  // Id del canal de Minecraft:
 | 
			
		||||
  var serverMinecraftChanel = client.channels.cache.get(config.serverMinecraftChanel);
 | 
			
		||||
  //Id del canal de Junta:
 | 
			
		||||
  var juntaChanel = client.channels.cache.get(config.juntaChanel);
 | 
			
		||||
 | 
			
		||||
  // Id del rol "Suscriptor":
 | 
			
		||||
  //var socioRol = message.guild.roles.cache.find(r => r.name === "socioRol");
 | 
			
		||||
  var socioRol = message.guild.roles.cache.get(config.socioID);
 | 
			
		||||
 | 
			
		||||
  // Asignación del rol al decir "Hola" en el canal de bienvenida.
 | 
			
		||||
  if(message.channel == welcomeChanel){
 | 
			
		||||
    //console.log(message.content); 
 | 
			
		||||
    if(message.content === 'Hola'){
 | 
			
		||||
        if(message.member.roles.cache.has(socioRol.id)) {
 | 
			
		||||
          message.channel.send('Hola a ti también 😉');
 | 
			
		||||
          console.log("[ " + Date() + " ] Se ha interactuado con" + message.member.user.username  + " en #BIENVENIDA.");
 | 
			
		||||
        } 
 | 
			
		||||
        else {
 | 
			
		||||
          message.member.roles.add(socioRol).catch(console.error); //Agregamos el rol al usuario
 | 
			
		||||
          message.channel.send(message.member.user.username + ' *¡Bienvenido al servidor de Diskobolo!* 👋\n' +
 | 
			
		||||
                                '⚠️ Usa los canales adecuados para hablar de cada tema y respeta a los demás ⚠️\n' +
 | 
			
		||||
                                '👉 Se te ha asignado el rol: `'+socioRol.name+'` 👈.\n\n' +
 | 
			
		||||
                                '🐦 Puedes seguirnos en *twitter* 🐦: https://twitter.com/DSKbolo \n\n' +
 | 
			
		||||
                                '🔎 Recuerda la IP del servidor de Minecraft ⛏️: *diskobolo.fdi.ucm.es*\n', { parse_mode: 'Markdown' });
 | 
			
		||||
          console.log("[ " + Date() + " ] Se ha asignado un rol de socioRol a " + message.member.user.username );
 | 
			
		||||
        }
 | 
			
		||||
    } else if(!(message.member.roles.cache.has(socioRol.id))) {
 | 
			
		||||
        message.channel.send(message.member.user.username + ' escribe "Hola", para que se te asigne un rol.');
 | 
			
		||||
        console.log("[ " + Date() + " ] Se ha solicitado a " + message.member.user.username  + " que diga hola.");
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    if(message.channel == juntaChanel || message.channel == serverMinecraftChanel) {
 | 
			
		||||
      if(message.content.startsWith(prefix + 'ping')) {
 | 
			
		||||
        message.channel.send(`pong 🏓`);
 | 
			
		||||
      }
 | 
			
		||||
      if(message.content.startsWith(prefix + 'minecraft')) {
 | 
			
		||||
        mcping('diskobolo.fdi.ucm.es', 25565, function(err, res) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
              // Some kind of error
 | 
			
		||||
              message.channel.send('El servidor *NO* funciona. Puede que haya explotado un creeper 🤷♂️', { parse_mode: 'Markdown' });
 | 
			
		||||
              console.error("[ " + Date() + " ]" + message.member.user.username + "Error al mostrar el estado del servidor de Minecraft.\n\n" + err);
 | 
			
		||||
          } else {
 | 
			
		||||
              // Success!
 | 
			
		||||
              message.channel.send('⛏️*SERVIDOR DE MINECRAFT DE Diskobolo*⛏️ \n\n' +
 | 
			
		||||
                                    'Estado: *ACTIVO* \n' +
 | 
			
		||||
                                    'IP del servidor: *diskobolo.fdi.ucm.es* \n' +
 | 
			
		||||
                                    'Versión del servidor: *' + res.version.name + '* \n' +
 | 
			
		||||
                                    'Jugadores conectados: *' + res.players.online +'*', { parse_mode: 'Markdown' });
 | 
			
		||||
              console.log("[ " + Date() + " ]" + message.member.user.username + " Ha solicitado el estado del servidor de Minecraft. \n\n" + res)
 | 
			
		||||
              //console.log(res);
 | 
			
		||||
          }
 | 
			
		||||
      }, 3000);
 | 
			
		||||
      }
 | 
			
		||||
    } 
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
client.login(config.BOT_TOKEN);
 | 
			
		||||
							
								
								
									
										18
									
								
								DiskoBOTlo_Discord/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								DiskoBOTlo_Discord/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "DiskoBOTlo",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "Bot de Discord de la Asocación Diskobolo de la Facultad de Informática de la Universidad Complutense de Madrid.",
 | 
			
		||||
  "main": "bot.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "author": "Fernando Méndez (https://fermdez.ddns.net | @HumperCobra)",
 | 
			
		||||
  "license": "Educational Community License v2.0 (ECL-2.0)",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "discord.js": "^12.5.1",
 | 
			
		||||
    "mc-ping-updated": "^0.1.1",
 | 
			
		||||
    "mcping-js": "^1.5.0"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {},
 | 
			
		||||
  "keywords": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										109
									
								
								DiskoBOTlo_Telegram/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								DiskoBOTlo_Telegram/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
			
		||||
# DiskoBOTlo_bot 🤖
 | 
			
		||||
 | 
			
		||||
## Índice
 | 
			
		||||
1. [Descripción](#1-descripción-)
 | 
			
		||||
2. [Autor](#2-autor-%EF%B8%8F)
 | 
			
		||||
3. [Advertencia](#3-advertencia-%EF%B8%8F)
 | 
			
		||||
4. [Generar un token con @BotFather](#4-generar-un-token-con-botfather)
 | 
			
		||||
5. [Ejecución](#5-ejecución-%EF%B8%8F)
 | 
			
		||||
* 5.1. [Instalación _node_modules_](#instalación-node_modules-)
 | 
			
		||||
* 5.2. [Poner el Bot en producción](#poner-el-bot-en-producción-%EF%B8%8F)
 | 
			
		||||
   * 5.2.1. [En Windows](#en-windows-)
 | 
			
		||||
   * 5.2.2. [En Linux](#en-linux-debianubuntu-)
 | 
			
		||||
* 5.3 [Añadir nuevas librerías](#53-añadir-nuevas-librerías-)
 | 
			
		||||
6. [Licencia](#6-licencia-)
 | 
			
		||||
7. [Enlace al Bot](#7-enlace-al-bot-)
 | 
			
		||||
***
 | 
			
		||||
## 1. Descripción 📖
 | 
			
		||||
Bot de Telegram para la Asociación Diskobolo de la Facultad de Informática de la Universidad Complutense de Madrid.
 | 
			
		||||
***
 | 
			
		||||
## 2. Autor ✒️
 | 
			
		||||
Fernando Méndez (https:/fermdez.ddns.net | @HumperCobra)
 | 
			
		||||
***
 | 
			
		||||
## 3. Advertencia ⚠️
 | 
			
		||||
Desbes generar tu propio token para el bot y añadirlo a _const token = 'AQUÍ_A_TU_TOKEN';_ en el archivo *bot.js*.
 | 
			
		||||
***
 | 
			
		||||
## 4. Generar un token con @BotFather
 | 
			
		||||
1. Inicia un chat con https://t.me/botfather
 | 
			
		||||
2. Escribe en el chat el comando */newbot*
 | 
			
		||||
3. Te pedirá el alias y luego el nombre del bot (debe contener la palabra _bot_).
 | 
			
		||||
4. Nos devolverá el token de nuestro bot, por ejemplo:
 | 
			
		||||
 | 
			
		||||
    > Use this token to access the HTTP API: 668219748:ABCRTZu7zNT5QO2bRfZfbPIXBLXb2U-ojVX
 | 
			
		||||
***  
 | 
			
		||||
## 5. Ejecución 🛠️
 | 
			
		||||
### 5.1 Instalación _node_modules_ 🔧
 | 
			
		||||
1. Creamos un directorio para el bot y guardamos ahí el archivo *bot.js*.
 | 
			
		||||
2. Instalar *node.js* 
 | 
			
		||||
  * En Windows/Mac: https://nodejs.org/es/download/.
 | 
			
		||||
  * Si tienes Linux (Debian/Ubuntu), usa los siguientes comandos:
 | 
			
		||||
      ```
 | 
			
		||||
        $ sudo apt-get update
 | 
			
		||||
        $ sudo apt-get upgrade
 | 
			
		||||
        $ sudo apt-get install curl
 | 
			
		||||
 | 
			
		||||
        $ cd ~
 | 
			
		||||
        $ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
 | 
			
		||||
 | 
			
		||||
        $ sudo apt-get install -y nodejs
 | 
			
		||||
 | 
			
		||||
        $ cd ./ruta_del_directorio_del_bot/
 | 
			
		||||
        $ npm install
 | 
			
		||||
      ```
 | 
			
		||||
3. Comprobar que se ha instalado con el comando:
 | 
			
		||||
 ```
 | 
			
		||||
   >/$ node --version
 | 
			
		||||
 ```
 | 
			
		||||
4. Dentro del directorio del bot, ejecutar los siguientes comandos:
 | 
			
		||||
 ```
 | 
			
		||||
   >/$ npm init --yes
 | 
			
		||||
   >/$ npm install --save node-telegram-bot-api
 | 
			
		||||
 ```
 | 
			
		||||
5. Comprobar que se ha generado el directorio _node_modules_.
 | 
			
		||||
### 5.2 Poner el Bot en producción ⚙️
 | 
			
		||||
#### 5.2.1 En Windows 💻
 | 
			
		||||
* Instala *nodejs*, si no lo hiciste en el punto anterior: https://nodejs.org/es/download/
 | 
			
		||||
* Ejecutar en CMD o PS los comandos:
 | 
			
		||||
 ```
 | 
			
		||||
  > cd ./ruta_del_directorio_del_bot/
 | 
			
		||||
  > node bot.js
 | 
			
		||||
 ```
 | 
			
		||||
* El proceso se puede automatizar creando un archivo .bat y añadiéndolo al programador de tareas.
 | 
			
		||||
 | 
			
		||||
#### 5.2.2 En Linux (Debian/Ubuntu) 🐧
 | 
			
		||||
* Instalamos *nodejs*, si no lo hicimos en el punto anterior:
 | 
			
		||||
 ```
 | 
			
		||||
  $ sudo apt-get update
 | 
			
		||||
  $ sudo apt-get upgrade
 | 
			
		||||
  $ sudo apt-get install curl
 | 
			
		||||
 | 
			
		||||
  $ cd ~
 | 
			
		||||
  $ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
 | 
			
		||||
 | 
			
		||||
  $ sudo apt-get install -y nodejs
 | 
			
		||||
 | 
			
		||||
  $ cd ./ruta_del_directorio_del_bot/
 | 
			
		||||
  $ npm install
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* Ejecutamos el bot con el comando:
 | 
			
		||||
 ```
 | 
			
		||||
   $ node bot.js
 | 
			
		||||
 ```
 | 
			
		||||
 | 
			
		||||
* El proceso se puede automatizar creando un script.
 | 
			
		||||
 | 
			
		||||
### 5.3 Añadir nuevas librerías 📚
 | 
			
		||||
* Primero abrir un terminal/PowerShell/CMD (dependiendo de nuestro SO) e ir al directorio de nuestro bot:
 | 
			
		||||
   ```
 | 
			
		||||
   cd ./ruta_del_directorio_del_bot/
 | 
			
		||||
   ```
 | 
			
		||||
* Si por ejemplo queremos añadir la librería _weather-js_, deberemos escribir el siguiente comando:
 | 
			
		||||
   ```
 | 
			
		||||
   npm install weather-js
 | 
			
		||||
   ```
 | 
			
		||||
***
 | 
			
		||||
## 6. Licencia 📄
 | 
			
		||||
Educational Community License v2.0 (ECL-2.0).
 | 
			
		||||
## 7. Enlace al Bot 🤖
 | 
			
		||||
> https://t.me/DiskoBOTlo_BOT
 | 
			
		||||
							
								
								
									
										1008
									
								
								DiskoBOTlo_Telegram/bot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1008
									
								
								DiskoBOTlo_Telegram/bot.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										16
									
								
								DiskoBOTlo_Telegram/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								DiskoBOTlo_Telegram/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "DiskoboBOTlo",
 | 
			
		||||
  "version": "3.0.0",
 | 
			
		||||
  "description": "Bot de la asociación Diskobolo de la Facultad de Informática de la Universidad Complutense de Madrid.",
 | 
			
		||||
  "main": "bot.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [],
 | 
			
		||||
  "author": "Fernando Méndez Torrubiano (https://fermdez.ddns.net | @HumperCobra)",
 | 
			
		||||
  "license": "Educational Community License v2.0 (ECL-2.0)",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "node-telegram-bot-api": "^0.51.0",
 | 
			
		||||
    "weather-js": "^2.0.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										83
									
								
								FDIeSports_Discord_bot/bot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								FDIeSports_Discord_bot/bot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
// Librerías y dependendias:
 | 
			
		||||
const Discord = require("discord.js");
 | 
			
		||||
const client = new Discord.Client();
 | 
			
		||||
const config = require("./config.json");
 | 
			
		||||
 | 
			
		||||
// Prefijo para comandos "/":
 | 
			
		||||
let prefix = config.prefix;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Funciones del bot:
 | 
			
		||||
client.on('ready', () => {
 | 
			
		||||
    // Mensaje al iniciar el bot:
 | 
			
		||||
    console.log("[ " + Date() + " ] Se ha iniciado el bot.");
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
client.on('message', message => {
 | 
			
		||||
    // Ignoramos el contenido de los mensajes del BOT (evita bucle infinito):
 | 
			
		||||
    /* if (!message.content.startsWith('LOL') || !message.content.startsWith('CSGO')
 | 
			
		||||
    || !message.content.startsWith('VALORANT') || !message.content.startsWith('OVERWATCH')
 | 
			
		||||
    || !message.content.startsWith('TITANFALL') || !message.content.startsWith('FORNITE')
 | 
			
		||||
    || !message.content.startsWith('QUAKE')) return; */
 | 
			
		||||
    // if (message.author.bot) return;
 | 
			
		||||
 | 
			
		||||
    // Id del canal de bienvenida:
 | 
			
		||||
    var welcomeChanel = client.channels.cache.get(config.welcomeChanel);
 | 
			
		||||
    // Id del canal de administración:
 | 
			
		||||
    var adminChanel = client.channels.cache.get(config.adminChanel);
 | 
			
		||||
    // Rol que se va a asignar:
 | 
			
		||||
    var rol = message.guild.roles.cache.get(config.lolID);
 | 
			
		||||
 | 
			
		||||
    // Asignación del rol:
 | 
			
		||||
    if(message.channel == welcomeChanel){
 | 
			
		||||
        switch(message.content){
 | 
			
		||||
            case 'LOL': rol = message.guild.roles.cache.get(config.lolID);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'CSGO': rol = message.guild.roles.cache.get(config.csgoID);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'VALORANT': rol = message.guild.roles.cache.get(config.valorantID);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'OVERWATCH': rol = message.guild.roles.cache.get(config.overwatchID);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'TITANFALL': rol = message.guild.roles.cache.get(config.titanfallID);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'FORNITE': rol = message.guild.roles.cache.get(config.forniteID);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'QUAKE': rol = message.guild.roles.cache.get(config.quakeID);
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
        if(message.content === 'LOL' || message.content === 'CSGO'
 | 
			
		||||
        || message.content === 'VALORANT' || message.content === 'OVERWATCH'
 | 
			
		||||
        || message.content === 'TITANFALL' || message.content === 'FORNITE' || message.content === 'QUAKE') {
 | 
			
		||||
            if(message.member.roles.cache.has(rol)) {
 | 
			
		||||
                message.channel.send('Ya tienes el rol asignado ');
 | 
			
		||||
                console.log("[ " + Date() + " ] Se ha interactuado con" + message.member.user.username  + " en #BIENVENIDA.");
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                message.member.roles.add(rol).catch(console.error); //Agregamos el rol al usuario
 | 
			
		||||
                message.channel.send(message.member.user.username + ' *¡Bienvenido al servidor de FDIeSports! 👋🏻* \n' +
 | 
			
		||||
                                    '⚠️ Usa los canales adecuados para hablar de cada tema y respeta a los demás. ⚠️ \n' +
 | 
			
		||||
                                    '👉 Se te ha asignado el rol: `'+rol.name+'` 👈\n\n' +
 | 
			
		||||
                                    '🐦 Puedes seguirnos en *twitter* : https://twitter.com/FDIeSports 🐦\n\n' +
 | 
			
		||||
                                    '🌍 Recuerda que si tienes cualquier duda, puedes consultar la web : *https://esports.fdi.ucm.es* 🌍\n', { parse_mode: 'Markdown' });
 | 
			
		||||
                console.log("[ " + Date() + " ] Se ha asignado un rol de rol a " + message.member.user.username );
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else if(!(message.member.roles.cache.has(rol.id))) {
 | 
			
		||||
            message.channel.send(message.member.user.username + ' escribe el nombre del equipo al que perteneces (en mayúsculas), para que se te asigne el rol.\n\n' +
 | 
			
		||||
            '*Roles disponibles*: LOL | CSGO | VALORANT | OVERWATCH | TITANFALL | FORNITE | QUAKE.', {parse_mode: 'Markdown'});
 | 
			
		||||
            console.log("[ " + Date() + " ] Se ha solicitado a " + message.member.user.username  + " que diga a qué equipo pertenece.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(message.channel == adminChanel) {
 | 
			
		||||
        if(message.content.startsWith(prefix + 'ping')) {
 | 
			
		||||
        message.channel.send(`Pong 🏓`);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
client.login(config.BOT_TOKEN);
 | 
			
		||||
							
								
								
									
										15
									
								
								FDIeSports_Discord_bot/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								FDIeSports_Discord_bot/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "FDIeSports_Discord_bot",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "Bot de la agrupación de esports de la Facultad de Informática de la Universidad Complutense de Madrid.",
 | 
			
		||||
  "main": "bot.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [],
 | 
			
		||||
  "author": "Fernando Méndez (https://fermdez.ddns.net | @HumperCobra)",
 | 
			
		||||
  "license": "Educational Community License v2.0 (ECL-2.0)",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "discord.js": "^12.5.1"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										109
									
								
								FDIeSports_Telegram_bot/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								FDIeSports_Telegram_bot/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
			
		||||
# FDIeSports_bot 🤖
 | 
			
		||||
 | 
			
		||||
## Índice
 | 
			
		||||
1. [Descripción](#1-descripción-)
 | 
			
		||||
2. [Autor](#2-autor-%EF%B8%8F)
 | 
			
		||||
3. [Advertencia](#3-advertencia-%EF%B8%8F)
 | 
			
		||||
4. [Generar un token con @BotFather](#4-generar-un-token-con-botfather)
 | 
			
		||||
5. [Ejecución](#5-ejecución-%EF%B8%8F)
 | 
			
		||||
* 5.1. [Instalación _node_modules_](#instalación-node_modules-)
 | 
			
		||||
* 5.2. [Poner el Bot en producción](#poner-el-bot-en-producción-%EF%B8%8F)
 | 
			
		||||
   * 5.2.1. [En Windows](#en-windows-)
 | 
			
		||||
   * 5.2.2. [En Linux](#en-linux-debianubuntu-)
 | 
			
		||||
* 5.3 [Añadir nuevas librerías](#53-añadir-nuevas-librerías-)
 | 
			
		||||
6. [Licencia](#6-licencia-)
 | 
			
		||||
7. [Enlace al Bot](#7-enlace-al-bot-)
 | 
			
		||||
***
 | 
			
		||||
## 1. Descripción 📖
 | 
			
		||||
Bot de Telegram para la agrupación de esports de la Facultad de Informática de la Universidad Complutense de Madrid.
 | 
			
		||||
***
 | 
			
		||||
## 2. Autor ✒️
 | 
			
		||||
Fernando Méndez (https:/fermdez.ddns.net | @HumperCobra)
 | 
			
		||||
***
 | 
			
		||||
## 3. Advertencia ⚠️
 | 
			
		||||
Desbes generar tu propio token para el bot y añadirlo a _const token = 'AQUÍ_A_TU_TOKEN';_ en el archivo *bot.js*.
 | 
			
		||||
***
 | 
			
		||||
## 4. Generar un token con @BotFather
 | 
			
		||||
1. Inicia un chat con https://t.me/botfather
 | 
			
		||||
2. Escribe en el chat el comando */newbot*
 | 
			
		||||
3. Te pedirá el alias y luego el nombre del bot (debe contener la palabra _bot_).
 | 
			
		||||
4. Nos devolverá el token de nuestro bot, por ejemplo:
 | 
			
		||||
 | 
			
		||||
      > Use this token to access the HTTP API: 668219748:ABCRTZu7zNT5QO2bRfZfbPIXBLXb2U-ojVX
 | 
			
		||||
***  
 | 
			
		||||
## 5. Ejecución 🛠️
 | 
			
		||||
### 5.1 Instalación _node_modules_ 🔧
 | 
			
		||||
1. Creamos un directorio para el bot y guardamos ahí el archivo *bot.js*.
 | 
			
		||||
2. Instalar *node.js* 
 | 
			
		||||
  * En Windows/Mac: https://nodejs.org/es/download/.
 | 
			
		||||
  * Si tienes Linux (Debian/Ubuntu), usa los siguientes comandos:
 | 
			
		||||
      ```
 | 
			
		||||
        $ sudo apt-get update
 | 
			
		||||
        $ sudo apt-get upgrade
 | 
			
		||||
        $ sudo apt-get install curl
 | 
			
		||||
 | 
			
		||||
        $ cd ~
 | 
			
		||||
        $ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
 | 
			
		||||
 | 
			
		||||
        $ sudo apt-get install -y nodejs
 | 
			
		||||
 | 
			
		||||
        $ cd ./ruta_del_directorio_del_bot/
 | 
			
		||||
        $ npm install
 | 
			
		||||
      ```
 | 
			
		||||
3. Comprobar que se ha instalado con el comando:
 | 
			
		||||
 ```
 | 
			
		||||
   >/$ node --version
 | 
			
		||||
 ```
 | 
			
		||||
4. Dentro del directorio del bot, ejecutar los siguientes comandos:
 | 
			
		||||
 ```
 | 
			
		||||
   >/$ npm init --yes
 | 
			
		||||
   >/$ npm install --save node-telegram-bot-api
 | 
			
		||||
 ```
 | 
			
		||||
5. Comprobar que se ha generado el directorio _node_modules_.
 | 
			
		||||
### 5.2 Poner el Bot en producción ⚙️
 | 
			
		||||
#### 5.2.1 En Windows 💻
 | 
			
		||||
* Instala *nodejs*, si no lo hiciste en el punto anterior: https://nodejs.org/es/download/
 | 
			
		||||
* Ejecutar en CMD o PS los comandos:
 | 
			
		||||
 ```
 | 
			
		||||
  > cd ./ruta_del_directorio_del_bot/
 | 
			
		||||
  > node bot.js
 | 
			
		||||
 ```
 | 
			
		||||
* El proceso se puede automatizar creando un archivo .bat y añadiéndolo al programador de tareas.
 | 
			
		||||
 | 
			
		||||
#### 5.2.2 En Linux (Debian/Ubuntu) 🐧
 | 
			
		||||
* Instalamos *nodejs*, si no lo hicimos en el punto anterior:
 | 
			
		||||
 ```
 | 
			
		||||
  $ sudo apt-get update
 | 
			
		||||
  $ sudo apt-get upgrade
 | 
			
		||||
  $ sudo apt-get install curl
 | 
			
		||||
 | 
			
		||||
  $ cd ~
 | 
			
		||||
  $ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
 | 
			
		||||
 | 
			
		||||
  $ sudo apt-get install -y nodejs
 | 
			
		||||
 | 
			
		||||
  $ cd ./ruta_del_directorio_del_bot/
 | 
			
		||||
  $ npm install
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* Ejecutamos el bot con el comando:
 | 
			
		||||
 ```
 | 
			
		||||
   $ node bot.js
 | 
			
		||||
 ```
 | 
			
		||||
 | 
			
		||||
* El proceso se puede automatizar creando un script.
 | 
			
		||||
 | 
			
		||||
### 5.3 Añadir nuevas librerías 📚
 | 
			
		||||
* Primero abrir un terminal/PowerShell/CMD (dependiendo de nuestro SO) e ir al directorio de nuestro bot:
 | 
			
		||||
   ```
 | 
			
		||||
   cd ./ruta_del_directorio_del_bot/
 | 
			
		||||
   ```
 | 
			
		||||
* Si por ejemplo queremos añadir la librería _weather-js_, deberemos escribir el siguiente comando:
 | 
			
		||||
   ```
 | 
			
		||||
   npm install weather-js
 | 
			
		||||
   ```
 | 
			
		||||
***
 | 
			
		||||
## 6. Licencia 📄
 | 
			
		||||
Educational Community License v2.0 (ECL-2.0).
 | 
			
		||||
## 7. Enlace al Bot 🤖
 | 
			
		||||
> https://t.me/FDIeSports_bot
 | 
			
		||||
							
								
								
									
										178
									
								
								FDIeSports_Telegram_bot/bot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								FDIeSports_Telegram_bot/bot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,178 @@
 | 
			
		||||
/*
 | 
			
		||||
{
 | 
			
		||||
  "name": "FDIeSports_bot",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "Bot oficial de la agrupación de esports de la Facultad de Informática de la Universidad Complutense de Madrid.",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [],
 | 
			
		||||
  "author": "Fernando Méndez Torrubiano",
 | 
			
		||||
  "license": "Educational Community License v2.0 (ECL-2.0)",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "node-telegram-bot-api": "^0.51.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
// Importar las librerías:
 | 
			
		||||
const TelegramBot = require('node-telegram-bot-api');
 | 
			
		||||
// Token del bot:
 | 
			
		||||
const token = '1650731934:AAHYXV0t1hwE0j2TbcVFMXWQEfFulyj4BfU';
 | 
			
		||||
// Create the bot:
 | 
			
		||||
const bot = new TelegramBot(token, {polling:true});
 | 
			
		||||
 | 
			
		||||
// Palabras reservadas:
 | 
			
		||||
//const _despacho = new RegExp(/\b([Dd]espacho)\b/);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Captura de errores:
 | 
			
		||||
bot.on('polling_error', function(error){
 | 
			
		||||
    console.log(error);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Inicio del bot:
 | 
			
		||||
bot.onText(/^\/start/, function(msg){
 | 
			
		||||
    var chatId = msg.chat.id;
 | 
			
		||||
    var nameUser = msg.from.first_name;
 | 
			
		||||
 | 
			
		||||
    bot.sendMessage(chatId, "*Bienvenido al bot de asistencia de FDIeSports*, " + "*"+nameUser+"*" + ".", {parse_mode : "Markdown"});
 | 
			
		||||
    bot.sendPhoto(chatId, "https://esports.fdi.ucm.es/images/LOGO.png",
 | 
			
		||||
                {caption: "Nacida como una agrupación de equipos de eSports para la Facultad de Informática y formada por alumnos de toda la Universidad Complutense de Madrid.\n" +
 | 
			
		||||
                "FDIeSports está respaldada por la histórica Asociación Diskóbolo."});
 | 
			
		||||
 | 
			
		||||
    menu(msg);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Llama al menú interactivo de ayuda:
 | 
			
		||||
bot.onText(/^\/help/, (msg) => {
 | 
			
		||||
   menu(msg);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Menú interactivo de ayuda:
 | 
			
		||||
function menu(msg){
 | 
			
		||||
    var chatId = msg.chat.id;
 | 
			
		||||
 | 
			
		||||
    bot.sendMessage(chatId, "<b>Selecciona una opción</b> (escribe /help para volver a mostrar este menú): ",
 | 
			
		||||
    {
 | 
			
		||||
       reply_markup: {
 | 
			
		||||
           inline_keyboard: [
 | 
			
		||||
            [
 | 
			
		||||
                {
 | 
			
		||||
                    text:"Grupos de Whatsapp de los equipos📱", callback_data: 'grupos'
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
               {
 | 
			
		||||
                //text:"Inscripción", callback_data: 'registro'
 | 
			
		||||
                text:"Inscripción👤", url: "https://esports.fdi.ucm.es/registro"
 | 
			
		||||
               },
 | 
			
		||||
               {
 | 
			
		||||
                text:"Despacho📍", callback_data: 'despacho'
 | 
			
		||||
               }
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
               {
 | 
			
		||||
                text:"Redes Sociales💙", callback_data: 'redes'
 | 
			
		||||
               }
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                {
 | 
			
		||||
                    text:"Contacto📞", url: "https://esports.fdi.ucm.es/#four"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
        ]
 | 
			
		||||
       },
 | 
			
		||||
       parse_mode:"HTML",
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Respuestas a la pulsación de botones:
 | 
			
		||||
bot.on('callback_query', function onCallbackQuery(accionboton){
 | 
			
		||||
    const data = accionboton.data;
 | 
			
		||||
    const msg = accionboton.message;
 | 
			
		||||
    var chatId = msg.chat.id;
 | 
			
		||||
 | 
			
		||||
    if(data == 'grupos'){
 | 
			
		||||
        whatsapp(msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(data == 'registro'){
 | 
			
		||||
        registrar(msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(data == 'despacho'){
 | 
			
		||||
        bot.sendMessage(chatId, "Aquí tienes la localización del despacho de *Diskobolo/FDIeSports*:", {parse_mode: "Markdown"});
 | 
			
		||||
        bot.sendLocation(chatId, 40.45365669535852, -3.73307118835828177);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(data == 'redes'){
 | 
			
		||||
        redes(msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Registro de usuario en la base de datos (EN DESARROLLO):
 | 
			
		||||
function registrar(msg){
 | 
			
		||||
    var opts = {
 | 
			
		||||
    reply_markup: JSON.stringify({
 | 
			
		||||
        keyboard: [
 | 
			
		||||
        [{text: 'Enviar datos', request_contact: true}],
 | 
			
		||||
        [{text: 'Cancelar', request_contact: false}],
 | 
			
		||||
        ],
 | 
			
		||||
        resize_keyboard: true,
 | 
			
		||||
        one_time_keyboard: true,
 | 
			
		||||
    }),
 | 
			
		||||
    };
 | 
			
		||||
    bot.sendMessage(msg.chat.id, 'Formulario de registro: ', opts);
 | 
			
		||||
    bot.on('contact', (msg) => {
 | 
			
		||||
        console.log("Nombre: " + msg.contact.first_name /*+ "\nApodo: " + msg.contact.username*/ + "\nUserID:"  +  msg.contact.user_id + "\nNúmero Telf: " + msg.contact.phone_number);
 | 
			
		||||
        bot.sendMessage(msg.chat.id, "*"+msg.contact.first_name+"*" + ", *te has registrado en FDIeSports, correctamente*.", {parse_mode: "Markdown"});
 | 
			
		||||
        whatsapp(msg);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Muestra los grupos de Whastapp de los equipos:
 | 
			
		||||
function whatsapp(msg){
 | 
			
		||||
    bot.sendMessage(msg.chat.id, "Seleccione el equipo al que quiere unirse: ", {
 | 
			
		||||
        reply_markup: {
 | 
			
		||||
            inline_keyboard: [
 | 
			
		||||
                [
 | 
			
		||||
                    {text: "Equipo de LOL", url: "https://chat.whatsapp.com/5enTKgyYdefKNBpBq10igX"}
 | 
			
		||||
                ],
 | 
			
		||||
                [
 | 
			
		||||
                    {text: "Equipo de CSGO", url: "https://chat.whatsapp.com/CZJZshnndo6AUSveLMh2e1X"},
 | 
			
		||||
                    {text: "Equipo de OverWatch", url: "https://chat.whatsapp.com/3dN1UvXj6WO3oeqIMTWHW2"}
 | 
			
		||||
                ],
 | 
			
		||||
                [
 | 
			
		||||
                    {text: "Equipo de Valorant", url: "https://chat.whatsapp.com/E2J2WgW676TKZB8el8ODyo"}
 | 
			
		||||
                ]
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Muestra las redes sociales de FDIeSports:
 | 
			
		||||
function redes(msg){
 | 
			
		||||
    bot.sendMessage(msg.chat.id, "*Síguenos* en nuestras principales redes sociales: ", {
 | 
			
		||||
        reply_markup: {
 | 
			
		||||
            inline_keyboard: [
 | 
			
		||||
                [
 | 
			
		||||
                    {text: "Discord🎧", url: "https://discordapp.com/invite/zjAdrfz"}
 | 
			
		||||
                ],
 | 
			
		||||
                [
 | 
			
		||||
                    {text: "Twitter🐦", url: "https://twitter.com/FDIeSports"},
 | 
			
		||||
                    {text: "Web🌐", url: "https://esports.fdi.ucm.es/"}
 | 
			
		||||
                ],
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        parse_mode: "Markdown",
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bot.onText(/^\/author/, function(msg){
 | 
			
		||||
    var chatId = msg.chat.id;
 | 
			
		||||
 | 
			
		||||
    bot.sendMessage(chatId, "Autor👤: *Fernando Méndez 'Humpercobra'* \n" +
 | 
			
		||||
                                    "Web🌐: https://fermdez.ddns.net", {parse_mode : "Markdown"})
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										15
									
								
								FDIeSports_Telegram_bot/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								FDIeSports_Telegram_bot/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "FDIeSports_bot",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "Bot oficial de la agrupación de esports de la Facultad de Informática de la Universidad Complutense de Madrid.",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [],
 | 
			
		||||
  "author": "Fernando Méndez Torrubiano",
 | 
			
		||||
  "license": "Educational Community License v2.0 (ECL-2.0)",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "node-telegram-bot-api": "^0.51.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
# JS 💻
 | 
			
		||||
Javascript projets. 
 | 
			
		||||
 | 
			
		||||
Para uso exclusivo con fines de estudio. Se prohíbe su uso para entregas calificables y/o uso comercial.
 | 
			
		||||
***
 | 
			
		||||
## Directorios 🗂
 | 
			
		||||
1. [DiskoBOTlo](https://github.com/FerMdez/Javascript/tree/main/DiskoBOTlo)
 | 
			
		||||
2. [FDIeSports_bot](https://github.com/FerMdez/Javascript/tree/main/FDIeSports_bot)
 | 
			
		||||
***
 | 
			
		||||
## Licencia 📄
 | 
			
		||||
Educational Community License v2.0 (ECL-2.0).
 | 
			
		||||
		Reference in New Issue
	
	Block a user