• Как выводить сообщение без остановки?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых ты творишь какой-то колхоз. discord.py тащит как зависимость асинхронную aiohttp, а ты сначала используешь синхронный requests, а потом заворачиваешь его в асинхрон через ThreadPool, потом обратно заворачиваешь в синхронный код в main(), а потом этот main() хочешь использовать вместе с асинхронным кодом discord.py. Жесть.
    Вот не проще осилить изначально асинхронную библиотеку, которую и так и так придётся использовать?

    Далее, что за бредятина с while? Что, по-твоему, должен делать вызов on_ready() в цикле? Что еще за точки с запятыми в питоне?
    Ты делаешь чисто синхронный бесконечный цикл, естественно этот цикл не даёт асинхронному коду исполняться.

    Ну и до кучи зачем-то используешь discord.Client вместо discord.Bot.

    Даже базового знания того, как работает асинхронность в питоне, достаточно, чтобы набросать код вида:
    import asyncio
    import aiohttp
    import discord
    from discord.ext import commands
    client = commands.Bot(intents = discord.Intents.default())
    
    async def fetch():
        return ... # тут вытаскиваем данные с сайта через aiohttp и возвращаем в удобном нам виде
    
    async def display(results):
        global client
        pass  # тут выводишь результаты в дискорд, используя объект client
    
    async def cycle():
        while True:
            res = await fetch()  # обработку ошибок допиши сам
            await display(res)
            await asyncio.sleep(300)  # задержка в секундах
    
    cycle_task = None
    @client.ready
    async def on_ready():
        global cycle_task
        if cycle_task is None:  # событие ready может отрабатывать несколько раз, нам нужен только один.
            cycle_task = asyncio.get_event_loop().create_task(cycle())
        pass  # тут делаешь что тебе еще нужно по запуску бота
    
    # когда надо будет остановить цикл, вызови cycle_task.cancel()
    bot.run(TOKEN)  # запускаешь бота
    Ответ написан
    Комментировать