Giter Club home page Giter Club logo

spoti-bot's Introduction

Spoti-bot

Qué es

Un bot de telegram que intercepta URLs de Spotify en un grupo y añade los tracks a una lista de reproducción compartida.

Cómo funciona

  1. Necesitas escribir un fichero .env con la información relevante, como el TELEGRAM_BOT_TOKEN o las distintas variables de Spotify.

  2. Se recomienda instalar un entorno virtual de Python para gestionar las dependencias del proyecto, las cuales se pueden instalar mediante:

    pip install -r requirements.txt
    

    2.1. Para añadir un paquete nuevo se debe añadir primero a requirements.in, posteriormente ejecutar

    pip-compile
    

    Y posteriormente instalarlo de manera habitual con pip.

  3. Una vez está todo preparado se puede ejecutar el bot en local

    python3 bot.py --local
    

Deploy en Heroku

Para que el bot funcione adecuadamente se necesita tener un entorno cloud, en este caso la version gratuita de Heroku ofrece todo lo necesario.

Variables de entorno

Es necesario configurar de nuevo las variables de entorno que se usan en local y NO ESTÁN bajo control de versiones por motivos de seguridad mediante las herramientas que ofrece Heroku, tanto por CLI como por interfaz web.

Buildpacks

Son scripts que se ejecutan cuando se realiza el despliegue de la aplicación, para este proyecto se han utilizado:

  1. https://github.com/heroku/heroku-buildpack-chromedriver
  2. https://github.com/heroku/heroku-buildpack-google-chrome

Son necesarios para el testeo automático de Selenium a la hora de obtener el token OAuth2 de Spotify.

Aplicaciones extenas

Hay un addon instalado que realiza ping 2 veces cada minuto para mantener viva la instancia del bot, es totalmente opcional pero en caso de que la instancia se encuentre apagada tardará unos segundos más en responder.

  1. https://elements.heroku.com/addons/newrelic

Plugins

Se ha instalado el plugin heroku-repo para reiniciar el desarrollo y que el código se pueda publicar en GitHub.

TODO's

Para una lista de las tareas pendientes, consultar https://github.com/javisenberg/spoti-bot/projects/1 y https://github.com/javisenberg/spoti-bot/issues/.

spoti-bot's People

Contributors

javi-aranda avatar

Watchers

 avatar

spoti-bot's Issues

Canción duplicada

Buenas tardes,

Ha de comprobarse si la cancion ya está en la lista avisando el bot de ello.

Un saludo.

Notificaciones del bot al añadir canción en la lista de reproducción

Buenas tardes,

Sería muy interesante que el bot detecte si se añade una canción a la lista de reproducción directamente desde Spotify. De esta forma se pueden usar comandos de voz para añadir la música sin tener que complicarse en mandar el mensaje con el enlace a Telegram.

Se podría revisar que el que añade la canción sea alguien diferente al bot para evitar un bucle infinito.

Un saludo.

Opción de votar música

Buenas tardes,

Sería interesante que el bot de alguna forma añadiese un sistema de votaciones.

Este podría ser que al enviar una canción este eliminase ese mensaje para mandarlo el añadiendo el que la ha compartido y un botón con un 🔥 con un contador.

De esta forma nos evitamos la negatividad.

Se podría añadir una top list que aparezca si se le pide al bot.

Un saludo.

Error en el proyecto

Traceback del log de Heroku

2021-05-21T15:46:51.719070+00:00 app[web.1]: ERROR:telegram.ext.dispatcher:No error handlers are registered, logging exception.

2021-05-21T15:46:51.719071+00:00 app[web.1]: Traceback (most recent call last):

2021-05-21T15:46:51.719071+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telegram/ext/dispatcher.py", line 442, in process_update

2021-05-21T15:46:51.719071+00:00 app[web.1]:     handler.handle_update(update, self, check, context)

2021-05-21T15:46:51.719072+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telegram/ext/handler.py", line 160, in handle_update

2021-05-21T15:46:51.719072+00:00 app[web.1]:     return self.callback(update, context)

2021-05-21T15:46:51.719072+00:00 app[web.1]:   File "bot.py", line 24, in find_and_send_tracks

2021-05-21T15:46:51.719073+00:00 app[web.1]:     api = SpotipyManager()

2021-05-21T15:46:51.719074+00:00 app[web.1]:   File "/app/spotipy_manager.py", line 19, in __init__

2021-05-21T15:46:51.719074+00:00 app[web.1]:     self.sp = spotipy.Spotify(auth=self.get_oauth_token())

2021-05-21T15:46:51.719074+00:00 app[web.1]:   File "/app/spotipy_manager.py", line 48, in get_oauth_token

2021-05-21T15:46:51.719074+00:00 app[web.1]:     token = parse_qs(url.fragment)['access_token'][0]

2021-05-21T15:46:51.719076+00:00 app[web.1]: KeyError: 'access_token'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.