如何通过python-telegram-bot接收file_id?

时间:2016-06-30 13:44:49

标签: python telegram python-telegram-bot

我正在使用python-telegram-bot创建一个Telegram机器人,我需要一些方法来接收语音消息。为此,我需要下载它们,并且那个,我必须得到它们的file_id。但是,MessageHandler处理......好吧,消息和Handler给了我一个NotImplementedError。有没有办法获得file_id

3 个答案:

答案 0 :(得分:3)

下载语音邮件的最简单方法是使用语音过滤器注册MessageHandler。文档提供了有关Filtersvoice 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')

您可以在Transition-guide-to-Version-12.0

中阅读更多内容