Crea un Bot en Telegram para descargar archivos a tu Pi con solo poner Link o Archivo de Telegram

Sección Unicamente para Tutoriales y Guías
Avatar de Usuario
Kike
Administrador
Administrador
Mensajes: 2311
Registrado: 13 May 2016, 18:53
Ubicación: Islas Baleares - Menorca
Agradecido: 47 veces
Agradecimiento recibido: 175 veces
Contactar:

Hola a Todos, Este bot y la base del tutorial ha sido redactada por el usuario de Telegram @Charlio99
exclusivamente para ForoRaspberry.es :avergonzado

Os voy a enseñar a crear un Bot de Telegram alojado en nuestra Placa Pi, que remotamente poniendo un Link o Archivo de Telegram, se descargue a una carpeta de nuestra Pi.
Ejemplo de Comandos:
Descarga archivo desde la dirección que se ponga:

Código: Seleccionar todo

/descargar_link
Descarga archivo alojado en Telegram:

Código: Seleccionar todo

/descargar
Primero de todo vamos a configurar correctamente nuestra Raspberry Pi, Orange Pi o similares con todas las dependencias para poder continuar con el proceso.

El bot esta programado en python, por lo tanto vamos a tener que instalar python (específicamente python2, NO python3)

Para instalar python, abrimos el terminal SSH y escribimos el comando:

Código: Seleccionar todo

sudo apt-get install python
Ahora lo siguiente que vamos a hacer es instalar una dependencia del instalador de la API de pwrtelegram (una variante de la API de telegram con mejoras) y para ello escribimos:

Código: Seleccionar todo

sudo apt-get install python-setuptools
Bien ahora ya lo tenemos todo listo para instalar la API* de pwrtelegram y el bot
*Por si alguien no lo sabe: la API de pwrtelegram hace de intermediario para que el bot programado en python pueda "entender" todo lo que recibe y envía al servidor de telegram.
Bueno, dicho esto, procedemos a instalar la API con estos tres comandos en el Terminal SSH:

Código: Seleccionar todo

git clone https://github.com/pwrtelegram/pyTelegramBotAPI

Código: Seleccionar todo

cd pyTelegramBotAPI

Código: Seleccionar todo

sudo python setup.py install
Ahora tenemos que crear una carpeta donde pondremos el bot y ahí se descargarán todos los archivos
Para crear e ir la carpeta vamos a introducir los siguientes comandos en el Terminal SSH:

Código: Seleccionar todo

mkdir DescargasTG

Código: Seleccionar todo

cd DescargasTG
Y para descargar el bot introducimos el siguiente comando:

Código: Seleccionar todo

wget https://www.fororaspberry.es/download/bot.py
Para crear la cuenta del bot, entramos en telegram y abrimos un chat con @BotFather donde pondremos el siguiente comando:

Código: Seleccionar todo

/newbot
A continuación nos pedirá el nombre que le queremos dar al bot y el nombre de usuario que le queréis dar (tiene que acabar en "bot"

Y cuando acabemos nos dará un token que tenemos que copiarlo, ir al archivo del bot que hemos descargado y reemplazar la palabra TOKEN por el token que os ha dado el bot.
photo_2016-08-17_22-32-46.jpg
Y para que el bot solo funcione con vuestro usuario y que nadie se pueda descargar archivos en vuestra Raspberry Pi, Orange Pi o vuestro servidor, abrimos telegram y le hablamos a @get_id_bot y le enviamos el comando:

Código: Seleccionar todo

/my_id
Nos dará nuestro ID de Telegram, lo copiamos y lo sustituimos en el archivo del bot donde pone ID_ADMIN

Después de haber hecho esto, guardamos el archivo y volvemos al terminal

Ahora ya tenemos todo listo para ejecutar el bot; para ejecutar el bot hacemos lo siguiente en el Terminal SSH:

Código: Seleccionar todo

python bot.py
Y LISTO!! Ya tenemos nuestro bot funcionando
photo_2016-08-17_22-35-15.jpg
NOTA:
Los archivos (NO Links) que se le envían al bot no pueden exceder los 1,5GB

NOTA2:
Si queremos que el bot no se cierre al cerrar el terminal o la sesión ssh haremos esto en el terminal:

Código: Seleccionar todo

sudo apt-get install screen
Y a partir de ahora para ejecutar el bot usaremos este comando:

Código: Seleccionar todo

screen python bot.py
Si lo puedes soñar, lo puedes hacer
Avatar de Usuario
Haru Ijima
Pi Beta
Pi Beta
Mensajes: 108
Registrado: 14 Jun 2016, 18:29
Ubicación: Granada
Agradecido: 0
Agradecimiento recibido: 1 vez
Contactar:

Que cosas mas chulas se pueden hacer!
Haru - Desarrollador de aplicaciones web

Código: Seleccionar todo

while (true) {
    echo 'Holiiiii';
}
[/size]
Avatar de Usuario
Lucifer
Pi Omega
Pi Omega
Mensajes: 40
Registrado: 16 May 2016, 15:01
Agradecido: 0
Agradecimiento recibido: 20 veces

Muchas gracias kike

Enviado desde mi SM-G900F mediante Tapatalk
Avatar de Usuario
xxmonti
Pi Master
Pi Master
Mensajes: 257
Registrado: 19 May 2016, 10:05
Agradecido: 0
Agradecimiento recibido: 0

Genial :) Mis dies crack
Imagen
Angel_BCN
Pi Newbie
Pi Newbie
Mensajes: 1
Registrado: 14 Ago 2016, 11:14
Agradecido: 0
Agradecimiento recibido: 0

