Descargar Torrent con Transmission y bot de Telegram

Compartí con amigos:

Hola amigos de #MakersArgentina y #RaspberryPiArgentina, hoy vamos a tener una nueva forma de «Torrentear como  un Campeón» gracias a este tutorial que denominamos: «Descargar Torrent con Transmission y bot de Telegram»

descargartorrenttransmissiontelegram makersargentina

Bien en primer lugar sea que tengas una raspberry o una pc con linux vamos a necesitar instalar #Trasnmission que justamente es un cliente de descarga de torrent como ya hemos visto en otra oportunidad a deluge

Como siempre recordamos tener nuestro sistema actualizado, en este caso estoy instalando en una raspberry pi 3 b+ con raspbian buster actualizado.

sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get dist-upgrade

Luego vamos a instalar #Transmission

sudo apt-get install transmission-daemon
sudo apt-get install transmission-common
sudo apt-get install transmission-cli

en el primer comando debería instalar los segundos dos pero por si acaso falla tiramos los tres comandos como se ve anteriormente ya que si esta instalado en su ultima versión nos va a indicar que ya esta y nada mas…

Ahora vamos a necesitar parar el servicio (demonio) de transmission para hacer algunas configuraciones básicas:

sudo service transmission-daemon stop

Las configuraciones se hacen editando el archivo:

sudo nano /etc/transmission-daemon/settings.json

Mínimamente debemos tener estos datos configurados:

«rpc-whitelist»: «»    lo vamos a dejar asi: «rpc-whitelist»: «127.0.0.1,ipdelapc»

«rpc-whitelist-enabled»: true, cambiamos true por false

Tambien tenemos estos dos campos que son importantes por si vamos a querer descargar en algun disco externo:

«download-dir»: «»,

«incomplete-dir»: «»,

De todos modos los ultimos dos no lo hagan asi vemos que funciona todo bien, siempre se puede detener el demonio y cambiar la configuración. en definitiva queda el archivo con estos dos campos cambiados:

«rpc-whitelist»: «127.0.0.1,192.168.1.3»,
«rpc-whitelist-enabled»: false,

Ahora vamos a iniciar el servicio nuevamente:

sudo service transmission-daemon start

En el navegador de la pc o raspberry vamos a abrir la dirección de la ip seguido del puerto 9091 y nos va a pedir un usuario y una contraseña la cual es transmission para ambas cosas.

Pueden poner a descargar un torrent para ver que todo funcione bien antes de seguir!

transmission descargando makersargentina

A continuación te voy a dejar dos links donde podes aprender como crear un bot y cómo hacer algunas interacciones para que cuando te pongas con el código no estés tan sin conocimiento previo o en bolas (como decimos en argentina).

Raspberry controlado con Bot de Telegram

Enviar fotos y videos con Bot de Telegram

Ahora si el código para nuestro bot obsequio del amigo @pochoclero de la comunidad #MakersArgentina quien avisa que se puede mejorar

import telegram
import subprocess
from telegram.error import NetworkError, Unauthorized
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters, RegexHandler,
                          ConversationHandler)
import threading

class bot():
  def __init__(self):
    self.TOKEN='TOKEN'
    self.tu_id='TU ID CHAT'
    self.user='Usuario del transmission' #Usuario del transmission
    self.psw='Pasword del transmission' #Pasword del transmission



  def separa(self,mensaje):


    comando=''
    parametros=''

    try:
      c=False
      for i in mensaje.decode('utf-8'):
        if c==False:
          if i != ':':
            comando += i
          else:
            c=True
        else:
          parametros += i
      if len(parametros)>0:
        parametro=[]
        temp=''
        parametros+=','
        for i in parametros:
          if i !=',':
            temp+=i
          elif i==',':
            parametro.append(temp)
            temp=''
      else:

        parametro=[]

      return comando , parametro
    except Exception as e:
      print(e) 
  
  def lista_torrent(self,user,psw):
    mensaje=''

    p=subprocess.check_output("transmission-remote -n '"+ user +":"+ psw +"' -l",shell=True)
    
    

    return p.decode()
    
  def torrent(self,user,psw,link):
    c="transmission-remote -n '"+ user +":"+ psw +"' -a " + link

    p=subprocess.check_output(c,shell=True)





    if p.decode().find('succes')!=-1:
      return 'Descargando...'
    else:
      return 'Se produjo un error al descargar: ' + str(p.decode())

      
  def comandos(self,mensaje,id_chat):


    comando=''
    parametros=[]
    comando,parametros=self.separa(mensaje)
    comando=comando.lower()
    respuesta=''
    if comando=='ping':
      respuesta='Pong'

    elif comando=='descarga':

      if len(parametros)>0:
        link=parametros[0]
        respuesta=self.torrent(self.user,self.psw,link)
      else:
        respuesta='Debe proporcionar un magnet o un link al torrent'
        

    elif comando=='lista torrent':
      respuesta=self.lista_torrent(self.user,self.psw)

    else:
      respuesta='Ningun comando es valido'
    print('Enviando respuesta')
    telegram.Bot(self.TOKEN).send_message(id_chat,respuesta)
        


  def texto(self,bot,update):
    print("Nuevo Mensaje")
    nombre = update.message.from_user.first_name
    apellido=update.message.from_user.last_name
    mensaje=update.message.text
    id_user=update.message.from_user.id
    id_chat=update.message.chat.id
    print(str(id_chat)+ " dijo: " + str(mensaje))
    if id_chat==self.tu_id:
            
      mensaje=mensaje.encode("utf-8")


      
      argumentos=[mensaje,self.tu_id]
      hilo_respuesta=threading.Thread(name="respuesta",target=self.comandos,args=argumentos)
      hilo_respuesta.start()
    

  def main(self):
    print('Bot iniciado')
  
    updater = Updater(self.TOKEN)	#Recibe actualizaciones de mensajes
    dp = updater.dispatcher		#Dispatcher que maneja las actualizaciones y las envía a los controladores
    dp.add_handler(MessageHandler(Filters.text, self.texto)) #Controlador para manejar los mensajes de texto
    #dp.add_handler(MessageHandler(Filters.document,self.archivo)) #Controlador para manejar archivos

    updater.start_polling()		#Inicia actualizaciones
    updater.idle()				#Bloquea hasta que se reciba una de las señales y detenga el actualizador


n=bot()
n.main()

Luego con iniciarlo como lo vieron en el resto de los tutoriales ya tendremos nuestro bot funcionando y podremos mandarle el link del torrent para que la descarga se haga automáticamente.

Actualización 19-01-2020

Se mejoro el código del bot asi que si venis leyendo los tutoriales que con la comunidad estamos entregando seguramente te va a gustar:

bot torrent transmission telegram

 

@bot.message_handler(func=lambda message: 'link' in message.text.lower() and 'magnet:?' in message.text.lower() and message.chat.id == ownner)
        def descargar(message):
            partes = message.text.split(' ')
            # bot.reply_to(message, "descargar()\n\nPartes: {}".format(len(partes)))
            if len(partes) == 2:
                if partes[0].lower() == 'link' and 'magnet:?' in partes[1]:
                    descarga = '"{}"'.format(partes[1])
                    cmd = 'transmission-remote -n transmission:transmission -a {}'.format(descarga)
                    os.system(cmd)
                    bot.reply_to(message, "✅ Descargando Torrent")

Les dejo la imagen y el codigo asi pueden dejarlo bien alineado por las dudas y recuerden que donde dice transmission:transmission ahi deben poner su usuario y contraseña de la web de descarga de transmission.

 

Compartí con amigos:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *