Home Notificando inscritos da Twitch via Telegram
Post
Cancelar

Notificando inscritos da Twitch via Telegram

Twitch

Twitch é um site em que milhões de pessoas se reúnem diariamente para conversar, interagir e criar seu próprio conteúdo. Tem como principal atrativo as transmissões ao vivo, chamadas de lives, em que o bate-papo, chat, interage entre si e com o criador do conteúdo. No entanto, assim como em outras plataformas, as notificações aos inscritos podem atrasar ou até mesmo nunca chegar, deixando parte da audiência de fora das transmissões.

Telegram

Canais do Telegram são parecidos com grupos de conversas, com a diferença que somente os administradores podem falar. Um canal entrega a notificação para todos os inscritos simultaneamente, sem limite de quantidade, sendo ideal para grandes públicos1. Grupos, por exemplo, são limitados a 200.000 pessoas. Já os bots enviam apenas 30 mensagens por segundo2.

Integrando as notificações da Twitch ao Telegram

Aplicação na Twitch

O primeiro passo é a criação de uma aplicação na Twitch. Ela é importante para a obtenção dos dados da transmissão.

  1. Acesse dev.twitch.tv/console;
  2. Crie uma aplicação nova em Register Your Application;
  3. Preencha os campos:
    • Name: Nome de sua aplicação.
    • OAuth Redirect URLs: Preencha com http://localhost;
    • Category: Confidential.
  4. Salve os valores de Client ID e Client Secret.

Bot no Telegram

A função do bot é o envio da mensagem do canal. Seu nome ou @nome_de_usuário são irrelevantes, pois não serão vistos pelos inscritos.

  1. Fale com o @BotFather e crie um bot3;
  2. Salve o valor do Token;
  3. Caso o canal não exista, crie-o e salve seu ID4;
  4. Adicione o bot como administrador do canal.

Script Python

requirements.txt

Instale as bibliotecas abaixo:

1
2
pytelegrambotapi==4.21.0
requests==2.28.1

twitch2telegram

O script abaixo é responsável por verificar a existência de lives, gerar a thumbnail e fazer os envios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import datetime
import pytz
import requests
import telebot

## Twitch
client_id = "<Client ID da Twitch>"
client_secret = "<Client Secret da Twitch>"
streamer = "<Nome da Stream>"

## Telegram
token = "<Token do bot>"
destination = <ID de destino da mensagem>

## Ajustes
minutos = 5

## Verifica os dados da stream
def get_data():
    body = {
        'client_id': client_id,
        'client_secret': client_secret,
        'grant_type': 'client_credentials'
    }

    r = requests.post('https://id.twitch.tv/oauth2/token', body)
    keys = r.json();

    headers = {
        'Client-ID': client_id,
        'Authorization': 'Bearer ' + keys['access_token']
    }

    stream = requests.get(
        'https://api.twitch.tv/helix/streams?user_login='
        + streamer,
        headers=headers
    )
    stream_data = stream.json();

    try:
        return stream_data['data'][0]
    except IndexError:
        return None

## Gera a thumbnail
def get_thumbnail(live_data):
    thumbnail_url = live_data['thumbnail_url']
    thumbnail_url = thumbnail_url.replace('{width}x{height}', '1280x720')
    response = requests.get(thumbnail_url)
    open('thumb.png', 'wb').write(response.content)
    return open('thumb.png', 'rb')

## Envia mensagem
def send_message(thumbnail, title):
    bot = telebot.TeleBot(token)
    message = (
        f'🔴 <b>Alerta de Live!</b>\n'
        + f'<blockquote>{title}</blockquote>'
    )
    btn_link = telebot.types.InlineKeyboardMarkup()
    btn = telebot.types.InlineKeyboardButton(f'📹 Twitch', url=f'https://www.twitch.tv/{streamer}')
    btn_link.row(btn)
    msg = bot.send_photo(
        destination,
        thumbnail,
        caption=message,
        parse_mode='HTML',
        reply_markup=btn_link
    )

## Verifica há quanto tempo a transmissão está funcionando
def check_time():
    start_time = datetime.datetime.strptime(
        live_data['started_at'],
        '%Y-%m-%dT%H:%M:%S%z'
    )
    time_diff = (
        datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
        - start_time
    )
    if time_diff < datetime.timedelta(minutes=minutos):
        return True
    return False


if __name__ == "__main__":
    live_data = get_data()
    if live_data and check_time():
        title = live_data['title']
        thumbnail = get_thumbnail(live_data)
        send_message(thumbnail, title)

Para que o código funcione, ajuste as variáveis:

  • client_id: Com o valor fornecido pela Twitch no passo Aplicação na Twitch;
  • client_secret: Com o valor fornecido pela Twitch no passo Aplicação na Twitch;
  • streamer: Nome do streamer;
  • token: Token do bot criado no passo Bot no Telegram;
  • destination: ID de destino da mensagem4;
  • minutos: Intervalo de checagem. Exemplo: Se a checagem for feita a cada cinco minutos, o valor deve ser 5.

A variável minutos tem a função de simplificar o código. Caso a transmissão tenha mais tempo de duração que o valor desta variável, nenhuma mensagem é enviada. Caso contrário, é entendido que a live começou há pouco tempo, portanto, a mensagem é enviada no canal.

O script python pode ser rodado de inúmeras formas. Recomendo o uso de cronjobs ou até como um serviço do sistema operacional5.

Exemplos de canais

Dois exemplos de canais que usam o script deste post:

  • @NaoSigo, com atualizações das lives e vídeos do Cid Cidoso (Não Salvo).
  • @BotaNoGau, com informações das streams do Gaules.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.