如何在电报python bot中保存照片?

时间:2018-05-17 09:50:30

标签: python-3.x photo telegram-bot python-telegram-bot

我想写一个保存照片的电报机器人。 这是我的代码,但它不起作用。 我不知道我的问题是什么?

def image_handler(bot, update):
    file = bot.getFile(update.message.photo.file_id)
    print ("file_id: " + str(update.message.photo.file_id))
    file.download('image.jpg')

updater.dispatcher.add_handler(MessageHandler(Filters.photo, image_handler))
updater.start_polling()
updater.idle()
请求帮我解决问题。

4 个答案:

答案 0 :(得分:3)

update.message.photo是一组照片尺寸(PhotoSize对象)。

使用file = bot.getFile(update.message.photo[-1].file_id)。这将获得最大尺寸的图像。

答案 1 :(得分:1)

这是我的代码

from telegram.ext import *
import telegram

def start_command(update, context):
    name = update.message.chat.first_name
    update.message.reply_text("Hello " + name)
    update.message.reply_text("Please share your image")

def image_handler(update, context):
    file = update.message.photo[0].file_id
    obj = context.bot.get_file(file)
    obj.download()
    
    update.message.reply_text("Image received")

def main():
    print("Started")
    TOKEN = "your-token"
    updater = Updater(TOKEN, use_context = True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start_command))

    dp.add_handler(MessageHandler(Filters.photo, image_handler))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

答案 2 :(得分:0)

与接受的答案所暗示的不同,您实际上并不需要 bot 对象来获取文件:

file = update.message.photo[-1].get_file()

然后下载文件:

path = file.download("output.jpg")

将其用于进一步处理或仅将其保存在您的设备上 :)

答案 3 :(得分:-2)

@dp.message_handler(commands='start')
9 async def s_photo(message: types.Message):
10 """获取str类型的json文件"""
11photostr = 等待 bot.get_user_profile_photos(message.from_user.id)
12 """解析str为json"""
13 photojson = json.loads(photostr.as_json())
14 """将文件 unic 代码提供给 get_file 方法"""
15 photo = await bot.get_file(photojson['photo'][0][0]['file_id'])
16 """用下载方法结束下载对象"""
17 downloadphoto = await photo.download('文件名'+'.jpeg')