Ваш код имеет несколько проблем, которые могут мешать воспроизведению музыки. Давайте рассмотрим ключевые проблемы и изменим код, чтобы он работал правильно.
1. **Проблемы с подключением к голосовому каналу**: Метод `play()` должен использоваться для объекта `VoiceClient`, а не `voice_channel`. Вам нужно получить доступ к клиенту голоса, который вы получаете после подключения.
2. **Отсутствие проверки на наличие клиента голоса**: Перед воспроизведением музыки необходимо убедиться, что бот действительно подключен к голосовому каналу.
3. **Отсутствие ожидания**: Когда вы подключаетесь в голосовой канал, вам нужно использовать `await` при вызове `connect()`. Это важно, чтобы ваш код ожидал завершения подключения.
Вот обновленный вариант вашего кода:
```python
import disnake
from disnake.ext import commands
import os
bot = commands.Bot(command_prefix="!", intents=disnake.Intents.all())
@bot.command()
async def join(ctx):
voice_channel = ctx.author.voice.channel
if not voice_channel:
await ctx.send("Вы не находитесь в голосовом канале!")
return
# Подключение к голосовому каналу
await voice_channel.connect()
@bot.command()
async def leave(ctx):
voice_client = ctx.voice_client # Получаем клиента голоса
if voice_client.is_connected():
await voice_client.disconnect()
else:
await ctx.send("Бот не подключен к голосовому каналу!")
@bot.command()
async def play(ctx, *, file_name: str):
voice_client = ctx.voice_client # Получаем клиента голоса
if not voice_client:
await ctx.send("Бот не подключен к голосовому каналу!")
return
file_path = f'audio_files/{file_name}.mp3'
if os.path.isfile(file_path):
await ctx.send(f'Файл {file_name} успешно найден!')
voice_client.play(disnake.FFmpegPCMAudio(file_path))
else:
await ctx.send(f"Файл {file_name} не найден")
bot.run("token")
```
### Изменения в этом коде:
1. Заменил `ctx.message.author.voice.channel` на `ctx.author.voice.channel` для удобства.
2. Использовал `ctx.voice_client` для получения клиента голоса.
3. Добавлена проверка на наличие подключенного клиента голоса в команду `play` перед попыткой воспроизведения.
4. Убедился, что используются правильные проверки и возвращаются сообщения, если бот не подключен к голосу или если файл не найден.
Не забудьте установить и настроить `FFmpeg` на вашем компьютере, так как это обязательное условие для работы с аудиофайлами.