目标:我正在尝试设置一个电报机器人,它会下载发送给它的图片。
在使用
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()
到目前为止我的观察:
在我看来,这不应该那么忙碌......
任何帮助将不胜感激。我不认为,在图书馆进行大修之后,我将是唯一一个为此苦苦挣扎的人。 预先感谢并祝大家编码愉快:)
我已经尝试了各种与此相关的 stackoverflow-帖子,从我读过的所有内容来看,这个示例片段,专门使用 v20 语法设计的应该可以工作。它适用于 pdf(参见上面奇怪的行为),但不适用于图像,这让我相信这是与过滤器相关的某种问题。
我尝试过的过滤器:
filters.Document.IMAGE
filters.Document.JPG
filters.Document.ALL
问题:
然而不幸的是,文档之外的大多数示例都是针对某个版本 <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
的维护者。