Excelente tutorial Kike
Avatar de Usuario
LaCuota
Pi Alpha
Pi Alpha
Mensajes: 21
Registrado: 29 Jun 2016, 12:30
Agradecido: 0
Agradecimiento recibido: 0

Voy al lio, gracias.
Avatar de Usuario
xxmonti
Pi Master
Pi Master
Mensajes: 257
Registrado: 19 May 2016, 10:05
Agradecido: 0
Agradecimiento recibido: 0

1) Tengo un usb montado en /media/usb0, y quiero que se me descarguen los archivos de telegram alli.

La carpeta DescargasTG se puede crear en el usb y meter ahi el bot.py??
Edito: Me autorespondo, si se puede :?:

2) Como se hace para que el bot se autoarranque al encender la pi?
Imagen
Avatar de Usuario
Haru Ijima
Pi Beta
Pi Beta
Mensajes: 108
Registrado: 14 Jun 2016, 18:29
Ubicación: Granada
Agradecido: 0
Agradecimiento recibido: 1 vez
Contactar:

xxmonti escribió:1) Tengo un usb montado en /media/usb0, y quiero que se me descarguen los archivos de telegram alli.

La carpeta DescargasTG se puede crear en el usb y meter ahi el bot.py??
Edito: Me autorespondo, si se puede :?:

2) Como se hace para que el bot se autoarranque al encender la pi?
Seria interesante que pongas como hacerlo para los que saben menos y que @Kike lo añada al tuto :D
Haru - Desarrollador de aplicaciones web

Código: Seleccionar todo

while (true) {
    echo 'Holiiiii';
}
[/size]
Avatar de Usuario
xxmonti
Pi Master
Pi Master
Mensajes: 257
Registrado: 19 May 2016, 10:05
Agradecido: 0
Agradecimiento recibido: 0

@Haru Ijima Pense que quedaba claro XDD

Simplemente creas el directorio en el usb conectado, para ello:

1) Miras donde esta montado tu usb

Código: Seleccionar todo

df -h
En mi caso estaba en /media/usb0

2) Creas la carpeta alli

Código: Seleccionar todo

mkdir /media/usb0/DescargasTG
3) Entras en la carpeta

Código: Seleccionar todo

cd  /media/usb0/DescargasTG
Y a partir de aqui sigues el tutorial de @Kike
Imagen
Charlio99
Pi Newbie
Pi Newbie
Mensajes: 1
Registrado: 03 Ago 2016, 19:29
Agradecido: 0
Agradecimiento recibido: 0

xxmonti escribió:1) Tengo un usb montado en /media/usb0, y quiero que se me descarguen los archivos de telegram alli.

La carpeta DescargasTG se puede crear en el usb y meter ahi el bot.py??
Edito: Me autorespondo, si se puede :?:

2) Como se hace para que el bot se autoarranque al encender la pi?
Ahora mismo no sabría decirte ya que uso arch linux y probablemente el método sea distinto. Lo buscaré y kike lo actualizará en el post :guiño2

PD: Adelanto que en breve habrá una nueva versión del bot con novedades bastante interesantes
Avatar de Usuario
wat3r
Pi Omega
Pi Omega
Mensajes: 97
Registrado: 16 Ago 2016, 06:49
Agradecido: 0
Agradecimiento recibido: 1 vez

Bueno para hacer arrancar el programa o el Bot en el inicio de la Raspberry y suponiendo que el archivo bot.py está alojado en /home/pi, debemos crear un script con el comando.

Código: Seleccionar todo

sudo nano /etc/init.d/telegram_bot
En el debemos escribir:
#! /bin/sh
# /etc/init.d/telegram_bot

