как улучшить python bot для discord + twitch

copypaste_scripter

Известный
Автор темы
1,434
292
привет.
попросил gemini и chatgpt написать мне скрипт для того чтобы когда из списка config.py указанный канал начнет стрим мне пришло уведомление. потом я срукожопил их вместе и как будто работает. но я уверен они и я где то накосячили.

если кому не лень посмотрите пожалуйста.

bot.py:
import discord
import aiohttp
import asyncio

from config import (
    DISCORD_TOKEN,
    TWITCH_CLIENT_ID,
    TWITCH_CLIENT_SECRET,
    CHANNEL_ID,
    TWITCH_CHANNELS
)

intents = discord.Intents.default()
client = discord.Client(intents=intents)

twitch_token = None
live_status = {name: False for name in TWITCH_CHANNELS}

async def get_twitch_token():
    global twitch_token
    url = "https://id.twitch.tv/oauth2/token"
    params = {
        "client_id": TWITCH_CLIENT_ID,
        "client_secret": TWITCH_CLIENT_SECRET,
        "grant_type": "client_credentials"
    }
    async with aiohttp.ClientSession() as session:
        async with session.post(url, params=params) as resp:
            data = await resp.json()
            twitch_token = data["access_token"]

async def check_streams():
    await client.wait_until_ready()
    channel = client.get_channel(CHANNEL_ID)

    headers = {
        "Client-ID": TWITCH_CLIENT_ID,
        "Authorization": f"Bearer {twitch_token}"
    }

    while not client.is_closed():
        async with aiohttp.ClientSession(headers=headers) as session:
            for streamer, note in TWITCH_CHANNELS.items():
                url = f"https://api.twitch.tv/helix/streams?user_login={streamer}"
                async with session.get(url) as resp:
                    data = await resp.json()

                    is_live = len(data["data"]) > 0

                    if is_live and not live_status[streamer]:
                        stream = data["data"][0]
                        title = stream["title"]
                        game = stream["game_name"]

                        embed = discord.Embed(
                            title=f"{streamer}",
                            description=title,
                            color=0x9146FF
                        )
                        embed.add_field(
                            name="",
                            value=f"*{note}*", # value=f"**Note:** {note}",
                            inline=False
                        )
                        embed.add_field(
                            name="",
                            value=f"{game}",
                            inline=False
                        )
                        embed.url = f"https://twitch.tv/{streamer}"

                        await channel.send(embed=embed)
                        live_status[streamer] = True

                    elif not is_live:
                        live_status[streamer] = False

        await asyncio.sleep(60)  # check every 60 seconds

@client.event
async def on_ready():
    print(f"Logged in as {client.user}")
    await get_twitch_token()
    client.loop.create_task(check_streams())

client.run(DISCORD_TOKEN)

config.py:
DISCORD_TOKEN = "token"
TWITCH_CLIENT_ID = "id"
TWITCH_CLIENT_SECRET = "secret"
CHANNEL_ID = 123456

TWITCH_CHANNELS = {
"channel1": "note 1",
    тут много каналов, больше 200, просто не стал вставить
"channel500": "note 500",
}

'''
?referrer=raid
'''
# replace:
# ^(\S+)\s+(.*)$
# with
# "$1": "$2",
 
Последнее редактирование: