使用python-telegram-bot向Telegram用户发送文档报错如何解决
问题原因
你搞混了API的使用方向:
download方法是用来下载用户发给Bot的文件的,不属于Message对象本身,自然会报属性不存在的错误- 你当前的需求是给用户发文件,应该调用发送类API,而不是下载类API
另外你打开文件用的rb是只读二进制模式,也完全和你写的下载逻辑不匹配(下载写文件需要wb模式)。
解决方案
你使用的update+context的函数写法对应python-telegram-bot v13.x版本,直接调用context.bot.send_document即可实现发送文档的需求,示例代码如下:
def start(update, context): context.bot.send_document( # 指定要发送的目标聊天ID,就是当前触发命令的用户ID chat_id=update.effective_chat.id, # 传入本地文件的二进制对象 document=open('cv.pdf', 'rb'), # 可选参数:指定用户收到文件时显示的文件名,不填则默认用本地文件名 filename="个人简历.pdf" )
补充说明
document参数支持三种传值格式:本地文件路径字符串、打开的二进制可读文件对象、已经上传过的Telegram文件ID,大文件建议第一次上传后保存file_id,后续直接传ID速度更快- 如果你使用的是
v20.x异步版本,需要把函数改成异步写法:
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): await context.bot.send_document( chat_id=update.effective_chat.id, document=open('cv.pdf', 'rb'), filename="个人简历.pdf" )
- 如果是需要下载用户发送给Bot的文件,正确写法如下:
def download_user_doc(update, context): # 先拿到用户发送的文档对象 user_doc = update.message.document # 获取文件实例 file = context.bot.get_file(user_doc.file_id) # 下载到本地 file.download(custom_path="用户上传的简历.pdf")
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

