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

Pyrogram调用search_messages报400 INPUT_FILTER_INVALID错误求助

解决Pyrogram中使用VOICE_NOTE过滤器调用search_messages报错INPUT_FILTER_INVALID的问题

问题原因

Telegram官方API的messages.search接口(Pyrogram的search_messages方法底层调用此接口)不支持VOICE_NOTE类型的过滤器,这是API本身的限制,和你使用用户账号而非机器人账号无关。而你之前用Telethon的get_messages能正常工作,是因为Telethon默认使用的是messages.getHistory接口,该接口支持语音消息过滤器。

解决方案

改用Pyrogram的get_chat_history方法替代search_messages,这个方法对应Telegram的messages.getHistory接口,支持VOICE_NOTE过滤器,逻辑和你之前用Telethon的get_messages一致:

async for vc in __usr__.get_chat_history(
    chat_id=message.chat.id,
    filter=pyrogram.enums.MessagesFilter.VOICE_NOTE,
    from_user=message.chat.id
):
    # 在这里实现统计语音消息数量、计算平均时长的逻辑
    # 示例:count += 1; total_duration += vc.voice_note.duration
    pass

补充说明

如果你的场景确实需要结合搜索关键词和语音过滤,只能先通过search_messages获取结果,再在本地过滤出语音消息(效率较低),示例如下:

async for msg in __usr__.search_messages(
    chat_id=message.chat.id,
    from_user=message.chat.id
):
    if msg.voice_note:
        # 处理语音消息
        pass

但对于你统计自身语音消息数量和平均时长的需求,第一种方案(get_chat_history)更高效且符合API规范。

内容的提问来源于stack exchange,提问作者hellbowe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:50:58