[Code-Pills] Script para levantar sorteos en Twitch + Streamlabs (en Python 3)

Con conteo de tiempo de visualizaci贸n. Y pasando por alto las limitaciones de API 馃ぃ.

Hace un tiempo decid铆 hacer un concurso para celebrar el hecho que hab铆a logrado el gran hito del afiliado en Twitch. La idea el concurso era simple: quienes me siguieran en el canal, pod铆an unirse al concurso a trav茅s del comando !sorteo, y donde mientras m谩s horas pase viendo el canal m谩s oportunidades tendr铆a de ganar; luego de todo obtendr铆a una lista que luego ser铆a parte de una gran t贸mbola. B谩sicamente un programa de fidelizaci贸n, un win-win para mi (como streamer) y los viewers.

En el papel sonaba simple: Streamlabs me ayudar铆a a la gesti贸n, a trav茅s de los m贸dulos Giveaway y Loyalty, donde todo se juntar铆a para obtener la lista de participantes.

El tema que estos m贸dulos no conversan entre s铆, o sea si quer铆a hacer que el usuario tenga m谩s tickets a partir del tiempo, no era posible. Debido a esto es que tom茅 la decisi贸n de hacer un script que tomase toda la informaci贸n de las APIs y las juntara para obtener la lista.

La parte de obtener la lista de followers fue un tanto truculenta dado que la API de Twitch no se explica muy bien - gracias a Stackoverflow por las pistas. La parte de la API de Streamlab fue la gran piedra: para usar la API de Loyalty deb铆a solicitar un permito de forma manual, el cual no me aseguraba la autorizaci贸n, ya que no ten铆a una aplicaci贸n publica para demostrar su uso.

Como soluci贸n al problema es que us茅 directamente las API que usa el dashboard web de Streamlabs para acceder la informaci贸n; a pesar de la falta de documentaci贸n es bastante f谩cil de comprender.

Luego de definitivamente sortear todas las dificultades me puse manos a la obra. El c贸digo original es de marzo de 2021, pero la versi贸n que ver谩n tiene un par de modificaciones para hacerlo m谩s configurable a las necesidades.

Antes de todo y se ir al c贸digo, se entiende que si est谩s aqu铆 tendr谩s por lo menos una cuenta de Twtich y potencialmente una cuenta de Streamlabs. Si no las tienes, empieza creando una cuenta en Twitch y luego ocupala para iniciar sesi贸n en Streamlabs, y enlaza la informaci贸n de tu canal.

Necesitamos extraer unos valores desde ambos servicios. Para el caso de las credenciales de Twitch:

  1. Ve a https://dev.twitch.tv/console e inicia sesi贸n con tus credenciales.
  2. En el dashboard, crea una extenci贸n has click en Create Extension. No es necesario crear una aplicaci贸n.
  3. Dale un nombre a tu extensi贸n.
  4. La extensi贸n ya est谩 creada. Toma la clave de Twitch API Client ID., es la que usaremos m谩s tarde.

Para el caso de Streamlabs necesitamos usar un par de m贸dulos antes de obtener la clave:

  1. Ve a https://streamlabs.com/dashboard e inicia sesi贸n con tus credenciales de Twitch. Si quieres ocupar otra cuenta, aseg煤rate de tener asociado el canal de Twitch que quieres usar.
  2. Asegura que el bot de Streamlabs tiene acceso de moderador. Si no, pone /mod Streamlabs en el chat de tu canal.
  3. En la secci贸n Cloudbot, ve al m贸dulo Loyalty. Activa el m贸dulo y has la configuraci贸n seg煤n tu gusto, asignado puntos por tiempo y acciones.
  4. Ve al m贸dulo Giveaways, y crea un nuevo sorteo con el bot贸n Add Giveaway, del tipo Custom. Dale un nombre, dale un timer si quieres que el cierre sea autom谩tico; en Advanced puedes definir si quieres que solo los followers puedan unirse. No te preocupes por los puntos, dado que no ser谩n parte del script. Guarda y activa el concurso.

