9

I have a problem about file messages in python telegram bot. How can I receive file and read that file ? Or save it.

DR8002
  • 113
  • 1
  • 1
  • 7
  • 1
    what did you try? Where is your code? There is [telegram.Voice.get_file](https://python-telegram-bot.readthedocs.io/en/stable/telegram.voice.html#telegram.Voice.get_file) – furas Jun 08 '20 at 03:45

2 Answers2

10

You can:

  • Register a handler that listens to Document
  • get File object from the update (inside the listener using get_file)
  • then simply call .download() to download the document

Here a sample code to get you started:

from telegram.ext import Updater, MessageHandler, Filters

BOT_TOKEN = ' ... '

def downloader(update, context):
    context.bot.get_file(update.message.document).download()

    # writing to a custom file
    with open("custom/file.doc", 'wb') as f:
        context.bot.get_file(update.message.document).download(out=f)


updater = Updater(BOT_TOKEN, use_context=True)

updater.dispatcher.add_handler(MessageHandler(Filters.document, downloader))

updater.start_polling()
updater.idle()
Tibebes. M
  • 6,940
  • 5
  • 15
  • 36
5

Here is some changes for python-telegram-bot v20.

from telegram.ext import Application, MessageHandler, filters


async def downloader(update, context):
    file = await context.bot.get_file(update.message.document)
    await file.download_to_drive('file_name')



def main() -> None:
    application = Application.builder().token('BOT_TOKEN').build()

    application.add_handler(MessageHandler(filters.Document.ALL, downloader))

    application.run_polling()

if __name__ == '__main__':
    main()
jak bin
  • 380
  • 4
  • 8
  • And you can filter by filetype too if needed. Here are the docs: https://docs.python-telegram-bot.org/en/stable/telegram.ext.filters.html – Endogen Jul 26 '23 at 08:41