Telebot, отправка файла по его ID
Нужно отправить аудио-файл по его ID в телеграмм с помощью Telebot. Кода как такового нет. Начал писать бота, он должен отправлять файлы. Размер каждого ~45мб. Отправлять каждый раз с десяток таких файлов, да ещё нескольким пользователям, постоянно загружая их заново - неудобно, да и сервера телеги спасибо точно не скажут. Вычитал, что можно один раз загрузить файл, а потом отправлять его прямиком по ID, но как это сделать - не нашёл
Ответы (3 шт):
Вот же уроки
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

