如何让aiogram框架开发的机器人实现回复音频消息的功能?
aiogram音频消息处理功能修正方案
原有代码错误点
- 未先判断消息类型是否为音频,直接访问音频属性会触发异常
- aiogram的Message对象中音频属性为小写
audio,不是大写开头的Audio - 仅实现了时长判断逻辑,无回复音频的相关代码
完整实现代码
from aiogram import Bot, Dispatcher, types from aiogram.types import ContentType # 替换为你的机器人token BOT_TOKEN = "your_bot_token_here" bot = Bot(token=BOT_TOKEN) dp = Dispatcher(bot) # 装饰器过滤仅接收音频消息 @dp.message(content_types=ContentType.AUDIO) async def process_audio(message: types.Message): # 时长判断逻辑 if message.audio.duration <= 60: # 示例1:回复文本提示 await message.reply("已收到时长60秒以内的音频") # 示例2:回复自定义音频(三选一即可) # 方式a:传本地音频文件 # await message.answer_audio(audio=types.InputFile("test.mp3")) # 方式b:传已上传过的音频file_id,性能更高 # await message.answer_audio(audio="your_audio_file_id") # 示例3:原样返回用户发送的音频 # await message.answer_audio(audio=message.audio.file_id) else: await message.reply("音频时长超过60秒,不符合要求") if __name__ == "__main__": from aiogram import executor executor.start_polling(dp, skip_updates=True)
注意事项
- 如果你需要给用户发送音频,优先使用file_id的方式:你可以先手动给机器人发送一次目标音频,打印
message.audio.file_id获取对应id,后续直接调用即可,无需重复上传本地文件 - 上述代码适用于aiogram 2.x版本,如果你使用3.x版本,仅需要调整路由注册和服务启动逻辑即可,音频属性调用规则不变
内容的提问来源于stack exchange,提问作者Mureek
相关产品推荐
相关产品推荐

