Discord.py беги после закрытия

#python #asynchronous #discord #python-asyncio

Вопрос:

Я просто пытаюсь написать простую функцию «отправить сообщение», используя Discord.py но я много сражаюсь.

Если вы прокомментируете, send_something('second') то это прекрасно работает. Но если вы используете эту функцию дважды, вы получите предупреждение о времени выполнения.

 def send_something(message):
    client = discord.Client()
    @client.event
    async def on_ready():
        connection = await client.fetch_user(USER_ID)
        await connection.send(message)
        await client.close()

    client.run(TOKEN)

# You can run the first one, but you can't run both
send_something('first') 
send_something('second') # RuntimeWarning: coroutine 'Client.run.<locals>.runner' was never awaited
 

Затем я попытался сделать его асинхронной функцией, добавив ожидание, и в этом случае вам теперь придется каким-то образом «ждать» внешней функции. Поэтому я сделал это:

 async def send_something(message):
    client = discord.Client()
    @client.event
    async def on_ready():
        connection = await client.fetch_user(USER_ID)
        await connection.send(message)
        await client.close()

    await client.run(TOKEN)

# No error but no message gets sent
asyncio.ensure_future(send_something('first'))
asyncio.ensure_future(send_something('second'))
 

Теперь ошибки нет, но сообщения никогда не отправляются. Я предполагаю, что сценарий заканчивается и «закрывается» до того, как работа будет завершена?

Есть идеи, как я могу написать какую-нибудь функцию «отправить сообщение»? Потому что все discord.py примеры, которые я нахожу, основаны на ожидании «событий», что мне здесь не нужно.

Комментарии:

1. Если вам просто нужна функция для отправки сообщений кому-то, вам не следует ее использовать discord.py вообще. просто используйте необработанный API discord и отправьте сообщение непосредственно этому человеку