You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Telegram Bot中通过自定义键盘按钮实现本地文件上传?

实现Telegram Bot自定义键盘触发文件上传功能

核心思路

通过自定义键盘按钮引导用户进入上传流程,结合CommandHandler触发键盘显示,再用状态管理区分普通文档和上传触发后的文档,最终完成文件保存。

完整实现代码

from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

def upload_command(update, context):
    # 创建自定义键盘,仅显示"上传文件"按钮
    keyboard = [["上传文件"]]
    reply_markup = ReplyKeyboardMarkup(keyboard, one_time_keyboard=True)
    update.message.reply_text("点击下方按钮开始上传:", reply_markup=reply_markup)

def handle_button_click(update, context):
    if update.message.text == "上传文件":
        update.message.reply_text("请发送需要上传的文件(支持.xlsx等格式):", reply_markup=ReplyKeyboardRemove())
        # 标记用户处于等待上传状态
        context.user_data['waiting_for_file'] = True

def upload_file(update, context):
    # 仅处理处于上传状态的用户发送的文件
    if context.user_data.get('waiting_for_file'):
        try:
            file = context.bot.get_file(update.message.document)
            # 下载并保存文件到指定路径
            file.download('downloads/urls.xlsx')
            update.message.reply_text("文件上传成功!")
            # 重置上传状态
            del context.user_data['waiting_for_file']
        except Exception as e:
            update.message.reply_text(f"上传失败:{str(e)}")
            del context.user_data['waiting_for_file']

def main():
    # 替换为你的Bot Token
    updater = Updater("YOUR_TELEGRAM_BOT_TOKEN")
    dp = updater.dispatcher

    # 注册命令处理器:/upload 触发自定义键盘
    dp.add_handler(CommandHandler("upload", upload_command))
    # 注册文本处理器:处理按钮点击事件
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_button_click))
    # 注册文档处理器:接收并保存文件
    dp.add_handler(MessageHandler(Filters.document, upload_file))

    updater.start_polling()
    updater.idle()

if __name__ == "__main__":
    main()

关键说明

  • 自定义键盘:使用ReplyKeyboardMarkup创建,one_time_keyboard=True确保用户点击按钮后键盘自动隐藏,提升交互体验。
  • 状态管理:通过context.user_data存储用户状态,避免误处理用户日常发送的其他文档。
  • 处理器优先级:注意处理器的注册顺序,文本处理器要优先于文档处理器,确保按钮点击事件被正确捕获。

内容的提问来源于stack exchange,提问作者Oksana Sheremet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:30:48