#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 и отправьте сообщение непосредственно этому человеку