如何为Telethon开发的Telegram bot实现按钮点击响应及按数发图功能
Telethon 按钮点击响应功能实现方案
你使用的是Telethon的Inline按钮,需要监听CallbackQuery事件来捕获用户的按钮点击行为,具体实现步骤和代码如下:
核心逻辑说明
你之前给每个按钮绑定的b"1"~b"5"是二进制格式的回调数据,用户点击按钮后,你可以在回调事件中拿到这部分数据,转换为数字后取对应数量的预设图片发送即可。
完整实现代码
from telethon import TelegramClient, events, Button # 替换为你自己的api参数 API_ID = 你的API_ID API_HASH = "你的API_HASH" BOT_TOKEN = "你的BOT_TOKEN" bot = TelegramClient('bot', API_ID, API_HASH).start(bot_token=BOT_TOKEN) # 提前预设10张图片,可替换为本地路径或上传到Telegram后得到的文件ID(推荐用文件ID,发送速度更快) IMAGE_LIST = [ "file_id_1", "file_id_2", "file_id_3", "file_id_4", "file_id_5", "file_id_6", "file_id_7", "file_id_8", "file_id_9", "file_id_10", ] # 你原有发送按钮的逻辑,建议把接收消息对象改为触发命令的用户,把"tag"替换为event.chat_id @bot.on(events.NewMessage(pattern="opzioni")) async def handler(event): bottoni = [ [ Button.inline("prima opzione", b"1"), Button.inline("seconda opzione", b"2") ], [ Button.inline("terza opzione", b"3"), Button.inline("quarta opzione", b"4") ], [ Button.inline("quinta opzione", b"5") ] ] await bot.send_message( event.chat_id, ". --queste sono le opzioni-- .", buttons= bottoni ) # 新增按钮点击回调处理逻辑 @bot.on(events.CallbackQuery) async def button_click_handler(event): # 把二进制回调数据转成整数,得到需要发送的图片数量 img_num = int(event.data.decode("utf-8")) # 取对应数量的图片,切片容错避免超出预设的10张上限 send_images = IMAGE_LIST[:img_num] # 可选:给用户点击反馈,弹出顶部提示 await event.answer(f"正在发送{img_num}张图片") # 发送图片,传列表会自动合并为媒体组(多条图片在同一条消息内) await bot.send_file( event.chat_id, send_images, caption=f"你选择的{img_num}张图片" ) # 启动bot bot.run_until_disconnected()
注意事项
- 本地路径的图片首次发送后,会返回对应的Telegram文件ID,你可以缓存下来后续直接使用,不需要重复上传
- 如果不需要合并为媒体组,改为循环调用
send_file单张发送即可 - 如果你需要点击按钮后替换掉原来的按钮消息,可以调用
event.edit方法修改原有消息内容
内容的提问来源于stack exchange,提问作者kekkoilmedikit
相关产品推荐
相关产品推荐

