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
相关产品推荐
相关产品推荐

