我正在使用 制作 Telegram 机器人python-telegram-bot
,我需要某种方式来接收语音消息。为此,我需要下载它们,为此,我必须获得它们file_id
的 s。但是,MessageHandler
句柄...嗯,消息,并Handler
给了我一个NotImplementedError
. 有没有办法得到file_id
?
问问题
9882 次
4 回答
7
我知道这个问题很老,但我在最新版本(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')
于 2019-12-03T08:47:59.887 回答
4
下载语音消息的最简单方法是使用语音过滤器注册 MessageHandler。文档提供了有关过滤器和语音模块的更多信息。
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))
于 2016-12-20T23:36:04.927 回答
2
在 13+ 版本中,您需要使用 update.message。语音.file_id 而不是 update.message。音频.file_id。所以代码将是:
def voice_handler(update: Update, context: CallbackContext):
file = context.bot.getFile(update.message.voice.file_id)
file.download('./voice.ogg')
于 2021-03-29T04:30:12.133 回答
2
我将向您展示一个带有照片文件的示例,但它适用于任何文件(您只需要更改参数)
from telegram.ext import Updater, CommandHandler
from telegram.ext.callbackcontext import CallbackContext
from telegram.update import Update
def start (update: Update, context: CallbackContext):
# getting chat_id:
chatID = update.effective_chat.id
# sending the photo to discover its file_id:
photo1 = context.bot.send_photo(chat_id=chatID, photo=open('photo1.jpg','rb'))
photo1_fileID = photo1.photo[-1].file_id
context.bot.send_message(chat_id=update.effective_chat.id, text=('file_id photo1.jpg = ' + photo1_fileID))
def main():
updater = Updater(token='TOKEN', use_context=True)
dispatcher = updater.dispatcher
dispatcher.add_handler(CommandHandler('start', start))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
于 2021-11-05T05:37:44.940 回答