【问题标题】:RuntimeWarning: coroutine 'MessageMethods.send_message' was never awaitedRuntimeWarning:从未等待协程“MessageMethods.send_message”
【发布时间】:2021-10-22 00:13:43
【问题描述】:
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

如何解决这个问题?

【问题讨论】:

    标签: python python-3.x telegram telethon


    【解决方案1】:

    看起来您正在正常函数中运行异步代码。该错误抱怨client.send_message(chat, message) 代码前面没有await 关键字。为了能够以您想要的方式运行任何异步函数(就像普通的函数调用一样),您必须在函数调用的代码之前有 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())
    

    【讨论】:

    • 出现另一个错误:ConnectionError: Cannot send requests while disconnected
    • 在回答我的问题时,我编写了我现在拥有的代码
    • 试试那个更新,我认为它希望客户端运行,然后发送一条消息。 (我换了最后两行)
    • 注意startrun_until_disconnected需要await
    【解决方案2】:
    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:\Users\aesok\Desktop\airdroper2\telegram_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:\Users\aesok\Desktop\airdroper2\telegram_hi.py", line 25, in <module>
        run(main())
      File "C:\Users\aesok\AppData\Local\Programs\Python\Python39\lib\asyncio\runners.py", line 44, in run
        return loop.run_until_complete(main)
      File "C:\Users\aesok\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 642, in run_until_complete
        return future.result()
      File "C:\Users\aesok\Desktop\airdroper2\telegram_hi.py", line 21, in main
        await client.send_message(chat, message)
      File "C:\Users\aesok\Desktop\airdroper2\venv\lib\site-packages\telethon\client\messages.py", line 853, in send_message
        result = await self(request)
      File "C:\Users\aesok\Desktop\airdroper2\venv\lib\site-packages\telethon\client\users.py", line 30, in __call__
        return await self._call(self._sender, request, ordered=ordered)
      File "C:\Users\aesok\Desktop\airdroper2\venv\lib\site-packages\telethon\client\users.py", line 58, in _call
        future = sender.send(request, ordered=ordered)
      File "C:\Users\aesok\Desktop\airdroper2\venv\lib\site-packages\telethon\network\mtprotosender.py", line 172, in send
        raise ConnectionError('Cannot send requests while disconnected')
    ConnectionError: Cannot send requests while disconnected
    
    Process finished with exit code 1
    
    

    【讨论】:

    • 欢迎来到 StackOverflow,请编辑您的问题,而不是发布包含有关该问题的更多详细信息的答案。
    猜你喜欢
    • 2018-10-26
    • 2019-12-15
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2020-10-10
    • 2022-01-20
    相关资源
    最近更新 更多