skip to Main Content

I tried to use update.sendDocument(chat_id = update.message.chat_id, document = open(something.pdf, 'b')) but it did not return me a pdf file. Any help?

2

Answers


  1. For reference, here’s a full working example, that worked for me.
    If it still doesnt work, ensure that the pdf docs you send are below 20 MB
    as per https://core.telegram.org/bots/api#sending-files

    #!/usr/bin/python
    import sys
    import time
    import telepot
    import cookie
    from telepot.loop import MessageLoop
    import pdb
    
    def handle(msg):
        content_type, chat_type, chat_id = telepot.glance(msg)
        print(content_type, chat_type, chat_id)
        if content_type == 'text' and msg["text"].lower() == "news":
            # let the human know that the pdf is on its way        
            bot.sendMessage(chat_id, "preparing pdf of fresh news, pls wait..")
            file="/home/ubuntu/web/news.pdf"
    
            # send the pdf doc
            bot.sendDocument(chat_id=chat_id, document=open(file, 'rb'))
        elif content_type == 'text':
            bot.sendMessage(chat_id, "sorry, I can only deliver news")
    
    # replace XXXX.. with your token
    TOKEN = 'XXXXXXXXXXXXXXXXXXXX'
    bot = telepot.Bot(TOKEN)
    MessageLoop(bot, handle).run_as_thread()
    print ('Listening ...')
    # Keep the program running.
    while 1:
        time.sleep(10)
    
    Login or Signup to reply.
  2. To send document to user you must have the file_id of that document.

    Assuming that the user sent the document to bot and you want to send back to user, this is my solution:

    def file_handler (update, context):
        chat_id = update.message.chat_id
        ## retrieve file_id from document sent by user
        fileID = update.message['document']['file_id']
        context.bot.sendDocument(chat_id = chat_id,
                                 caption = 'This is the file that you've sent to bot',
                                 document = fileID)
    

    And on def main() you must add:

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

    With this last line, your bot will understand that when user send it a document, and only a document, it will call def file_handler.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search