Имеется Телеграм бот, написанный на Python с помощью aiogram. Его задача получать от пользователей username стримеров, заносить user_id и username в базу данных и отправлять уведомления когда стрим начался. Бот уже умеет проверять существует ли стример по введенному пользователем бота username, но как теперь написать функцию, которая будет проверять начался ли стрим?
Читать документацию Twitch у меня не получается, так как она огромная, а с англ. у меня сейчас не очень. На GitHub нашёл варианты, но те, что я смог прочесть и понять мне не подошли, так как они намного проще и нужно прям переписать всё-равно с нуля, а логики я не понимаю.
Вот примеры функций из моего кода, которые могут вам помочь понять какой код мне нужен:
load_dotenv()
bot = Bot(os.getenv('BOT_TOKEN'))
dp = Dispatcher(bot)
twitch_id = os.getenv('CLIENT_ID')
twitch_key = os.getenv('CLIENT_SECRET')
def create_connection():
conn = sqlite3.connect('streamers.db')
return conn
def close_connection(conn):
conn.commit()
conn.close()
# Twitch OAuth token
def get_twitch_token():
try:
response = requests.post(
f"https://id.twitch.tv/oauth2/token?client_id={twitch_id}&client_secret={twitch_key}&grant_type=client_credentials"
)
response.raise_for_status()
return response.json()["access_token"]
except Exception as e:
print(f"Error getting Twitch OAuth token: {str(e)}")
return None
def check_twitch_streamer(username):
token = get_twitch_token()
headers = {"Client-ID": twitch_id, "Authorization": f"Bearer {token}"}
url = f"https://api.twitch.tv/helix/users?login={username}"
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
if len(data["data"]) > 0:
return True
return False
@dp.message_handler(content_types=['text'])
async def send_result(message: types.Message):
username = message.text.lower()
if check_twitch_streamer(username):
conn = create_connection()
c = conn.cursor()
c.execute("SELECT username FROM streamers WHERE user_id = ?", (message.from_user.id,))
result = c.fetchone()
if result:
user_streams = result[0].split(", ")
# Удаление пустых строк из списка
user_streams = list(filter(None, user_streams))
if len(user_streams) >= 3:
await message.reply("Ты уже добавил максимальное количество отслеживаемых стримеров (3 шт.)")
elif username in user_streams:
await message.reply(f"Ты уже добавил стримера <b>{username}</b> ранее ", parse_mode='HTML')
else:
c.execute(f"UPDATE streamers SET username = username || ', {username}' WHERE user_id = '{message.from_user.id}'")
await message.reply(f"Записал\n\n"
f"Ты можешь добавить ещё {3-len(user_streams)-1} канала в список или перейти в режим отслеживания стримов, выбери ", parse_mode='HTML', reply_markup=keyboard)
else:
c.execute("INSERT INTO streamers (user_id, username) VALUES (?, ?)", (message.from_user.id, username))
await message.reply(f"Записал\n\n"
f"Ты можешь добавить ещё 2 канала в список или перейти в режим отслеживания стримов, выбери ", parse_mode='HTML', reply_markup=keyboard)
close_connection(conn)
else:
await message.reply(f"Я не нашёл стримера <b>{username}</b>, проверь корректность ввода ", parse_mode='HTML')