【发布时间】:2020-10-23 12:23:02
【问题描述】:
我正在用 py 开发一个不和谐的机器人。但我似乎无法弄清楚如何检查用户是否在 twitch 上直播。当我检查他们的流标题时。如果单词流在其中,我可以让机器人宣布流。但是机器人不断地检查它,一遍又一遍地打破频道。还有什么其他解决方案可以检查流媒体是否正在直播?我无法弄清楚 api 是如何工作的
【问题讨论】:
标签: python bots discord discord.py twitch
我正在用 py 开发一个不和谐的机器人。但我似乎无法弄清楚如何检查用户是否在 twitch 上直播。当我检查他们的流标题时。如果单词流在其中,我可以让机器人宣布流。但是机器人不断地检查它,一遍又一遍地打破频道。还有什么其他解决方案可以检查流媒体是否正在直播?我无法弄清楚 api 是如何工作的
【问题讨论】:
标签: python bots discord discord.py twitch
一种使用 python 请求库的常用方法,这将能够告诉您 IF 用户处于活动状态:
import requests
CLIENT_ID = 'my-twitch-client-id'
OAUTH_TOKEN = 'my-twitch-oauth-token'
def is_user_live(username):
endpoint = 'https://api.twitch.tv/helix/streams'
my_headers = {
'Client-ID': CLIENT_ID,
'Authorization': f'Bearer {OAUTH_TOKEN}'
}
my_params = {'user_login': username}
response = requests.get(endpoint, headers=my_headers, params=my_params)
data = response.json()['data']
if len(data) == 0:
return False
return data[0]['type'] == 'live'
我建议您的机器人在初始化机器人时订阅events webhook。您需要创建一个网络服务器来处理 Twitch 将发送给您的 POST 请求,这将能够告诉您何时用户上线。使用 Flask 的粗略示例:
import requests
import json
from flask import request
CLIENT_ID = 'my-twitch-client-id'
OAUTH_TOKEN = 'my-twitch-oauth-token'
MY_SECRET = 'an-arbitrary-secret'
app = your_flask_app()
@app.route('/my_webhook/<user_id>')
def my_webhook(user_id):
check_secret(request) # sha256 of your secret and content-length
data = request.get_json()['data']
if len(data) > 0:
your_bot.user_is_live(data)
else:
your_bot.user_is_offline(data)
return 'OK'
def subscribe_to_webhook(user_id):
endpoint = 'https://api.twitch.tv/helix/webhooks/hub'
topic = 'https://api.twitch.tv/helix/streams'
my_headers = {
'Client-ID': CLIENT_ID,
'Authorization': f'Bearer {OAUTH_TOKEN}'
}
payload = {
'hub.callback': f'http://my_server.url/my_webhook/{user_id}',
'hub.mode': 'subscribe',
'hub.topic': f'{topic}?user_id={user_id}',
'hub.lease_seconds': 864000,
'hub.secret': MY_SECRET
}
response = requests.post(endpoint, headers=my_headers, data=json.dumps(payload))
return response.ok
【讨论】: