python - 重发消息的 Telethon 超时
问题描述
Telethon
我想使用事件处理函数向电报机器人发送消息并处理其响应。有没有办法为传入事件设置超时?例如,如果我向机器人发送“嗨”消息,但它在 5 秒后没有回复我,则 Telethon 会再次发送“嗨”消息。
解决方案
首先,我们需要创建一个处理程序并绑定NewMessage
我们的 Telethon 客户端的事件。
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 秒钟,以使事情变得自然和现实。因为你不期望不立即响应!
推荐阅读
- sql - 关于两个日期之间值总和的 SQL 查询
- reactjs - react-navigation 5和Formik处理提交不起作用
- c++ - 复制构造函数没有被调用
- c++ - 运行使用自定义 gcc 编译的应用程序时,动态链接器直接调用分段错误
- r - R中日期类对象中的字符数
- python - 使用 opencv 进行透视变形并使用 tkinter 显示它
- python - 尝试使用 <= 和 >= 日期明天 0100-2400 if 语句过滤 api 请求
- c# - 在 Xamarin Android 中使用 Google 钱包时出错
- python - 从 Python 中的 HTML 页面中获取表格的前几行
- git - git 认为我的 Macbook pro 是终端中的 Galaxy-S9