Ну во-первых ты творишь какой-то колхоз. 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) # запускаешь бота