我正在使用python-telegram-bot
创建一个Telegram机器人,我需要一些方法来接收语音消息。为此,我需要下载它们,并且那个,我必须得到它们的file_id
。但是,MessageHandler
处理......好吧,消息和Handler
给了我一个NotImplementedError
。有没有办法获得file_id
?
答案 0 :(得分:3)
下载语音邮件的最简单方法是使用语音过滤器注册MessageHandler。文档提供了有关Filters和voice module的更多信息。
import telegram
from telegram.ext import Updater
def voice_handler(bot, update):
file = bot.getFile(update.message.voice.file_id)
print ("file_id: " + str(update.message.voice.file_id))
file.download('voice.ogg')
updater = Updater(token='TOKEN')
dispatcher = updater.dispatcher
dispatcher.add_handler(MessageHandler(Filters.voice, voice_handler))
答案 1 :(得分:1)
在 13+ 版本中,您需要使用 update.message.voice.file_id 而不是 update.message.audio.file_id。所以代码将是:
def voice_handler(update: Update, context: CallbackContext):
file = context.bot.getFile(update.message.voice.file_id)
file.download('./voice.ogg')
答案 2 :(得分:0)
我知道这个问题很旧,但是我在最新版本(12+)中遇到了这个问题
因此,似乎已弃用了回调函数中的botpass_user_data ,从现在开始,您应该使用基于上下文的回调。
CallbackContext是一个包含所有额外上下文的对象 有关更新,错误或作业的信息。
使用CallbackContext更改为新样式:
def voice_handler(update: Update, context: CallbackContext):
file = context.bot.getFile(update.message.audio.file_id)
file.download('./voice.ogg')
中阅读更多内容