commit 676a7db96ef233413896815bcd14d7568e740b43 Author: Fernando Méndez <45081533+FerMdez@users.noreply.github.com> Date: Tue Feb 2 11:03:35 2021 +0100 Add files via upload diff --git a/DiskoBOTlo_Discord/bot.js b/DiskoBOTlo_Discord/bot.js new file mode 100644 index 0000000..f1b08b2 --- /dev/null +++ b/DiskoBOTlo_Discord/bot.js @@ -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); \ No newline at end of file diff --git a/DiskoBOTlo_Discord/package.json b/DiskoBOTlo_Discord/package.json new file mode 100644 index 0000000..67c35a9 --- /dev/null +++ b/DiskoBOTlo_Discord/package.json @@ -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": [] +} diff --git a/DiskoBOTlo_Telegram/README.md b/DiskoBOTlo_Telegram/README.md new file mode 100644 index 0000000..e473cd4 --- /dev/null +++ b/DiskoBOTlo_Telegram/README.md @@ -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 diff --git a/DiskoBOTlo_Telegram/bot.js b/DiskoBOTlo_Telegram/bot.js new file mode 100644 index 0000000..7db57c0 --- /dev/null +++ b/DiskoBOTlo_Telegram/bot.js @@ -0,0 +1,1008 @@ +/* +{ + "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" + } +} +*/ +/* CONSTANTES */ + +// Importar las librerías: +const TelegramBot = require('node-telegram-bot-api'); +const _private = require('./private.js'); +// Token del bot: (const token = 'AQUÍ_TU_TOKEN';) +const token = _private.token(); +// Create the bot: +const bot = new TelegramBot(token, {polling:true}); +// ID grupo Diskobolo: (const IDGRUPO = 'AQUÍ_EL_ID_DE_TU_GRUPO';) +const IDGRUPO = _private.IDGRUPO(); + +const Telegraf = require('telegraf'); +const Extra = require('telegraf/extra'); +const Markup = require('telegraf/markup'); +const mcping = require('mc-ping'); +const http = require('http'); +const fs = require("fs"); +const curl = require("curl"); +//const OpenWeatherMapHelper = require("openweathermap-node"); +const jsdom = require("jsdom"); +const kelvinToCelsius = require('kelvin-to-celsius'); +var schedule = require('node-schedule'); +var moment = require('moment') +var nodejsWeatherApp = require('nodejs-weather-app'); +const weather = require('weather-js'); +const { brotliCompress } = require('zlib'); +const { Recoverable } = require('repl'); +const { userInfo } = require('os'); +const keyboard = Markup.inlineKeyboard([ + Markup.urlButton('❤️', 'http://telegraf.js.org'), + Markup.callbackButton('Delete', 'delete') +]) +const helper = _private.helper(); +/* ---------------------------AÑADIR EN EL ARCHIVO private.js LOS IDs DE LOS ADMINISTRADORES DEL BOT---------------------------*/ +const _admins= _private.admins(); +/* --------------------------------------------------------------------------------------------------------*/ + +// Palabras reservadas: +/* -------------------- */ +//PALABRA DISKOBOLO +const palabradiskobolo = new RegExp(/\b([dD]iskobolo)\b/); +// PALABRA EXAMEN +const palabraexamen = new RegExp(/\b([eE]xamen)\b/); +//PALABRA IRONMAN +const palabraironman = new RegExp(/\b([iI]ron [mM]an)\b/); +//PALABRA THANOS +const palabrathanos = new RegExp(/\b([Tt]hanos)\b/); +//PALABRA NUCLEAR +const palabranuclear = new RegExp(/\b([Nn]uclear)\b/); +//PALABRA LLORO +const palabralloro = new RegExp(/\b([Ll]loro)\b/); +//PALABRA PYTHON +const palabrapython = new RegExp(/\b([Pp]ython)\b/); +//PALABRA JAVA +const palabrajava = new RegExp(/\b([Jj]ava)\b/); +//PALABRA DEBIAN +const palabradebian = new RegExp(/\b([Dd]ebian)\b/); +//PALABRA WINDOWS +const palabrawindows = new RegExp(/\b([Ww]indows)\b/); +/* -------------------- */ + +/* *** */ + +/* VARIABLES */ +var tiempo; +var usuarios = []; +var temporaltiempo_usuario = 0; +var temporaltiempo_fecha = 0; +var temporaltiempo_comando = false; +var temporalminecraft_comando = false; +var temporalminecraft_usuario = 0; +var temporalminecraft_fecha = 0; +var temporalsistema_comando = false; +var temporalsistema_usuario = 0; +var temporalsistema_fecha = 0; +var temporalweb_comando = false; +var temporalweb_usuario = 0; +var temporalweb_fecha = 0; +var temporalactividades_comando = false; +var temporalactividades_usuario = 0; +var temporalactividades_fecha = 0; +var sistemas = ['Windows 10', 'Windows 7', 'Windows 8.1', 'Windows 8', 'Debian', 'ArchLinux', 'Ubuntu', 'MS-DOS', 'IBM PC DOS', + 'Windows 1.0', 'Windows 2.0', 'Windows 3.0', 'Windows NT', 'Windows 95', 'Windows 98', 'Windows Me', 'Windows XP', 'Windows Vista (El peor SO del mundo)', + 'Windows 7', 'Windows 8', 'Windows 8.1', 'Windows 10', 'Windows 10 Lite', 'Windows IOT', 'Windows Phone 7', 'Windows Phone 8', 'Windows Phone 8.1', 'Windows 10 Mobile', + 'Mac System Software', 'Mac System Software 1.1', 'Mac System Software 2.0', 'Mac System Software 3.0', 'Mac System Software 4.0', 'Mac System Software 5', + 'Mac System Software 6', 'Mac System Software 7', 'Mac OS 7.6', 'Mac OS 8', 'Mac OS 9', 'Mac OS X', 'Mac OS X Puma', 'Mac OS X Jaguar', 'Mac OS X Panther', + 'Mac OS X Leopard', 'Mac OS X Snow Leopard', 'Mac OS X Lion', 'Mac OS X Mountain Lion', 'Mac OS X Mavericks', 'Mac OS X Yosemite', 'Mac OS X El capitan', + 'Mac OS X Sierra', 'Mac OS X High Sierra', 'Mac OS X Mojave', 'Mac OS X Catalina', 'Manjaro Linux', 'OpenSUSE', 'Ubuntu', 'Debian', 'Linux Mint', 'Raspbian', + 'Arch Linux', 'Red Hat Enterprise Linux', 'Fedora', 'CentOS', 'Elementary OS', 'Kali Linux', 'BlackArch Linux', 'HannahMontanaOS', 'NicolasCageOS', 'Lubuntu', + 'SteamOS', 'Scientific Linux', 'Linux', 'Android Apple Pie', 'Android Banana Bread', 'Android Cupcake', 'Android Donut', 'Android Eclair', 'Android Froyo', + 'Android Gingerbread', 'Android Honeycomb', 'Android Ice Cream Sandwich', 'Android Jelly Bean', 'Android KitKat', 'Android Lolipop', 'Android Marshmallow', + 'Android Nougat', 'Android Oreo', 'Android Pie', 'Android 10', 'Android 11', 'iPhone OS 1.0', 'iPhone OS 2.0', 'iPhone OS 3.0', 'iOS 4', 'iOS 5', 'iOS 6', 'iOS 7', + 'iOS 8', 'iOS 9', 'iOS 10', 'iOS 11', 'iOS 12', 'iOS 13', 'iOS 14', 'iPad OS', 'CoronavirusOS (disponible por tiempo limitado)']; +var a = false; +var search_so = schedule.scheduleJob('00 9 * * *', function () { + console.log('¡Acabamos de elegir el sistema de hoy!'); + sistema = sistemas[Math.floor(Math.random() * sistemas.length)]; + a = true; + bot.sendMessage(IDGRUPO, " ¡BUENOS DÍAS! 🥁️* EL SISTEMA OPERATIVO DE HOY ES... *🥁️ " + "\n" + sistema, { parse_mode: 'Markdown' }) +}); +var aniversario = schedule.scheduleJob('00 00 14 4 *', function () { + console.log('¡Hoy es el aniversario de Diskobolo!'); + bot.sendMessage(IDGRUPO, "¡Hoy es el aniversario de Diskobolo! \n\n" + + "La asociación Diskobolo fue fundada el 14 de Abril de 1992 y es la asociación más antigüa de la Facultad de Informática.", { parse_mode: 'Markdown' }) +}); +var sistema; +// ACTIVIDADES: +var cmp = 0; +var aux = 0; +var html = 0; +const url = "https://diskobolo.fdi.ucm.es/#actividades"; +curl.get(url, null, (err, resp, body) => { + if (resp.statusCode == 200) { + html = body; + } + else { + //some error + ling + console.log("error while fetching url"); + } +}); +/* *** */ + +/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ + +/* FUNCIONALIDADES */ +// Captura de errores: +bot.on('polling_error', function(error){ + // Descomentar para trazar errores en el log. + //console.log(error); +}); + +// Inicio del bot: +bot.onText(/^\/start/, function(msg){ + var chatId = msg.chat.id; + var nameUser = msg.from.first_name; + var userId = msg.from.id; + var date = msg.date; + + bot.sendMessage(chatId, "¡Hola *" + nameUser +"*! " + + "¿Me has llamado verdad? 😊️\n\nSoy el bot de Diskóbolo, algunos me conocen como el *DiskoBOTlo* aunque me han programado para... ¡Darte la bienvenida!😎️" + + "\n\nEstaré aquí para lo que necesites. 💪️" + + "\n\n¿En qué te puedo ayudar? \nDejame pensar... 🤔️ escribe */comandos* para ver todo lo que puedo hacer. 🙃", {parse_mode : "Markdown"}); + + console.log("[" + Date(date) + "] " + nameUser + " (" + userId + "): Ha iniciado el bot."); + + menu(msg); +}); + +// Llama al menú interactivo de ayuda: +bot.onText(/^\/comandos/, (msg) => { + menu(msg); +}); + +// Llama al menú interactivo de ayuda: +bot.onText(/^\/help/, (msg) => { + getHelp(msg); + }); + +// Comando para mostrar las redes sociales de DSK: +bot.onText(/^\/rrss/, (msg) => { + getRedes(msg); +}); +bot.onText(/^\/redes/, (msg) => { + getRedes(msg); +}); + +// Comando para mostrar próximas actividades: +bot.onText(/^\/actividades/, (msg) => { + getActividades(msg); +}); + +// Comando para mostrar el estado de la web: +bot.onText(/^\/web/, (msg) => { + getWeb(msg); +}); + +// Comando para mostrar el estado del servidor de Minecraft: +bot.onText(/^\/minecraft/, (msg) => { + getMinecraft(msg); +}); + +// Comando para mostrar el Sistema Operativo del día: +bot.onText(/^\/sistemadeldia/, (msg) => { + getSistemadeldia(msg); +}); + +// Comando para mostrar la localización del despacho 111: +bot.onText(/^\/despacho/, (msg) => { + getDespacho(msg); +}); + +// Comando para mostrar el clima en la FDI: +bot.onText(/^\/weather/, (msg) => { + getClima(msg); +}); +bot.onText(/^\/clima/, (msg) => { + getClima(msg); +}); + +//Comando para mostar las opciones de administradores: +bot.onText(/^\/admin/, (msg) => { + admin(msg); +}); + +// Autor: +bot.onText(/^\/autor/, function(msg){ + var chatId = msg.chat.id; + var nameUser = msg.from.first_name; + var userId = msg.from.id; + var date = msg.date; + + bot.sendMessage(chatId, "Autor👤: *Fernando Méndez 'Humpercobra'* \n" + + "Web🌐: https://fermdez.ddns.net", {parse_mode : "Markdown"}); + + console.log("[" + Date(date) + "] " + nameUser + " (" + userId + "): Ha solicitado el autor."); +}); + +/* Funcionalidades de Administradores: */ +//ENVIAR +bot.onText(/^\/enviar/, function(msg){ + enviarComunidado(msg) + }); + // Muestra el id del usuario que hace la petición: + bot.onText(/^\/myid/, function(msg){ + getMyId(msg); + }); + + // Respuesta de comprobación del bot: + bot.onText(/^\/ping/, function(msg){ + doPing(msg); + }); + + // Envía el himno de Diskobolo: + bot.onText(/^\/himno/, function(msg){ + getHimno(msg); + }); + +// Muestra los Estatutos y reglamento del régimen interno: +bot.onText(/^\/estatutos/, function(msg){ + getEstatutos(msg); +}); + + +/* Pruebas: */ +// Envía un dado: +bot.onText(/^\/dado/, function(msg) { + getDado(msg); +}); +//Envía un dardo +bot.onText(/^\/dardo/, function(msg) { + getDardo(msg); +}); +//Envía un balón +bot.onText(/^\/ball/, function(msg) { + getBall(msg); + }); + + +/* ------------------------------------------------------------------------------------------------------ */ +/* No añadas funcionalidades debajo de aquí, no funcionarán (pero sí puedes añadir funciones, más abajo). */ + +// Detección de palabras reservadas: +bot.on('message', (msg) => { + var mensaje = msg.text; + + //Si entra al grupo un nuevo usuario: + if (msg.new_chat_members != undefined){ + getMensajeBienvenida(msg); + //bot.sendMessage(chatId, "Hola " + nameNewMember + ", bienvenido al grupo " + chatitle); + } //Cuando un usuario abandona el grupo + else if (msg.left_chat_member != undefined){ + getMensajeDespedida(msg); + //bot.sendMessage(chatId, nameLeftMember + " abandonó el grupo"); + } + + if(mensaje.includes('diskobolo') || mensaje.includes('Diskobolo')){ + bot.sendMessage(msg.chat.id, "Diskoporro*"); + } + if(mensaje.includes('iron man') || mensaje.includes('Iron Man') + || mensaje.includes('ironman') || mensaje.includes('IronMan') + || mensaje.includes('Iron man') || mensaje.includes('Ironman')){ + bot.sendAudio(msg.chat.id,"./src/audio/ironman.mp3",{caption : "Y yo... soy Iron Man."}); + } + if(mensaje.includes('thanos') || mensaje.includes('Thanos')){ + bot.sendAudio(msg.chat.id,"./src/audio/thanos.mp3",{caption : "Yo soy INEVITABLE."}); + } + if(mensaje.includes('nuclear') || mensaje.includes('Nuclear')){ + bot.sendAudio(msg.chat.id,"./src/audio/nucelar.mp3",{caption : "Nucelar, la palabra es nucelar."}); + } + if(mensaje.includes('examen') || mensaje.includes('Examen')){ + bot.sendMessage(msg.chat.id, "Parece que intentas suicidarte, ¿necesitas ayuda? 🙃"); + } + if(mensaje.includes('lloro') || mensaje.includes('Lloro')){ + bot.sendMessage(msg.chat.id, msg.chat.first_name + " deja de llorar."); + } + if(mensaje.includes('windows') || mensaje.includes('Windows')){ + bot.sendMessage(msg.chat.id, "¡Windows días! 🪟"); + } + if(mensaje.includes('debian') || mensaje.includes('Debian')){ + bot.sendMessage(msg.chat.id, "Hola caracola 🐚"); + } + if(mensaje.includes('java') || mensaje.includes('Java')){ + bot.sendMessage(msg.chat.id, "Intenté ligar con una informática, pero no sé deJAVA (ba dum chss...)"); + } + if(mensaje.includes('python') || mensaje.includes('Python')){ + bot.sendMessage(msg.chat.id, "Ha dicho Python 🤮"); + } +}); + +/* *** */ + + + + +/* ------------------------------------------------------------------------------------------------------ */ +/* FUNCIONES */ + +//Mensaje de bienvenida al entrar en el grupo de Diskobolo: +function getMensajeBienvenida(msg) { + //var nameUser = msg.from.first_name; + //var chatitle = msg.chat.title; + var chatId = msg.chat.id; + var nameNewMember = msg.new_chat_member.first_name; + var date = msg.date; + + if (msg.new_chat_member.is_bot == true){ + bot.sendMessage(chatId, "🔏️ *Bienvenido a Diskóbolo, " + nameNewMember + "* 🔓️. \nSé que eres otro bot, te estoy vigilando 👀", {parse_mode: 'Markdown'}); + console.log(nameNewMember + ": Ha entrado al grupo."); + } + else { + bot.sendMessage(chatId, "🔏️ *Bienvenido a Diskóbolo, " + nameNewMember + "*. \nSoy el DiskoBotlo 🔓️" + + "\nEstamos deseando verte por el *despacho 111* (primera planta)." + + "\n\n- Siguenos en *Twitter*: [Twitter](https://www.twitter.com/dskbolo) \n- Visita nuestra *web*: [Web](http://diskobolo.fdi.ucm.es) \n" + + "\n-*Y si aún no eres socio, registrate con tu cuenta UCM*, a través de este enlace: https://forms.gle/4Y7cNZu3yTx5FKyUA \n", { parse_mode: 'Markdown' }); + console.log("[" + Date(date) + "] " + nameNewMember + ": Ha entrado al grupo."); + } +} + +//Mensaje de despedida al salir del grupo de Diskobolo: +function getMensajeDespedida(msg) { + var chatId = msg.chat.id; + //var chatitle = msg.chat.title; + var nameLeftMember = msg.left_chat_member.first_name; + var date = msg.date; + + bot.sendMessage(chatId, "*" + nameLeftMember + "* abandonó el grupo. Te echaremos de menos ❤️", {parse_mode: 'Markdown'}); + console.log("[" + Date(date) + "] " + nameUser + ": Ha abandonado el grupo"); +} + +// Menú interactivo de ayuda: +function menu(msg){ + var chatId = msg.chat.id; + //var userName = msg.from.first_name; + //var tipoChat = msg.chat.type; + + bot.sendMessage(chatId, "Selecciona una opción: \n\n(Escribe /comandos para volver a mostrar este menú o /help para mostrar la descripción de cada comando). ", + { + reply_markup: { + inline_keyboard: [ + [ + { + text:"Redes Sociales 💙", callback_data: 'redes', + } + ], + [ + { + text:"Próximas actividades 📅", callback_data: 'actividades', + } + ], + [ + { + text:"Estado de la página web 🌍️", callback_data: 'web', + }, + { + text:"Servidor de Minecraft ⛏", callback_data: 'minecraft', + } + ], + [ + { + + text:"Sistema Operativo del día 💻", callback_data: 'so', + } + ], + [ + { + text:"Localización Despacho 📍", callback_data: 'despacho', + }, + { + + text:"Clima en la FDI ⛅", callback_data: 'weather', + } + ], + [ + { + text:"Enviar un dado🎲", callback_data: 'dado', + }, + { + + text:"Enviar un dardo🎯", callback_data: 'dardo', + }, + { + text:"Enviar un balón⚽️", callback_data: 'ball', + } + ], + [ + { + text:"Comandos de administradores 🛡️",callback_data: 'admin', + } + ], + ] + }, + parse_mode:"HTML", + }); + console.log("[" + Date(msg.date) + "] " + msg.from.first_name + "(" + msg.from.id + "): Ha usado el comando /comandos."); +} + +// Respuestas a la pulsación de botones: +bot.on('callback_query', function onCallbackQuery(accionboton){ + const data = accionboton.data; + const msg = accionboton.message; + + switch(data){ + case 'redes': getRedes(accionboton); + break ; + case 'actividades': getActividades(accionboton); + break ; + case 'minecraft': getMinecraft(accionboton); + break ; + case 'web': getWeb(accionboton); + break ; + case 'so': getSistemadeldia(accionboton); + break ; + case 'despacho': getDespacho(accionboton); + break ; + case 'weather': getClima(accionboton); + break ; + case 'admin': admin(accionboton); + break ; + case 'dado': getDado(accionboton); + break ; + case 'dardo': getDardo(accionboton); + break ; + case 'ball': getBall(accionboton); + break ; + case 'estatutos': sendEstatutos(msg); + break; + case 'reglamento': sendReglamento(msg); + break; + } + +}); + +// Muestra la lista de comandos disponibles: +function getHelp(msg){ + bot.sendMessage(msg.chat.id, "¡Estos son todos los comandos que puedes usar! 😱️\n\n" + + "/actividades - ¡Descubre todas las *actividades que tenemos pendientes* antes del fin del mundo! 🌍️📅 \n\n" + + "/ball - Envía un *balón*. ⚽️🏀 \n\n" + + "/comandos - Muestra el menú de comandos. 📋🖨️ \n\n" + + "/dado - Envía un *dado*. 🎲 \n\n" + + "/dardo - Envía un *dardo*. 🎯 \n\n" + + "/despacho - *¿No sabes dónde está nuestro bunker?* Con este comando lo averigüarás. 📍🌍️ \n\n" + + "/help - Muestra la información de cada comando. 📑🖨️ \n\n" + + "/minecraft - Comprueba el *estado de nuestro servidor de Meincraff*, debería estar abierto durante 1000 años ⛏🧱 \n\n" + + "/rrss - Todas las *redes sociales de Diskobolo*. 🕊️📷 \n\n" + + "/sistemadeldia - ¿Quemando ISOs todo el día? 😥️ *¡Te ayudamos a elegir el sistema todos los días!* 😜️ \n\n" + + "/weather - Muestra el *clima actual en Ciudad Universitaria*. 🌞⛅ \n\n" + + "/web - ¿Quieres saber si Chema Alonso ha hackiado tu internete y por eso no te carga nuestra web? 😱️ ¡Nosotros lo comprobamos por ti! 😊️ \n\n" + + "/autor - Muestra información sobre el autor. ✍️👱‍♂️ \n\n" + + "/admin - Comandos disponibles para *administradores*. 🛡️🛡️" + + "\n\n-------------------------\n\n¿Se te ocurre algo más en lo que crees que puedo ayudarte? 🤯️ \n\n" + + "*¡PÁSATE POR EL DESPACHO 111!* Estaremos encantados de ayudarte 😊️ \n\n", {parse_mode : "Markdown"}); + + console.log("[" + Date(msg.date) + "] " + msg.from.first_name + "(" + msg.from.id + "): Ha usado el comando /help."); +} + +// Muestra las redes sociales de FDIeSports: +function getRedes(msg){ + var userName = msg.from.first_name; + var userId = msg.from.id; + if(msg.text == '/redes' || msg.text == '/rrss' + || msg.text == '/redes@DiskoBOTlo_BOT' || msg.text == '/rrss@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var date = msg.date; + } + else { + var chatId = msg.message.chat.id; + var date = msg.message.date; + } + const keyboard = { + reply_markup: { + inline_keyboard: [ + [ + { + text:"Web🌐", url:"https://diskobolo.fdi.ucm.es/" + }, + { + text:"Twitter🕊️", url:"https://twitter.com/DskBolo" + } + ], + [ + { + text:"Instagram📷", url:"https://www.instagram.com/diskobolo/" + }, + { + text:"Facebook👍", url:"https://www.facebook.com/DiskoboloUCM/" + } + ], + [ + { + text:"YouTube🎥", url:"https://www.youtube.com/channel/UC-zaEabLK02ctakxUkE8Zwg" + }, + { + text:"Twitch🔴", url:"https://www.twitch.tv/diskobolo" + } + ], + ] + }, + parse_mode:"HTML", + }; + + bot.sendMessage(chatId, "" + userName + ", estas son las redes sociales de Diskobolo:",keyboard); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /redes."); +} + +// Muestra las próximas actividades de Dsikobolo: +function getActividades(msg){ + // Esta función no ha podido ser liberada por razones de seguridad y privacidad de la asociación. +} + +//Funciones para mostrar el estado del servidor de Minecraft: +function getMinecraft(msg){ + getJugadores(msg); +} +// Muestra los jugadores conectados al servidor de Minecraft: +function getJugadores(msg) { + // Esta función no ha podido ser liberada por razones de seguridad y privacidad de la asociación. +} + +// Devuelve el estado de la web de Diskobolo: +function getWeb(msg){ + // Esta función no ha podido ser liberada por razones de seguridad y privacidad de la asociación. +} + +// Devuelve el sistema operativo del día: +function getSistemadeldia(msg){ + var userId = msg.from.id; + var userName = msg.from.first_name; + if(msg.text == '/sistemadeldia' || msg.text == '/sistemadeldia@DiskoBOTlo_BOT' + || msg.text == '/so' || msg.text == '/so@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var msgId = msg.message_id; + var msgDate= msg.date; + } + else { + var chatId = msg.message.chat.id; + var msgId = msg.message.message_id; + var msgDate = msg.message.date; + } + + if (userId == temporalsistema_usuario) { + console.log(userName + "(" + userId + "): Ha usado el comando /sistemadeldia."); + if ((msgDate) > (temporalsistema_fecha + 10) || (msgDate) == (temporalsistema_fecha)) { + if (a == false) { + sistema = sistemas[Math.floor(Math.random() * sistemas.length)]; + a = true; + } + bot.sendMessage(chatId, userName + ", 🥁️*¡EL SISTEMA OPERATIVO DE HOY ES.... *🥁️ " + "\n" + sistema, { parse_mode: 'Markdown'}); + console.log("[" + Date(msgDate) + "] " + userName + "(" + userId + "): Ha usado el comando /sistemadeldia."); + } else { + bot.sendMessage(userId, userName + ", espera y vuelve a intentarlo más tarde.") + bot.deleteMessage(chatId, msgId); + temporalsistema_fecha = msgDate; + } + } else { + if ((msgDate) > (temporalsistema_fecha + 10) || (msgDate) == (temporalsistema_fecha)) { + if (a == false) { + sistema = sistemas[Math.floor(Math.random() * sistemas.length)]; + a = true; + } + bot.sendMessage(chatId, userName + ", 🥁️*¡EL SISTEMA OPERATIVO DE HOY ES.... *🥁️ " + "\n" + sistema, { parse_mode: 'Markdown'}); + } + temporalsistema_usuario = userId; + temporalsistema_fecha = msgDate; + console.log("[" + Date(msgDate) + "] " + userName + "(" + userId + "): Ha usado el comando /sistemadeldia."); + } + temporalsistema_comando = true; +} + +function getDespacho(msg){ + var userName = msg.from.first_name; + var userId = msg.from.id; + if(msg.text == '/despacho' || msg.text == '/localizacion' + || msg.text == '/despacho@DiskoBOTlo_BOT' || msg.text == '/localizacion@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var date = msg.date; + } + else { + var chatId = msg.message.chat.id; + var date = msg.message.date; + } + bot.sendMessage(chatId, "*"+ userName + "*" + ", esta es la localización del *despacho 111*. ", {parse_mode: 'Markdown'}); + bot.sendLocation(chatId, 40.45304029714122, -3.733060461650645); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /despacho."); +} + +// Muestra la temperatura y el clima en Ciudad universitaria: +function getClima(msg){ + var userName = msg.from.first_name; + var userId = msg.from.id; + if(msg.text == '/weather' || msg.text == '/clima' + || msg.text == '/weather@DiskoBOTlo_BOT' || msg.text == '/clima@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var date = msg.date; + } + else { + var chatId = msg.message.chat.id; + var date = msg.message.date; + } + var ciudad = 'Madrid/Moncloa'; + + var opciones = { + search: ciudad, // lugar es la ciudad que el usuario introduce + degreeType: 'C', // Celsius + lang: 'es-ES' // Lenguaje en el que devolverá los datos + } + + weather.find(opciones, function(err, result){ + + if (err){ // Si ocurre algun error... + console.log(err); // ... nos lo muestra en pantalla + + } else { + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /clima."); + console.log(result[0]); // Visualizamos el primer resultado del array + + bot.sendMessage(chatId, "*" + userName + "*" + ", esta es la información del tiempo: \n" + + "-------------------------------------------\n" + + "Lugar: " + "*" + result[0].location.name + "*" + + "\n\nTemperatura: " + "*" + result[0].current.temperature + "ºC\n" + "*" + + "Visibilidad: " + "*" + result[0].current.skytext + "\n" + "*" + + "Humedad: " + "*" + result[0].current.humidity + "%\n" + "*" + + "Dirección del viento: " + "*" + result[0].current.winddisplay + "\n" + "*" + ,{parse_mode: 'Markdown'}); + + } + }); +} + +//Devuelve un dado: +function getDado(msg){ + var userName = msg.from.first_name; + var userId = msg.from.id; + if(msg.text == '/dado' || msg.text == '/dado@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var date = msg.date; + } + else { + var chatId = msg.message.chat.id; + var date = msg.message.date; + } + + bot.sendMessage(chatId, "*" + userName + "*, envió un lanzó.", {parse_mode: 'Markdown'}); + bot.sendDice(chatId).then(function (info) { + console.log(info); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /dado."); + }); +} + +function getDardo(msg){ + var userName = msg.from.first_name; + var userId = msg.from.id; + if(msg.text == '/dardo' || msg.text == '/dardo@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var date = msg.date; + } + else { + var chatId = msg.message.chat.id; + var date = msg.message.date; + } + const opts = { + 'emoji': '🎯' + } + bot.sendMessage(chatId, "*" + userName + "*, lanzó un dardo.", {parse_mode: 'Markdown'}); + bot.sendDice(chatId, opts).then(function (info) { + console.log(info); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /dardo."); + }); +} + +function getBall(msg){ + var userName = msg.from.first_name; + var userId = msg.from.id; + if(msg.text == '/ball' || msg.text == '/balon' || msg.text == '/ball@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var date = msg.date; + } + else { + var chatId = msg.message.chat.id; + var date = msg.message.date; + } + var ball = Math.floor(Math.random() * 2); + console.log(ball); + switch(ball){ + case 0: + var opts = { + 'emoji': '⚽️' + } + break; + case 1: + var opts = { + 'emoji': '🏀' + } + break; + } + bot.sendMessage(chatId, "*" + userName + "*, lanzó una pelota.", {parse_mode: 'Markdown'}); + bot.sendDice(chatId, opts).then(function (info) { + console.log(info); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /ball."); + }); +} + + +/*FUNCIONES DE ADMINISTRADORES*/ +function admin(msg) { + var userName = msg.from.first_name; + var userId = msg.from.id; + if(msg.text == '/admin' || msg.text == '/admin@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var tipoChat = msg.chat.type; + var date = msg.date; + } + else { + var chatId = msg.message.chat.id; + var tipoChat = msg.message.chat.type; + var date = msg.message.date; + } + + if (getpermisos(msg)) { + if (tipoChat == 'private'){ + bot.sendMessage(chatId, "Bienvenido a la sala de máquinas de Diskóbolo. \n ¿Qué quieres saber? \n\n" + + 'Comandos disponibles: \n\n 1. El bot envia un mensaje por el grupo. \n *Solo debe ser empleado para comunicados oficiales con autorización previa del presidente.* \n Uso: _/enviar "Texto, no son necesarias las comillas."_ \n\n' + + '2. Comprobar que el bot funciona correctamente. \n *No sirve para nada.* \n Uso: _/ping "Debe devolver: Pong 🏓"_ \n\n' + + '3. Obtener tu id de usuario. \n *Para añadir administradores del bot que puedan acceder a estos comandos (lo pueden usar NO administradores, para que su función tenga sentido).* \n Uso: _/myid "Delvolverá un id de usuario que debe añadirse a la constante "admins" (línea 14), del archivo "private.js" del servidor de Diskobolo."_ \n\n' + + '4. Enviar el himno *AL GRUPO DE DISKOBOLO*. \n *Para escuchar antes de comenzar las juntas de socios.* \n Uso: _/himno "Devuelve un archivo de audio con el himno de DSK." _ \n\n' + + '5. Consultar los *estatutos* y *reglamento del régimen interno*. \n *Envía un documento con el PDF seleccionado de la asociación.* \n Uso: _/estatutos "Te dará a aelegir entre uno de los dos codumentos."_ \n\n' + , { parse_mode: 'Markdown' }); + + } + else if (tipoChat == 'supergroup' || tipoChat == 'group') { + bot.sendMessage(chatId, userName + ", este comando sólo funciona en privado."); + } + } + else { + bot.sendMessage(chatId, "Lo siento " + userName + ", no eres administrador."); + } + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /admin."); +} + +// CÓDIGOS DE PERMISOS PARA ADMINISTRADOR [AÑADIR SÓLO ID DE TELEGRAM DE GENTE DE JUNTA] +function getpermisos(msg) { + var userId = msg.from.id; + var nameUser = msg.from.first_name; + if(msg.text == 'Selecciona una opción: \n'){ + if (msg.text.includes('/enviar') || msg.text.includes('/enviar@DiskoBOTlo_BOT')){ + var chatId = msg.chat.id; + } + } else { + if(msg.text == '/admin' || msg.text == '/admin@DiskoBOTlo_BOT' + || msg.text == '/ping' || msg.text == '/ping@DiskoBOTlo_BOT' + || msg.text == '/estatutos' || msg.text == '/estatutos@DiskoBOTlo_BOT'){ + var chatId = msg.chat.id; + var date = msg.date; + } + else { + var chatId = msg.message.chat.id; + var date = msg.message.date; + } + } + var admin = false; + var i = 0; + + while(!admin && i < _admins.length){ + if(userId == _admins[i]){ + admin = true + } + i++; + } + + if (admin) { //(chatId == 505923437) /* President Fer (Aka Humper) */ || (chatId == 913161860) /*ViceCulo Aaron (Aka Abstención)*/ || (chatId == 960116266 /* Secre lago */) + console.log("[" + Date(date) + "] " + "Admin loggued, chat ID: " + chatId); + return true; + } else { + console.log("[" + Date(date) + "] " + "No admin try, ID/USER: " + userId + " | " + nameUser); + bot.sendMessage(chatId, "Error 404, admin not found."); + return false; + } +} + +// Envía y ancla un mensaje al grupo de Diskobolo: +function enviarComunidado(msg){ + var comunicado = ""; + var mensaje = msg.text; + var tipoChat = msg.chat.type; + var userId = msg.from.id; + var nameUser = msg.from.first_name; + var date = msg.date; + + if (tipoChat == 'private'){ + if (getpermisos(msg)) { + for(var i = 7; i < mensaje.length; i++){ + comunicado += mensaje[i]; + } + bot.sendMessage(IDGRUPO, comunicado).then(function(m) { + bot.pinChatMessage(IDGRUPO, m.message_id); + console.log("[" + Date(date) + "] " + "Un administrador envió un mensaje, " + nameUser + " ID: " + userId); + }) + bot.deleteMessage(msg.chat.id, msg.message_id); + } + } + else if (tipoChat == 'supergroup' || tipoChat == 'group') { + bot.sendMessage(chatId, "Este comando sólo funciona en privado."); + } +} + +// Muestra el id del usuario que hace la petición: +function getMyId(msg) { + var myId = msg.from.id; + var userName = msg.from.first_name; + var chatId = msg.chat.id; + var tipoChat = msg.chat.type; + var date = msg.date; + + if (tipoChat == 'private'){ + bot.sendMessage(chatId, "Tu id es: " + myId); + console.log("[" + Date(date) + "] " + userName + "(" + myId + "): Ha usado el comando /myid."); + } + else if (tipoChat == 'supergroup' || tipoChat == 'group') { + bot.sendMessage(chatId, "Este comando sólo funciona en privado."); + } +} + +// Hace un ping: +function doPing(msg){ + var chatId = msg.chat.id; + var tipoChat = msg.chat.type; + var userName = msg.from.first_name; + var userId = msg.from.id; + var date = msg.date; + + if (getpermisos(msg)){ + if (tipoChat == 'private'){ + bot.sendMessage(chatId, "Pong 🏓"); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /ping."); + } + else if (tipoChat == 'supergroup' || tipoChat == 'group') { + bot.sendMessage(chatId, "Este comando sólo funciona en privado."); + } + } +} + +//Envía el himno de DSK: +function getHimno(msg){ + var chatId = msg.chat.id; + //var tipoChat = msg.chat.type; + var userName = msg.from.first_name; + var userId = msg.from.id; + var date = msg.date; + + if (getpermisos(msg)) { + bot.sendAudio(IDGRUPO,"./src/audio/himnoDSK.mp3",{caption: "Himno oficial de DSK (sustituir 'In the navy' por 'Diskoporro')."}); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha usado el comando /himno."); + } + else { + bot.sendMessage(chatId, "Lo siento " + userName + ", no eres administrador."); + } +} +// Encía los estatutos y reglamento del régimen interno de Diskobolo: +function getEstatutos(msg){ + var chatId = msg.chat.id; + var tipoChat = msg.chat.type; + var userName = msg.from.first_name; + + if (getpermisos(msg)) { + if (tipoChat == 'private'){ + bot.sendMessage(chatId, "Selecciona una opción: \n\n(Recuerda que los estatutos son como 'la constitución' y el reglamento como 'las leyes'. \nEl reglamento no puede contradecir los estatutos).", + { + reply_markup: { + inline_keyboard: [ + [ + { + text:"Estatutos", callback_data: 'estatutos', + }, + { + text:"Reglamento del Régimen Interno", callback_data: 'reglamento', + } + ] + ] + }, + parse_mode:"HTML", + }); + } + else if (tipoChat == 'supergroup' || tipoChat == 'group') { + bot.sendMessage(chatId, "Este comando sólo funciona en privado."); + } + + } + else { + bot.sendMessage(chatId, "Lo siento " + userName + ", no eres administrador."); + } +} + +function sendEstatutos(msg){ + var chatId = msg.chat.id; + var userId = msg.from.id; + var userName = msg.from.first_name; + var date = msg.date; + + bot.sendDocument(chatId, "./src/documents/Estatutos_Diskobolo.pdf",{caption: "Estatutos de la Asociación Diskobolo."}); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha solicitado los estatutos."); +} + +function sendReglamento(msg){ + var chatId = msg.chat.id; + var userId = msg.from.id; + var userName = msg.from.first_name; + var date = msg.date; + + bot.sendDocument(chatId, "./src/documents/Reglamento_del_Régimen_interno_DSK_v2019.pdf",{caption: "Reglamento del régimen interno de la Asociación Diskobolo."}); + console.log("[" + Date(date) + "] " + userName + "(" + userId + "): Ha solicitado el reglamento del régimen interno."); +} + +/* *** */ + + + + + + + + + + + + + + + + + + + + + + + + +// Detección de palabras reservadas (OLD): +/* +bot.onText(palabradiskobolo, function(msg){ + bot.sendMessage(msg.chat.id, "Diskoporro*"); +}); +bot.onText(palabraexamen, function(msg){ + bot.sendMessage(msg.chat.id, "Parece que intentas suicidarte, ¿necesitas ayuda? 🙃"); +}); +bot.onText([palabraironman, 'IRONMAN', 'ironman', 'IronMan', 'IRON MAN'], function(msg){ + bot.sendAudio(msg.chat.id,"",{caption : "Y yo... soy Iron Man."}); +}); +bot.onText([palabrathanos, 'THANOS'], function(msg){ + bot.sendAudio(msg.chat.id,"",{caption : "Yo soy INEVITABLE."}); +}); +bot.onText(palabranuclear, function(msg){ + bot.sendAudio(msg.chat.id,"",{caption : "Nucelar, la palabra es nucelar."}); +}); +bot.onText(palabrapython, function(msg){ + bot.sendMessage(msg.chat.id, "Ha dicho Python 🤮"); +}); +bot.onText(palabrajava, function(msg){ + bot.sendMessage(msg.chat.id, "Intenté ligar con una informática, pero no sé deJAVA (ba dum chss...)"); +}); +bot.onText(palabradebian, function(msg){ + bot.sendMessage(msg.chat.id, "Hola caracola 🐚"); +}); +bot.onText(palabrawindows, function(msg){ + bot.sendMessage(msg.chat.id, "¡Windows días! 🪟"); +}); +bot.onText(palabralloro, function(msg){ + bot.sendMessage(msg.chat.id, msg.chat.first_name + " deja de llorar."); +}); +*/ diff --git a/DiskoBOTlo_Telegram/package.json b/DiskoBOTlo_Telegram/package.json new file mode 100644 index 0000000..057e869 --- /dev/null +++ b/DiskoBOTlo_Telegram/package.json @@ -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" + } +} diff --git a/FDIeSports_Discord_bot/bot.js b/FDIeSports_Discord_bot/bot.js new file mode 100644 index 0000000..a4d5cbb --- /dev/null +++ b/FDIeSports_Discord_bot/bot.js @@ -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); \ No newline at end of file diff --git a/FDIeSports_Discord_bot/package.json b/FDIeSports_Discord_bot/package.json new file mode 100644 index 0000000..8948279 --- /dev/null +++ b/FDIeSports_Discord_bot/package.json @@ -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" + } +} diff --git a/FDIeSports_Telegram_bot/README.md b/FDIeSports_Telegram_bot/README.md new file mode 100644 index 0000000..7902a60 --- /dev/null +++ b/FDIeSports_Telegram_bot/README.md @@ -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 diff --git a/FDIeSports_Telegram_bot/bot.js b/FDIeSports_Telegram_bot/bot.js new file mode 100644 index 0000000..7ad58d8 --- /dev/null +++ b/FDIeSports_Telegram_bot/bot.js @@ -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, "Selecciona una opción (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"}) +}); \ No newline at end of file diff --git a/FDIeSports_Telegram_bot/package.json b/FDIeSports_Telegram_bot/package.json new file mode 100644 index 0000000..ed12c44 --- /dev/null +++ b/FDIeSports_Telegram_bot/package.json @@ -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" + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..cb63109 --- /dev/null +++ b/README.md @@ -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).