我想使用Telethon向电报机器人发送一条消息,并使用事件处理函数处理其响应。有没有办法设置传入事件的超时时间?例如,如果我向机器人发送"Hi“消息,它在5秒后没有响应,Telethon将再次发送"Hi”消息。
发布于 2018-08-08 19:13:16
首先,我们需要创建一个处理程序,并在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此外,你还需要在再次发送消息之间进行time.sleep(),至少1秒钟,以使事情变得自然和现实。因为你不会期望他们不会立即做出回应!
https://stackoverflow.com/questions/51744306
复制相似问题