如何使用python电报bot将pdf文件发送回用户?

时间:2020-06-18 08:34:44

标签: python pdf telegram-bot python-telegram-bot sendfile

我尝试使用update.sendDocument(chat_id = update.message.chat_id, document = open(something.pdf, 'b')),但没有返回pdf文件。有帮助吗?

2 个答案:

答案 0 :(得分:0)

作为参考,这是一个对我有用的完整示例。 如果仍然无法正常工作,请确保您发送的pdf文档低于20 MB 按照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)

答案 1 :(得分:-1)

要将文档发送给用户,您必须拥有该文档的 file_id

假设用户将文档发送到 bot 并且您想发回给用户,这是我的解决方案:

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)

def main() 上,您必须添加:

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

通过这最后一行,您的 bot 将了解当用户向其发送一个文档且仅是一个文档时,它会调用 def file_handler