### BEGIN INIT INFO
# Provides: telegram_bot
# Required-Start: $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Arranque automático del Bot de telegram
# Description: Script para arrancar el bot
### END INIT INFO


# Dependiendo de los parámetros que se le pasen al programa se usa una opción u otra
case "$1" in
start)
echo "Arrancando el Bot"
# Aquí hay que poner el programa que quieras arrancar automáticamente
/usr/bin/python /home/pi/bot.py
;;
stop)
echo "Parando el Bot"
killall python
;;
*)
echo "Modo de uso: /etc/init.d/telegram_bot {start & | stop}"
exit 1
;;
esac

exit 0
Luego le damos permisos

Código: Seleccionar todo

sudo chmod 755 /etc/init.d/telegram_bot
Probamos si funciona

Código: Seleccionar todo

sudo /etc/init.d/telegram_bot start
Y para terminar habilitamos el arranque automático

Código: Seleccionar todo

sudo update-rc.d telegram_bot defaults
Saludos
Última edición por wat3r el 20 Ago 2016, 02:05, editado 2 veces en total.
Avatar de Usuario
Kike
Administrador
Administrador
Mensajes: 2311
Registrado: 13 May 2016, 18:53
Ubicación: Islas Baleares - Menorca
Agradecido: 47 veces
Agradecimiento recibido: 175 veces
Contactar:

wat3r escribió:Bueno para hacer arrancar el programa o el Bot en el inicio de la Raspberry y suponiendo que el archivo bot.py está alojado en /home/pi, debemos crear un script con el comando.

Código: Seleccionar todo

sudo nano /etc/init.d/telegram_bot
En el debemos escribir:
#! /bin/sh
# /etc/init.d/telegram_bot

### BEGIN INIT INFO
# Provides: telegram_bot
# Required-Start: $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Arranque automático del Bot de telegram
# Description: Script para arrancar el bot
### END INIT INFO


# Dependiendo de los parámetros que se le pasen al programa se usa una opción u otra
case "$1" in
start)
echo "Arrancando el Bot"
# Aquí hay que poner el programa que quieras arrancar automáticamente
/usr/bin/python /home/pi/bot.py
;;
stop)
echo "Parando el Bot"

;;
*)
echo "Modo de uso: /etc/init.d/telegram_bot {start|stop}"
exit 1
;;
esac

exit 0
Luego le damos permisos

Código: Seleccionar todo

sudo chmod 755 /etc/init.d/telegram_bot
Probamos si funciona

Código: Seleccionar todo

sudo /etc/init.d/telegram_bot start
Y para terminar habilitamos el arranque automático

Código: Seleccionar todo

sudo update-rc.d telegram_bot defaults
Saludos


Enviado desde mi SM-G900F mediante Tapatalk
Muchisimas gracias maestro!!!!! Me ahorraste trabajo!!!
Te edité el mensaje para dejarlo mas "bonito" :victoria
Si lo puedes soñar, lo puedes hacer
Avatar de Usuario
wat3r
Pi Omega
Pi Omega
Mensajes: 97
Registrado: 16 Ago 2016, 06:49
Agradecido: 0
Agradecimiento recibido: 1 vez

Muchisimas gracias maestro!!!!! Me ahorraste trabajo!!!
Te edité el mensaje para dejarlo mas "bonito" :victoria
De nada salao y gracias por la edición. Es lo que tiene escribir desde tapatalk.

Enviado desde mi SM-G900F mediante Tapatalk
Última edición por wat3r el 19 Ago 2016, 22:58, editado 1 vez en total.
Avatar de Usuario
Haru Ijima
Pi Beta
Pi Beta
Mensajes: 108
Registrado: 14 Jun 2016, 18:29
Ubicación: Granada
Agradecido: 0
Agradecimiento recibido: 1 vez
Contactar:

@xxmonti Claro está, lo que me refiero es que para hacerlo mas asequible para la gente que no sepa mucho de comandos es mucho mejor documentarlo todo ^^ aun así, gracias :D
Haru - Desarrollador de aplicaciones web

Código: Seleccionar todo

while (true) {
    echo 'Holiiiii';
}
[/size]
Avatar de Usuario
wat3r
Pi Omega
Pi Omega
Mensajes: 97
Registrado: 16 Ago 2016, 06:49
Agradecido: 0
Agradecimiento recibido: 1 vez

Una aclaración el script lo he vuelto a editar para que podáis parar el bot con el comando

Código: Seleccionar todo

 sudo /etc/init.d/telegram_bot stop
para volver a arrancar el bot o lo podeis hacer reiniciando o con el comando

Código: Seleccionar todo

 sudo /etc/init.d/telegram_bot start &
usando & para poner el proceso en segundo plano y para que podais seguir mandando comandos por ssh

