如何在Python中使用Telethon库响应Telegram inline keyboard markup选项
使用Telethon触发Inline Keyboard选项的实现方案
Telethon原生提供了直接点击inline keyboard按钮的封装方法,不需要手动构造CallbackQuery请求,以下是两种可行实现方案:
方案1:主动获取消息后点击按钮
- 首先获取包含inline keyboard的目标消息实例,可通过拉取对话历史、主动发消息后获取最新回复两种方式拿到消息对象
- inline keyboard的按钮为二维数组结构,第一维对应按钮行,第二维对应每行内的按钮,索引从0开始计数
- 可通过两种方式触发点击:按按钮文本匹配点击、按行列索引点击
示例代码:
from telethon import TelegramClient # 替换为自己的API参数,可从Telegram开发者平台申请 api_id = 123456 api_hash = "your_api_hash_here" client = TelegramClient("my_session", api_id, api_hash) async def main(): async with client: # 向目标机器人发送触发inline keyboard的指令 await client.send_message("@target_bot_username", "/start") # 获取最新一条来自机器人的消息 msg = (await client.get_messages("@target_bot_username", limit=1))[0] # 方式1:按按钮文本点击,文本需和按钮显示完全一致 await msg.click(text="选项A") # 方式2:按行列索引点击,以下为点击第一行第二个按钮 # await msg.click(row=0, column=1) if __name__ == "__main__": client.loop.run_until_complete(main())
方案2:监听消息自动触发按钮点击
如果需要在机器人返回带inline keyboard的消息时自动点击,可通过事件回调实现:
from telethon import TelegramClient, events api_id = 123456 api_hash = "your_api_hash_here" client = TelegramClient("my_session", api_id, api_hash) # 监听来自目标机器人的新消息 @client.on(events.NewMessage(from_users="@target_bot_username")) async def auto_click(event): # 判断当前消息是否包含inline keyboard if event.buttons: # 匹配文本点击对应按钮 await event.click(text="选项B") print("按钮已自动点击") client.start() client.run_until_disconnected()
注意事项
- 若点击的是链接类型按钮,
click()方法会直接返回跳转链接,不会发送CallbackQuery请求 - 按文本点击时需要完全匹配按钮的显示内容,包括大小写、特殊符号、空格,否则会抛出找不到按钮的异常
- 点击按钮后如需处理回调结果,可监听
events.CallbackQuery事件捕获返回数据
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

