Telebot框架:点击内联按钮时能否弹出聊天选择模态窗口用于转发消息?
Telebot框架实现内联按钮触发聊天/用户选择模态窗口的说明
Telebot本身没有直接内置弹出聊天选择模态窗口的现成功能,但可以借助Telegram Bot API 6.0+新增的
request_user或request_chat参数,实现点击内联按钮后触发用户选择弹窗的效果,进而完成消息转发。核心实现步骤:
- 发送带内联按钮的初始消息,按钮绑定回调标识;
- 监听按钮回调,触发带用户/聊天选择请求的消息,此时Telegram会弹出模态窗口让用户选择目标;
- 监听用户选择后的消息,提取目标用户/聊天ID,执行消息转发逻辑。
代码示例(基于pyTelegramBotAPI):
import telebot from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton bot = telebot.TeleBot("你的机器人Token") # 发送带内联按钮的欢迎消息 @bot.message_handler(commands=['start']) def start_handler(message): btn_markup = InlineKeyboardMarkup() btn_markup.add(InlineKeyboardButton("选择用户转发", callback_data="pick_user")) bot.send_message(message.chat.id, "点击下方按钮选择转发目标", reply_markup=btn_markup) # 处理内联按钮回调 @bot.callback_query_handler(func=lambda call: call.data == 'pick_user') def pick_user_callback(call): # 触发用户选择模态窗口 bot.send_message( call.message.chat.id, "请选择要转发的用户:", request_user=telebot.types.RequestUser( request_id=1, user_is_bot=False # 限制仅选择非机器人用户 ) ) # 处理用户选择结果,执行转发 @bot.message_handler(func=lambda msg: msg.user_shared is not None) def handle_user_selection(msg): target_user_id = msg.user_shared.user_id # 示例:转发当前对话中最新的一条消息到目标用户,可按需调整转发逻辑 bot.forward_message(target_user_id, msg.chat.id, msg.message_id - 1) bot.send_message(msg.chat.id, f"消息已转发到用户ID:{target_user_id}") bot.polling()关键注意点:
- 必须使用支持Telegram Bot API 6.0+的pyTelegramBotAPI版本,否则
request_user/request_chat参数无法生效; - 用户选择后,Telegram会发送包含
user_shared(选择用户)或chat_shared(选择聊天)字段的消息,需监听这类消息获取目标ID; - 若需要选择群组/频道,将
request_user替换为request_chat即可,参数配置逻辑类似。
- 必须使用支持Telegram Bot API 6.0+的pyTelegramBotAPI版本,否则
内容的提问来源于stack exchange,提问作者treevee
相关产品推荐
相关产品推荐

