使用电报机器人(python-telegram-bot)下载文件(规格图像)

问题描述 投票:0回答:1

目标:我正在尝试设置一个电报机器人,它会下载发送给它的图片。

在使用

requests
进行一些手动操作后,我宁愿使用 python-telegram-bot 库。然而不幸的是,文档之外的大多数示例都是为某些版本 <20, the official docs are purely written for Versions >20 编写的,不幸的是从未涵盖这个主题,使我能够编写工作代码。 我不想降级我的库的版本,我想了解当前版本(v21.x.x)。

我的相关当前代码看起来像这样:

from dotenv import load_dotenv
import os
import asyncio
import telegram
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes, ApplicationBuilder
from telegram.ext import InlineQueryHandler, ExtBot

load_dotenv()
TOKEN = os.getenv('TOKEN')


### **Downloader**
async def downloader(update: Update, context: ContextTypes.DEFAULT_TYPE):
    logging.DEBUG("in downloader app!")
    new_file = await update.message.effective_attachment[-1].get_file() # [-1] for largest size of photo
    file = await new_file.download_to_drive()
    # file2 = await ExtBot.get_file()
    return file

### **Main**
if __name__ == '__main__':
    application = ApplicationBuilder().token(TOKEN).build()

    downloader_handler = MessageHandler(filters.Document.IMAGE, downloader) #**here are the filters**;
    application.add_handler(downloader_handler)

    #file_handler = MessageHandler(filters.Document.JPG, downloader)   # another try, also Document.ALL 
    #application.add_handler(file_handler)

    application.run_polling()

到目前为止我的观察:

  • 当为 Document.ALL 设置过滤器并且我发送 pdf 文件时,它似乎进入了下载器,但 pdf 我无法每次都检索下载的 pdf(似乎有时会将其保存到未知的路径)对我来说)
  • 当我发送图像(jpg)时,似乎从未输入下载器(没有调试/打印语句)
  • 当尝试用其他帖子中的片段替换代码时,我遇到了一堆错误,因为它似乎最依赖于 v>20 的编写方式。

在我看来,这不应该那么忙碌......


任何帮助将不胜感激。我不认为,在图书馆进行大修之后,我将是唯一一个为此苦苦挣扎的人。 预先感谢并祝大家编码愉快:)

我已经尝试了各种与此相关的 stackoverflow-帖子,从我读过的所有内容来看,这个示例片段,专门使用 v20 语法设计的应该可以工作。它适用于 pdf(参见上面奇怪的行为),但不适用于图像,这让我相信这是与过滤器相关的某种问题。

我尝试过的过滤器

  • filters.Document.IMAGE
  • filters.Document.JPG
  • filters.Document.ALL

问题

  • 哪个过滤器适合 jpg?
  • 我还缺少什么?
python bots telegram python-telegram-bot
1个回答
0
投票

然而不幸的是,文档之外的大多数示例都是针对某个版本 <20, the official docs are purely written for Versions >20 编写的,不幸的是,从未在扩展范围内涵盖该主题,从而使我能够编写工作代码。

PTB 团队提供的所有文档都是 v20+ 的最新文档。请查看此处了解可用资源的概述。

有时会将其保存到我未知的路径

方法

File.download_to_drive
为您提供存储路径作为返回值。在您的代码中,您已经将该返回值保存到变量
file
。打印/记录该文件路径应该有助于解决问题。请注意,您还可以通过相应的参数

指定自定义路径来保存文件

当我发送图像(jpg)时,似乎从未输入下载器(没有调试/打印语句)

filters.Document.*
捕获设置了
Message.document
的消息。如果您以“压缩”模式发送图像,则消息将代替
Message.photo
设置。您可以使用
filters.PHOTO
来捕获这些消息。

我还缺少什么?

另请查看专门用于 在 PTB 中处理文件和媒体

的 wiki 页面

免责声明:我目前是

python-telegram-bot
的维护者。

© www.soinside.com 2019 - 2024. All rights reserved.