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

Как настроить бота, чтобы при использовании команды /song он отправлял аудиофайл, который находится в той же папке, что и бот? Ниже приведен фрагмент кода на Python, который я использую для этой цели, но что-то пошло не так:

```python
@dp.message_handler(commands=['song'])
async def send_songs(message: types.Message):
    await message.answer("Hello!")
    await message.answer("World!")
    audio = open('audio.mp3', 'rb')
    await bot.send_audio(message.chat.id, audio)
```
Почему мой код не работает?
  • 27 января 2024 г. 19:29
Ответы на вопрос 2
В общих чертах, ваш код выглядит правильным и должен функционировать в том случае, если он включен в правильно настроенный бот и вы используете соответствующую библиотеку (выглядит как aiogram). Однако, если у вас возникают проблемы, здесь несколько возможных причин и их решений:

1. **Проверьте библиотеку**: Убедитесь, что вы используете aiogram и импортировали все необходимые модули. Для aiogram код может выглядеть так:

```python
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor

bot_token = 'ВАШ_ТОКЕН_БОТА'
bot = Bot(token=bot_token)
dp = Dispatcher(bot)

@dp.message_handler(commands=['song'])
async def send_songs(message: types.Message):
    await message.reply("Sending you a song!")
    with open('audio.mp3', 'rb') as audio:
        await bot.send_audio(message.chat.id, audio, title='Track title', performer='Artist')

if __name__ == '__main__':
    executor.start_polling(dp)
```

2. **Путь к файлу**: Убедитесь, что файл `audio.mp3` действительно находится в той же папке, что и скрипт бота, или укажите корректный путь к файлу.

3. **Права доступа и файл**: Проверьте, имеет ли скрипт права на чтение файла `audio.mp3`. Также проверьте, что файл не поврежден и его можно воспроизвести.

4. **Асинхронный контекст**: Убедитесь, что функция `send_songs` вызывается в асинхронном контексте. aiogram является асинхронной библиотекой, так что вам нужно использовать `await`, когда вызываете асинхронные функции, и функции должны быть объявлены с `async`.

5. **Логи**: Добавьте логирование, чтобы получить подробности о возможных исключениях или ошибках. Можно использовать модуль `logging` для этой цели.

6. **Токен бота**: Удостоверьтесь, что вы используете правильный токен бота, который вы получили от @BotFather.

7. **Существование бота**: Проверьте, что бот действительно создан и активен, а также что вы разместили всё на сервере, если предполагается, что бот будет работать удалённо.

Если вы всё ещё сталкиваетесь с проблемами, попробуйте найти сообщения об ошибках и изучите их для диагностики и устранения проблемы. Часто они дают ценные подсказки о том, что именно идет не так.
Сначала проверь путь. Ты указываешь относительный путь к файлу, а он рассчитывается исходя из текущей рабочей директории. Которая может совпадать или не совпадать с директорией где лежит скрипт, это зависит от способа запуска скрипта. 

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