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.
- Acesse dev.twitch.tv/console;
- Crie uma aplicação nova em Register Your Application;
- Preencha os campos:
Name
: Nome de sua aplicação.OAuth Redirect URLs
: Preencha comhttp://localhost
;Category
:Confidential
.
- Salve os valores de
Client ID
eClient 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.
- Fale com o @BotFather e crie um bot3;
- Salve o valor do
Token
; - Caso o canal não exista, crie-o e salve seu ID4;
- 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 ser5
.
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.