【问题标题】:Telethon timeout for resending message重发消息的 Telethon 超时
【发布时间】:2018-08-08 19:13:16
【问题描述】:

我想使用Telethon 向电报机器人发送消息,并使用事件处理函数处理其响应。有没有办法为传入事件设置超时?例如,如果我向机器人发送“嗨”消息,但 5 秒后它没有回复我,Telethon 会再次发送“嗨”消息。

【问题讨论】:

    标签: python telethon


    【解决方案1】:

    首先,我们需要创建一个处理程序并绑定到我们的 Telethon 客户端的 NewMessage 事件。

    from datetime import datetime
    from telethon import TelegramClient, events
    from telethon.tl.types import InputPeerUser
    
    client = TelegramClient('session_name', app_id, 'app_token')
    last_message_received_on = None
    
    
    @client.on(events.NewMessage)
    def on_message_received(event: events.NewMessage.Event):
        print(event.raw_text)
    

    现在在我们的on_message_received 处理程序中,我们需要添加一行来确定机器人对我们的回复datetime。所以我们将处理程序更改为:

    @client.on(events.NewMessage)
    def on_message_received(event: events.NewMessage.Event):
        global last_message_received_on
        last_message_received_on = datetime.now()
    

    现在我们启动客户端并运行一个循环。我们向机器人发送一条消息并检查我们是否在不到 5 秒的时间内收到响应。我们继续这个循环,直到在 5 秒内收到响应。我想你现在明白要点了。

    with client.start():
        bot = client.get_entity('https://t.me/some_user_name')
    
        while True:
            send_message('hi')
            if not last_message_received_on or (last_message_received_on < datetime.now()).seconds > 5:
                send_message('hi')
            else:
                break
    

    此外,您需要在再次发送消息之间至少间隔 1 秒钟 time.sleep(),以使事情变得自然和现实。因为您不希望立即响应!

    【讨论】:

    • 感谢您的回答。这是唯一的方法吗? Telethon 有没有办法自动为我们做这件事?
    • @SaraFahim 我不这么认为。不过实现起来相当容易。
    • 是的,我知道。这是最简单的方法。再次感谢。
    • 你测试你的代码了吗?即使使用 time.sleep() 也是一个无限循环。
    • @SaraFahim 它不应该是一个完整的 sn-p。我只是想让你了解一下。
    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    相关资源
    最近更新 更多