Blog del Podcast
podcast      GitHub      Twitter   Telegram

Controla tu Raspberry, Servidor o PC desde Telegram

Tiempo estimado de lectura: 10 minutos. 1143 palabras. telegram

Voy a explicarte como configurar un Bot de Telegram, que te va a permitir el controlar la totalidad de tu Raspberry, Servidor o PC, remotamente.

Con este Bot no solo podrás conocer la temperatura, IP pública, … Tal como te expliqué en el Post Crea un Bot de Telegram con Bash y una sola línea de Terminal, sino que también podrás interactuar con él, iniciando o deteniendo servicios, mediante el GPIO podrás conectar luces, motores de persianas, puertas… ejecutar comandos que ejecutarías en la terminal, actualizar tu servidor… En definitiva, para todo aquello que dé tu imaginación.

Lo mejor de todo, es que nos conectaremos a través de la API de Telegram, de modo que no necesitaremos utilizar ningún servicio tipo VPN. Nuestro Bot de Telegram, puede convertirse en un mando a distancia, teniendo el control total de todo lo que suceda en tu casa y lo mejor de todo, sin tener conocimientos de programación. Vamos a utilizar nuevamente Bash, como lenguaje de programación y añadiendo cuatro parámetros, vas a comenzar a controlarlo todo.

He hecho un Fork de BaTBot en su última versión modificada por eliafino y lo he traducido al Castellano para el fácil comprensión. BaTBot en la versión 1.4.3.4 lo encontrarás en mi Repositorio en GitHub.

Instalación

Lo primero que vamos ha hacer es descargar BaTbot y clonar el repositorio, por ejemplo, en la carpeta de usuario de nuestra distro:

cd                                             # Esto nos llevará a la carpeta de usuario
git clone https://github.com/uGeek/BaTbot.git  # Clonamos el repositorio
cd ~/BaTbot/bin/                               # Accedemos a la carpeta ~/BaTbot/bin

Dentro de la carpeta bin, encontraremos el script del bot llamado batbot.

Configurando BaTbot

Vamos a editar el archivo batbot y añadir las variables necesarias:

nano ~/BaTbot/bin/batbot

La configuración va a ser muy simple. Necesitamos añadir las siguientes variables en el script:

El TOKEN si recordáis, lo obteníamos a través de @BotFather y el ID, mediante el Bot @ChannelIdBot.

Si no recuerdas bien los pasos, te invito a leer el Post Crea un Bot de Telegram con Bash y una sola línea de Terminal, donde explico los pasos con mas detalle.

La ruta de la carpeta .batbot, hay que ponerla completa. Dentro de esta carpeta está la lista de usuarios que tendrán permisos para utilizar nuestro Bot.

Aquí tienes un ejemplo, con parámetros inventados, como quedaría:

# Ingrese el token BOT devuelto por BotFather                                                                                               
TELEGRAMTOKEN="780756347993:AAEhwrthws_Y9SOdPMl2NI2jM0oyQX0DMg"

# Ingrese el ID del usuario maestro, para notificaciones de uso                                                                               
PERSONALID="68690969"

# Ruta donde está nuestra carpeta .batbot en nuestro servidor, Raspberry,...                                       
BATBOTUSR="$HOME/BaTbot/.batbot"

Por defecto, BaTbot revisará cada 5 segundos si hay un nuevo mensaje. Esta opción la podemos personalizar poniendo el tiempo en segundos que deseemos:

# revisar nuevos mensajes cada X segundos:                                                                                                  
CHECKNEWMSG=5

Añadiendo Nuestro ID al listado usuarios habilitados al uso del Bot

Ahora vamos a añadir nuestro ID de usuario, al listado de usuarios que tienen permisos para utilizar el Bot. Para ello, accederemos al archivo allowedusers :

nano ~/BaTbot/.batbot/allowed_users

Borraremos los números de ID que vienen de ejemplo y añadiremos nuestro ID o todos aquellos ID que tendrán permiso para poder utilizar el Bot.

Recuerda que si no ponemos nuestro ID en esta lista, no podremos interactuar con nuestro Bot.

Ejecutar el Bot

Ahora volveremos a la carpeta bin y ejecutaremos ./batbot

