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

使用python-telegram-bot获取语音文件时遇RuntimeWarning问题求助

解决python-telegram-bot中协程未await的RuntimeWarning问题

错误原因

  1. context.bot.get_file是异步协程方法,调用时必须用await关键字等待其执行完成,否则会触发RuntimeWarning: coroutine 'ExtBot.get_file' was never awaited错误。
  2. 你把机器人应用的初始化代码(ApplicationBuilder创建实例、添加handler)放在了get_voice异步函数内部,这会导致每次收到语音消息都重复创建应用,逻辑完全错误。

修正后的代码

from telegram import Update
from telegram.ext import ApplicationBuilder, CallbackContext, MessageHandler, filters

TOKEN = "你的机器人令牌"

async def get_voice(update: Update, context: CallbackContext):
    # 给get_file添加await,等待协程返回文件对象
    new_file = await context.bot.get_file(update.message.voice.file_id)
    # 打印文件对象信息,而不是固定字符串
    print(new_file)
    
    # 可选:下载语音文件到本地,比如保存为received_voice.ogg
    # await new_file.download_to_drive("received_voice.ogg")

if __name__ == "__main__":
    # 应用初始化和handler注册只执行一次,放在函数外部
    app = ApplicationBuilder().token(TOKEN).build()
    app.add_handler(MessageHandler(filters.VOICE, get_voice))
    
    # 启动机器人的轮询模式
    app.run_polling()

关键修改点

  • 调用context.bot.get_file时添加await,确保协程被正确执行并获取返回结果
  • 将机器人应用的初始化逻辑移到get_voice函数外,放在主程序入口中,避免重复创建应用
  • 修正print语句,实际打印文件对象而非固定字符串,方便调试
  • 补充了下载文件的示例代码,按需使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:30:43