Otra cosa que he podido comprobar usando el bot. Yo tengo el bot.py en un disco duro externo en una carpeta /media/HDD/Telegram/bot.py. Si le digo al bot /descargar la descarga me la guarda en la carpeta donde está el programa osea /media/HDD/Telegram/ y si le digo /descargar_link lo descarga en /home/pi por defecto.
Avatar de Usuario
wat3r
Pi Omega
Pi Omega
Mensajes: 97
Registrado: 16 Ago 2016, 06:49
Agradecido: 0
Agradecimiento recibido: 1 vez

Un sencillo scrip para ejecutar el bot si esté se cerrara por algún motivo.

viewtopic.php?f=41&t=430&p=2147#p2147
franmadrid
Pi Alpha
Pi Alpha
Mensajes: 26
Registrado: 23 Ago 2016, 07:30
Agradecido: 1 vez
Agradecimiento recibido: 0

Y tener un bot para descargar todos los archivos de un canal. OJO canal no un grupo. Hay un canal de libros tecnicos y me gustaría hacerlo. Entiendo que hay q tener raspbian en la pi3 con algún cliente de telegram (pregunta de novato)
Avatar de Usuario
Emiliete
Pi Alpha
Pi Alpha
Mensajes: 11
Registrado: 16 May 2016, 15:27
Ubicación: Santa Cruz de Mudela
Agradecido: 0
Agradecimiento recibido: 1 vez
Contactar:

Buenas! Lo he creado y en el terminal, aparece que mi usuario se conecta, pero al enviar archivos, luego no se descargan en la carpeta. Por que puede ser??
Avatar de Usuario
wat3r
Pi Omega
Pi Omega
Mensajes: 97
Registrado: 16 Ago 2016, 06:49
Agradecido: 0
Agradecimiento recibido: 1 vez

franmadrid escribió:Y tener un bot para descargar todos los archivos de un canal. OJO canal no un grupo. Hay un canal de libros tecnicos y me gustaría hacerlo. Entiendo que hay q tener raspbian en la pi3 con algún cliente de telegram (pregunta de novato)
Para bajar los archivos de un grupo de telegram solo tienes que decirle al bot que se ponga en modo descarga

Código: Seleccionar todo

 /descargar
Luego pìllas los archivos de un grupo, que normalmente están si usas android le das alnombre del grup > multimedia > archivos. Y cuando veas los archivos que quieras descargar mantienes pulsado uno y luego pulsas en los que quieras descargar y sale arriba una flecha que significa reenviar, pues se lo reenvias al bot y el solito los descarga. Eso es lo que yo hago.
Emiliete escribió:Buenas! Lo he creado y en el terminal, aparece que mi usuario se conecta, pero al enviar archivos, luego no se descargan en la carpeta. Por que puede ser??
Si le dices al bot

Código: Seleccionar todo

 /descargar
Lo guarda en el directorio raiz /. por lo menos eso hace el mio
Si le dices

Código: Seleccionar todo

/descargar_link
Lo guarda en tu directorio personal /home/pi
Bueso
Pi Omega
Pi Omega
Mensajes: 78
Registrado: 22 Jul 2016, 10:57
Agradecido: 0
Agradecimiento recibido: 1 vez

Muy buen aporte.

Navegando un poco por Internet, se puede completar con funciones totalmente customizadas. Mi próximo objetivo es detectar cuando se ha apagado la Raspberry (mal o bien), para ello, mi idea es programar el envío de un mensaje en X segundos y cancelarlo justo antes de que se envíe, de forma que si en ese tiempo se ha apagado el equipo, no cancele el envío del mensaje y efectivamente llegue el mensaje. Sin embargo, aun no tengo claro si podré hacerlo así, o tendré que centrarme en la IP externa.

Por otro lado, me aparece este texto siempre que lanzo el bot. He probado varias cosas y soy incapaz de eliminarlo, alguna idea?

Código: Seleccionar todo

/usr/local/lib/python2.7/dist—packages/requests—2. l1.l—py2.7.egg/requests/packages/urllib3/util/ssl_.py:316: SNlMissingNarning: An I-ITTPS request has been made,
but the SNI (Subject Name Indication) extension to TLS is not available on thisplatform. This may cause the server to present an incorrect TLS certificate, whi
ch can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest
/security. html#snimissingwarning.SNlMissingWarning
/usr/local/lib/python2.7/dist—packages/requests—2.11.l—py2.7.egg/requests/packages/urllib3/util/ssl_.py:l22: InsecurePlatformwarning: A true SSLContext object i
s not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of P
ython to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security. html#insecureplat-formwarning.
InsecurePlat formNarning
Saludos!
Responder