Python Telegram机器人报错:'Message'对象无'message'属性求修正
问题解决与修正代码
错误原因分析
- AttributeError核心问题:
@dp.message_handler装饰的函数如果只传单个参数,这个参数是Message对象而非Update对象,所以不存在message属性,直接调用.text就能获取消息内容。 - 异步调用遗漏:Telegram Bot API的异步方法必须用
await关键字调用,否则会阻塞或报错。 - 方法拼写错误:
send_videoo是笔误,正确方法名是send_video。 - 方法参数缺失:
send_video和send_message都需要传入聊天ID(chat_id),send_video还需要指定视频文件路径。
修正后的完整代码
@dp.message_handler(content_types=['text']) async def handle_text_message(update): # 初始化下载器 dl = downloader.tiktok_downloader() # 全局变量需提前定义,若未定义请在函数外声明,比如last_use = None global last_use # 获取用户发送的文本(update是Message对象,直接调用.text) msg_text = update.text chat_id = update.chat.id # 获取聊天ID,用于后续发送消息/视频 # 尝试musicaldown下载 video_path = dl.musicaldown(url=msg_text, output_name='video.mp4') if video_path: # 异步发送视频,传入聊天ID和二进制读取的视频文件 await bot.send_video(chat_id=chat_id, video=open(video_path, 'rb')) return # 第一种方式失败,尝试ttscraper video_path = dl.ttscraper(url=msg_text, output_name="video.mp4") if video_path: await bot.send_video(chat_id=chat_id, video=open(video_path, 'rb')) return # 两种方式均失败,发送错误提示 await bot.send_message(chat_id=chat_id, text="无法下载视频,请检查链接后重试")
额外注意事项
- 确认
downloader模块的musicaldown和ttscraper方法返回值:若下载成功返回视频文件路径,失败返回False/None,否则需根据实际返回值调整判断逻辑。 - 全局变量
last_use若未提前定义,需在函数外部先声明(如last_use = None),否则会触发未定义错误。 - 发送视频时用
open(video_path, 'rb')以二进制模式读取文件,符合Telegram Bot API的参数要求。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

