Не работают две функции одновременно в Discord боте
Я хочу, что бы мой бот одновременно выполнял функции в main() вместе с функцией asks().
import disnake
import threading
from disnake.ext import commands
from threading import Thread
bot = commands.Bot(command_prefix='!', intents=disnake.Intents.all())
client = disnake.Client()
ask_ls = ['Что выберете:', '1. Написать сообщение.', '2.Выйти']
ls_write = ['1']
ls_exit = ['2']
async def asks(): # пишет сообщение от лица бота в чат через консоль
print('\n'.join(ask_ls))
for ask in ask_ls:
choose = input()
if choose in ls_write:
#try:
channel = await bot.get_channel(int(input("ID Канала: ")))
msg = input('Ваше сообщение: ')
await channel.send(msg)
#await channel.send(content=input("Ваше сообщение: "))
#except:
#return asks()
elif choose in ls_exit:
exit()
else:
return await asks()
def between_callback():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(asks())
loop.close()
@bot.event
async def on_ready():
print('Ready')
def main():
print('Много функций')
th1 = Thread(target=main).start()
th2 = Thread(target=between_callback).start()
bot.run(TOKEN)
Ошибки:
Exception in thread Thread-4 (between_callback):
Traceback (most recent call last):
File
"C:\Users\maksi\AppData\Local\Programs\Python\Python310\lib\
threading.py", line 1016, in _bootstrap_inner
self.run()
File "C:\Users\maksi\AppData\Local\Programs\Python\Python310\lib\
threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\maksi\PycharmProjects\DS-BOT\main.py", line 88, in
between_callback
loop.run_until_complete(asks())
File "C:\Users\maksi\AppData\Local\Programs\Python\Python310\lib\
asyncio\base_events.py", line 649, in run_until_complete
return future.result()
File "C:\Users\maksi\PycharmProjects\DS-BOT\main.py", line 75, in asks
await channel.send(msg)
File "C:\Users\maksi\AppData\Local\Programs\Python\Python310\lib\site-
packages\disnake\abc.py", line 1655, in send
data = await state.http.send_message(
File "C:\Users\maksi\AppData\Local\Programs\Python\Python310\lib\site-
packages\disnake\http.py", line 344, in request
async with self.__session.request(method, url, **kwargs) as
response:
File "C:\Users\maksi\AppData\Local\Programs\Python\Python310\lib\site-
packages\aiohttp\client.py", line 1141, in __aenter__
self._resp = await self._coro
File "C:\Users\maksi\AppData\Local\Programs\Python\Python310\lib\site-
packages\aiohttp\client.py", line 467, in _request
with timer:
File "C:\Users\maksi\AppData\Local\Programs\Python\Python310\lib\site-
packages\aiohttp\helpers.py", line 701, in __enter__
raise RuntimeError(
RuntimeError: Timeout context manager should be used inside a task
Как мне избежать эти ошибку?
Источник: Stack Overflow на русском