【发布时间】:2020-10-08 06:15:48
【问题描述】:
我尝试使用update.sendDocument(chat_id = update.message.chat_id, document = open(something.pdf, 'b')),但它没有返回 pdf 文件。有什么帮助吗?
【问题讨论】:
标签: python pdf telegram-bot python-telegram-bot sendfile
我尝试使用update.sendDocument(chat_id = update.message.chat_id, document = open(something.pdf, 'b')),但它没有返回 pdf 文件。有什么帮助吗?
【问题讨论】:
标签: python pdf telegram-bot python-telegram-bot sendfile
要将文档发送给用户,您必须拥有该文档的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。
【讨论】:
作为参考,这是一个完整的工作示例,对我有用。 如果它仍然不起作用,请确保您发送的 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)
【讨论】: