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

关于使用python-telegram-bot提取转发图文消息文本的问题

解决方案

1. 过滤器组合验证

你使用的Filters.forwarded & Filters.photo完全正确,这个组合可以精准捕获带图片的转发消息,确保只有符合条件的消息才会触发回调函数。

2. 回调函数中分离文本与图片

在回调函数里,我们可以通过消息对象的属性直接提取文本内容:

  • 带图片的消息中,文本说明通常存储在message.caption属性中
  • 少数情况下,如果转发的消息同时包含独立文本段,可通过message.text获取

以下是完整的可运行代码示例:

from telegram import Update
from telegram.ext import Updater, MessageHandler, Filters, CallbackContext

def extract_text(update: Update, context: CallbackContext):
    msg = update.effective_message
    # 优先取图片的说明文本,无则取消息文本,最后兜底提示
    target_text = msg.caption or msg.text or "该转发消息没有可提取的文本内容"
    # 回复提取后的纯文本
    msg.reply_text(target_text)

def main():
    # 替换为你的机器人Token
    updater = Updater("YOUR_BOT_TOKEN")
    dp = updater.dispatcher
    
    # 注册带组合过滤器的消息处理器
    dp.add_handler(MessageHandler(Filters.forwarded & Filters.photo, extract_text))
    
    updater.start_polling()
    updater.idle()

if __name__ == "__main__":
    main()

额外说明

  • 若转发的是多张图片的消息,msg.photo会是一个按分辨率从低到高排列的列表,但文本依然统一存储在msg.caption中,不影响提取逻辑
  • 如果需要支持更多带文本的转发媒体(如视频、动图),可以扩展过滤器为Filters.forwarded & (Filters.photo | Filters.video | Filters.animation),提取逻辑保持不变
  • 可根据需求添加文本非空校验,避免发送空消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:05:46