@dragondoo

Как отправить аудиофайл в боте телеграм Python?

хочу сделать, чтобы на команду /song, бот отправлял аудиофайл, который хранится в той же папке, что и бот.
@dp.message(Command('song'))
async def send_songs(message):
    await message.answer("Hello!")
    await message.answer("World!")
    audio = open('audio.mp3', 'rb')
    await bot.send_audio(message.chat.id, audio)


помогите понять, почему не работает
  • Вопрос задан
  • 244 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Tim-developer
from aiogram.types import FSInputFile


@dp.message(Command('song'))
async def send_songs(message):
    await message.answer("Hello!")
    await message.answer("World!")
    audio = FSInputFile('audio.mp3') # используй FSInputFile вместо open
    await bot.send_audio(message.chat.id, audio)
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Сначала проверь путь. Ты указываешь относительный путь к файлу, а он рассчитывается исходя из текущей рабочей директории. Которая может совпадать или не совпадать с директорией где лежит скрипт, это зависит от способа запуска скрипта.

Так что лучше ориентируйся так. sys.argv[0] содержит путь к скрипту, а модуль pathlib позволяет манипулировать путями.
import sys
from pathlib import Path

BASE_DIR = Path(sys.argv[0]).parent.resolve()  # каталог скрипта
AUDIO = BASE_DIR / 'audio.mp3'  # файл в каталоге скрипта
#......
async def send_songs(message):
    await message.answer("Hello!")
    await message.answer("World!")
    audio = AUDIO.open('rb')
    await bot.send_audio(message.chat.id, audio)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы