运行时警告:从未等待协程'MessageMethods.send_message'


import random
from telethon import TelegramClient, events

def main():
api_id = 9123640
api_hash = '8as6fgvs8t9ar76fse89rgearz'
chat = '@username'
message = 'hi'
client = TelegramClient('afewfe', api_id, api_hash)
@client.on(events.NewMessage(chats=chat))
async def normal_handler(event):
if event.message.button_count == 4:
await event.message.click(random.randint(0, 3))
await client.disconnect()
client.start()
client.send_message(chat, message)
client.run_until_disconnected()

if __name__ == '__main__':
main()

我想发送消息给用户,然后从4个按钮的用户消息返回,单击随机按钮和停止脚本。发送消息时出现问题。如果我注释client.send_message(chat, message)行并自己发送消息,代码将继续正常工作,但client.send_message(chat, message)行出现错误:

RuntimeWarning: coroutine 'MessageMethods.send_message' was never awaited
client.send_message('@username', 'hi')
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

如何解决这个问题?

看起来你是在一个正常的函数中运行异步代码。错误是抱怨client.send_message(chat, message)代码前面没有await关键字。为了能够以您想要的方式运行任何async函数(就像普通的函数调用一样),您必须在函数调用的代码之前使用await关键字。为了能够使用await关键字而不抛出错误,保存代码(main)的外部函数需要是异步的,并且可以与asyncio.run一起运行。

from asyncio import run
async def main():
# your code
client.start()
client.run_until_disconnected()
await client.send_message(chat, message)
if __name__ == "__main__":
run(main())
import random
from telethon import TelegramClient, events
from asyncio import run

async def main():
api_id = 9123640
api_hash = '8as6fgvs8t9ar76fse89rgearz'
chat = '@username'
message = 'hi'
client = TelegramClient('afewfe', api_id, api_hash)
@client.on(events.NewMessage(chats=chat))
async def normal_handler(event):
if event.message.button_count == 4:
await event.message.click(random.randint(0, 3))
await client.disconnect()
client.start()
await client.send_message(chat, message)
client.run_until_disconnected()
if __name__ == "__main__":
run(main())

完全错误:

C:UsersaesokDesktopairdroper2telegram_hi.py:20: RuntimeWarning: coroutine 'AuthMethods._start' was never awaited
client.start()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Traceback (most recent call last):
File "C:UsersaesokDesktopairdroper2telegram_hi.py", line 25, in <module>
run(main())
File "C:UsersaesokAppDataLocalProgramsPythonPython39libasynciorunners.py", line 44, in run
return loop.run_until_complete(main)
File "C:UsersaesokAppDataLocalProgramsPythonPython39libasynciobase_events.py", line 642, in run_until_complete
return future.result()
File "C:UsersaesokDesktopairdroper2telegram_hi.py", line 21, in main
await client.send_message(chat, message)
File "C:UsersaesokDesktopairdroper2venvlibsite-packagestelethonclientmessages.py", line 853, in send_message
result = await self(request)
File "C:UsersaesokDesktopairdroper2venvlibsite-packagestelethonclientusers.py", line 30, in __call__
return await self._call(self._sender, request, ordered=ordered)
File "C:UsersaesokDesktopairdroper2venvlibsite-packagestelethonclientusers.py", line 58, in _call
future = sender.send(request, ordered=ordered)
File "C:UsersaesokDesktopairdroper2venvlibsite-packagestelethonnetworkmtprotosender.py", line 172, in send
raise ConnectionError('Cannot send requests while disconnected')
ConnectionError: Cannot send requests while disconnected
Process finished with exit code 1

Just import:

from telethon.sync import TelegramClient
from telethon import TelegramClient, events

应该可以。

最新更新