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?
Asked
Active
Viewed 1.7k times
5

codingsospls
- 51
- 1
- 1
- 2
2 Answers
4
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)

trohit
- 319
- 3
- 6
-
1Damn... Thanks man. I wonder why author didn't gave you a right answer. Works like a charm. – Kirill Ivanov May 26 '21 at 19:27
1
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
.

Rafael Colombo
- 339
- 1
- 2
- 8
-
OP didn't asked how to handle file form client, he asked how to SEND file to client. – Alex G.P. Apr 27 '21 at 16:00
-
1IMHO, perfectly valid answer. the handling part is for illustration and to make a complete example, together with valid file_id. – Artem Trunov Jul 08 '21 at 18:41
-