You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Telegram机器人报错:'Message'对象无'message'属性求修正

问题解决与修正代码

错误原因分析

  1. AttributeError核心问题:@dp.message_handler装饰的函数如果只传单个参数,这个参数是Message对象而非Update对象,所以不存在message属性,直接调用.text就能获取消息内容。
  2. 异步调用遗漏:Telegram Bot API的异步方法必须用await关键字调用,否则会阻塞或报错。
  3. 方法拼写错误:send_videoo是笔误,正确方法名是send_video。
  4. 方法参数缺失: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:31:06