cd ~/BaTbot/bin/
./batbot

Ya puedes enviar mensajes al Bot. Escribe el comando /menu, para que te muestre el menú.

En la terminal podremos ver todos los mensajes que recibe el Bot en tiempo real y que usuarios lo envían.

Configurar un menú y añadir comandos

Esta parte del script, es donde podremos añadir comandos para que los ejecute nuestro Bot.

Aquí hay algunos de ejemplo, pero si no los vas a utilizar, elimínalos de la lista. Deja solo aquellos comandos que utilizaras.

Para recordar los comandos, crea el comando llamado por ejemplo /menu y añade todos los comandos disponibles.

El Bot solo reconocerá como comando las palabras que empiezan por /.

declare -A botcommands=(
        ["/start"]='exec userlist @USERID:@FIRSTNAME@LASTNAME'
        ["/myid"]='echo Tu ID es: @USERID'
        ["/myuser"]='echo Tu nombre de usuario es: @USERNAME'
        ["/ping ([a-zA-Z0-9]+)"]='echo Pong: @R1'
        ["/uptime"]="uptime"
        ["/add ([0-9]+)"]='exec admadduser @USERID @R1'
        ["/del ([0-9]+)"]='exec admdeluser @USERID @R1'
        ["/lista"]='exec admlistuser @USERID'
        ["/run (.*)"]="exec @R1"
        ["/docker_nginx_start"]="docker stop nginx"
        ["/docker_nginx_stop"]="docker start nginx"
        ["/menu"]="echo -e Bienvenido a Mi Bot\n/myid \n/myuser \n/uptime \n/run \n/ping \n\nDockers:\n/docker_nginx_start \n/docker_nginx_stop \n\n\n/menu")

En el chat del Bot, si ejecutamos el comando /menu, nos contestará:

Bienvenido a Mi Bot
/myid 
/myuser 
/uptime 
/run 
/ping 

Dockers:
/docker_nginx_start 
/docker_nginx_stop 


/menu

Si envías el comando /run, sería lo mismo que si estuvieras escribiendo en tu terminal

Comandos simples

Podemos ejecutar comandos simples como por ejemplo:

["/hello"]="echo Hola"    
["/uptime"]="/usr/bin/uptime"
["/disks"]="/bin/df -h"
["/auth ([a-zA-Z0-9]+)"]="/usr/local/bin/auth.sh @R1"

Variables:

Puedes usar variables! por ejemplo:

["/hello"]="echo Hola @FIRSTNAME, encantado de conocerte :)"

Lista de Varibales

Regex group extract

Comando con expresiones regulares

También puedes configurar un comando con argumentos, por ejemplo: "/ping 1234". Todos los argumentos pueden ser expresiones regulares, por ejemplo:

["/ping ([0-9]+)"]="echo Pong: @R1"

["/blacklist ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"]="/sbin/iptables -A INPUT -s @R1 -j DROP"

["/whois ([a-zA-Z0-9\.\-]+)"]="/usr/bin/whois @R1"

["/host ([a-zA-Z0-9\.\-]+)"]="/usr/bin/host @R1"

Enviar mensaje

Cuando BaTbot se está ejecutando, puedes enviar un mensaje utilizando el ID del usuario, usando el comando .msg directamente en la consola.

.msg <ID> <MENSAJE>

Por ejemplo:

[chat 110440209, from  110440209] <theMiddle - Andrea Menin> hi bot :)
.msg 110440209 No utilices más mi Bot!!!

Conclusiones

Hay muchas mas opciones que podemos configurar desde el propio Bot, como añadir usuarios al listado desde el propio chat del Bot, etc… La verdad es que no he tenido suficiente tiempo de hacer todas las pruebas. El Objetivo de Gestionar nuestro servidor remotamente, cumple perfectamente.

Si quieres hacer pruebas, la carpeta que hay en el repositorio .batbot, donde esta el archivo allowedusers, tendría que estar en al carpeta $HOME/.batbot. Yo en el Post lo he dejado en la misma carpeta igual que el repositorio, para tener todos las carpetas en el mismo lugar.


Publicado por Angel el jueves 11 abril del 2019



También te puede interesar:




Powered by org-bash-blog

Writing in orgmode whith emacs

Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.