код(только нужное):
class SMErrors:
class notChannelErr(Exception): pass
class notVoiceStateErr(Exception): pass
class alreadyPlayingErr(Exception): pass
class SongMaster(disnake.PCMVolumeTransformer):
async def join(ctx: disnake.ApplicationCommandInteraction):
voice = ctx.author.voice
if not voice: raise SMErrors.notChannelErr
if voice:
await voice.channel.connect()
async def disconnect(ctx: disnake.ApplicationCommandInteraction):
voice_state = ctx.guild.voice_client
if not voice_state:
raise SMErrors.notVoiceStateErr
if voice_state:
await voice_state.disconnect()
async def play(ctx: disnake.ApplicationCommandInteraction):
voice_state = ctx.guild.voice_client
if not voice_state:
await SongMaster.join(ctx)
voice_state = ctx.guild.voice_client
if voice_state.is_playing():
raise SMErrors.alreadyPlayingErr
voice_state.play(disnake.FFmpegPCMAudio("songs/song.mp3"))
class music(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.slash_command(name="play", description="Послушаем музыку?)")
async def _play(self, ctx: disnake.ApplicationCommandInteraction, prompt:str):
# await ctx.send("Я не могу воспроизвести трек сейчас, но я могу дать вам ссылку.\nПодождите...")
# results = sp.search(q=prompt, type="track", limit=1)
# if results["tracks"]["items"]:
# track_url = results["tracks"]["items"][0]["external_urls"]["spotify"]
# await ctx.edit_original_response(f"Я не могу воспроизвести трек сейчас, но я могу дать вам ссылку.\n**{track_url}**")
# else:
# await ctx.edit_original_response("Я не смог найти трек.")
await ctx.response.defer()
await SongMaster.play(ctx)
await ctx.send("Я запустил воспроизведение(возможно), но не того что вам надо.")
бот заходит канал, и становится обреченным на 15 минутное раздумие в молчании. Ошибок никаких нет. Pynacl установлен, ffmpeg тоже, mp3 на месте, права есть. но бот категорически молчит, как исправить?
ИЗМЕНЕНО:
по отладочным принтам, бот задумывается о жизни на строке
await voice.channel.connect()
но при этом, если после ввести команду /play повторно, тоесть попасть уже в тот случай когда функция join не вызывается, появляется новая ошибка:
File "c:\Users\user.DESKTOP-A29085V\Documents\Python proj\ReviBot\main.py", line 100, in _play
await SongMaster.play(ctx)
File "c:\Users\user.DESKTOP-A29085V\Documents\Python proj\ReviBot\main.py", line 57, in play
voice_state.play(disnake.FFmpegPCMAudio("songs/song.mp3"))
File "C:\Users\user.DESKTOP-A29085V\AppData\Local\Programs\Python\Python311\Lib\site-packages\disnake\voice_client.py", line 572, in play
raise ClientException("Not connected to voice.")
disnake.errors.ClientException: Not connected to voice.
Я думаю, говорить о том что бот при этом остается в канале - не надо.