Con todo creado necesitamos obtener las claves de Streamlabs:

  1. Usando la consola del navegador (se activa pulsando la tecla F12) vamos a la secci贸n de Red (o network).
  2. Ingresamos al m贸dulo Giveaways. Si ya estabas en 茅l, ve a otro m贸dulo y vuelve a entrar.
  3. Dentro de las consultas, revisamos aquella que tenga por URL https://streamlabs.com/api/v5/giveaway/active , es del tipo GET.
  4. Obtenemos el valor del par谩metro token, la usaremos m谩s tarde.
  5. En la misma consulta, en la secci贸n Cookies tomamos los valores de las cookies slsid y XSRF-TOKEN, ambas las usaremos m谩s tarde.

Ahora a lo que venimos...

El c贸digo

El script lo hice en base a Python 3.8.5, as铆 que no aseguro su funcionamiento en versiones inferiores. En mi caso lo hice funcionar en dicha versi贸n de Python, bajo el kernel de Ubuntu en el WSL 1 (ambiente virtual de Windows 10).

Antes de todo, es necesario instalar un par de dependencias: requests y dotenv. Podemos instalarlas a mano o bien con Pip con el comando pip3 install -r requirements.txt

Por otro lado es necesario definir algunos valores en la variables de entorno dentro del archivo .env dentro de la misma carpeta donde pondremos el c贸digo.

  • TWITCH_CLIENT_ID: ID de la extensi贸n de Twitch.
  • TWITCH_CHANNEL_ID: ID de nuestro canal. Podemos obtener ese valor con el endpoint Get Users, o bien inspeccionar las consultas en el dashboard de nuestro canal y obtener el par谩metro n煤mero que acompa帽a a las request hacia https://api.twitch.tv/v5/.
  • STREAMLABS_GIVEAWAY_TOKEN: Es token de Streamlabs asociado a nuestro concurso.
  • STREAMLABS_COOKIE: La cookie XSRF-TOKEN de Streamlabs.
  • STREAMLABS_SLSID: La coockie SLSID de Streamlabs.

Finalmente, el c贸digo.

El c贸digo b谩sicamente realiza varias request a diversas API y junta la informaci贸n. Espec铆ficamente a la API de Twitch para obtener la lista de followers, y la API de Streamlabs para obtener los usuarios en el concurso y la informaci贸n del sistema de lealtad. Con todos los datos, comprueba cuales de los usuarios participantes del sorteo son efectivamente seguidores del canal, y sobre esa lista a帽ade los puntos del sistema de fidelidad.

El c贸digo contiene algunos par谩metros que podemos usar.

  • --loyalty: Usar el sistema de lealtad en Streamlabs, para usar los puntos asociados. Si no est谩 presente todos los usuarios quedan con el puntaje por defecto (1).
  • --ltime: Para el sistema de letaltad, ocupar el tiempo de visualizaci贸n como sistema de puntos.
  • --lmin: M铆nimo de puntos de otorgar.
  • --lmax: M谩ximo de puntos a otorgar.
  • --outfolder: Cambiar el nombre de la carpeta de los archivos de salida.

Una vez ejecutado obtendremos varios archivos de salida.

  • list_users_error.json: lista de usuarios con errores en el cruce de informaci贸n.
  • list_users_giveaway.txt: lista resultante de usuarios del concurso.
  • streamlabs_loyalty.json: respuesta de la API de Streamlabs con la informaci贸n del m贸dulo de lealtad.
  • list_users_giveaway.json: lista de la informaci贸n desde las API, resultante de usuarios del concurso.
  • streamlabs_entries.json: respuesta de la API de Streamlabs con la informaci贸n del m贸dulo de consursos.
  • twitch_followers.json: respuesta de la API de Twitch con la informaci贸n de los seguidores.

Con todos estos archivos podemos hacer gr谩ficas, o usarlo en servicios de sorteo como AppSorteos o Wheel of names.

La gracia de esto es que podemos adaptarlos para sorteos a largo plazo en funci贸n de la fidelidad, o bien usarlo para un sorteo breve para solo quienes se unan en el momento - aunque en dicho caso el m贸dulo Giveaway puede ser suficiente por si solo. 馃憣