Telebot, отправка файла по его ID

Нужно отправить аудио-файл по его ID в телеграмм с помощью Telebot. Кода как такового нет. Начал писать бота, он должен отправлять файлы. Размер каждого ~45мб. Отправлять каждый раз с десяток таких файлов, да ещё нескольким пользователям, постоянно загружая их заново - неудобно, да и сервера телеги спасибо точно не скажут. Вычитал, что можно один раз загрузить файл, а потом отправлять его прямиком по ID, но как это сделать - не нашёл


Ответы (3 шт):

Автор решения: Serg Bocharov

Вот же уроки

import telebot

bot = telebot.TeleBot(config.token)

@bot.message_handler(commands=['test'])
def find_file_ids(message):
    for file in os.listdir('music/'):
        if file.split('.')[-1] == 'ogg':
            f = open('music/'+file, 'rb')
            msg = bot.send_voice(message.chat.id, f, None)
            # А теперь отправим вслед за файлом его file_id
            bot.send_message(message.chat.id, msg.voice.file_id, reply_to_message_id=msg.message_id)
        time.sleep(3)


if __name__ == '__main__':
    bot.infinity_polling()

UPDATE. Для определенного типа файлов используйте соответствующую функцию:

# All send_xyz functions which can take a file as an argument, can also take a file_id instead of a file.
# sendPhoto
photo = open('/tmp/photo.png', 'rb')
tb.send_photo(chat_id, photo)
tb.send_photo(chat_id, "FILEID")

# sendAudio
audio = open('/tmp/audio.mp3', 'rb')
tb.send_audio(chat_id, audio)
tb.send_audio(chat_id, "FILEID")

## sendAudio with duration, performer and title.
tb.send_audio(CHAT_ID, file_data, 1, 'eternnoir', 'pyTelegram')

# sendVoice
voice = open('/tmp/voice.ogg', 'rb')
tb.send_voice(chat_id, voice)
tb.send_voice(chat_id, "FILEID")

# sendDocument
doc = open('/tmp/file.txt', 'rb')
tb.send_document(chat_id, doc)
tb.send_document(chat_id, "FILEID")

# sendSticker
sti = open('/tmp/sti.webp', 'rb')
tb.send_sticker(chat_id, sti)
tb.send_sticker(chat_id, "FILEID")

# sendVideo
video = open('/tmp/video.mp4', 'rb')
tb.send_video(chat_id, video)
tb.send_video(chat_id, "FILEID")

# sendVideoNote
videonote = open('/tmp/videonote.mp4', 'rb')
tb.send_video_note(chat_id, videonote)
tb.send_video_note(chat_id, "FILEID") 
→ Ссылка
Автор решения: Илья Гаврилов
bot.send_voice(message.chat.id, "Нужный_id")

Вот полный код:

# Принимаем аудио
@bot.message_handler(content_types=["voice"])
def voice_cmd(message):
        # Узнаем id, если требуется
        id_voice = message.voice.file_id
        print(id_voice) # Вывод id сообщения в консоль
        # Отправка нужного аудио
        bot.send_voice(message.chat.id, "Id сообщения, которое хотим отправить")
→ Ссылка
Автор решения: Александр Бабенко

Работает

Хоть и пишу через aiogram, но думаю что и с остальными библиотеками сработает, просто передайте сам айдишник как параметр медиа/аудио/итд, оно работает, и не нужны всякие танцы с бубнами по типу InputFile, InputMediaAudio Сработало

→ Ссылка