Telethon超时以重新发送消息

时间:2018-08-08 10:23:02

标签: python telethon

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

1 个答案:

答案 0 :(得分:0)

首先,我们需要创建一个处理程序并绑定到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秒钟内收到响应。我想你现在明白了。

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

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