Не работают две функции одновременно в Discord боте

Рейтинг: 0Ответов: 0Опубликовано: 26.08.2023

Я хочу, что бы мой бот одновременно выполнял функции в 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

Как мне избежать эти ошибку?

Ответы

Ответов пока нет.