Для решения этой проблемы предлагаю следующее: обернуть вызов self.play_next() в функцию after, чтобы избежать непосредственного вызова. Также рекомендую использовать asyncio, чтобы правильно вызвать коллбэк функции. Обновленная функция play_next выглядит так:
```python
async def play_next(self):
self.voice_client.pause()
self.voice_client.stop()
if len(self.music_queue) > 0:
track_name, url = self.music_queue[0]['title'], self.music_queue[0]['url']
if len(self.embed.fields) == 0:
self.embed.add_field(name="Playing now", value=track_name, inline=True)
else:
self.embed.set_field_at(index=0, name="Playing now", value=track_name, inline=True)
self.music_queue.pop(0)
try:
self.que_fetch()
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
source = disnake.PCMVolumeTransformer(disnake.FFmpegPCMAudio(source=url, **FFMPEG_OPTIONS, executable=r"dependencies\FFMPEG\bin\ffmpeg.exe"))
async def play_next_callback(e):
coro = self.play_next()
future = asyncio.run_coroutine_threadsafe(coro, self.bot.loop)
future.result()
self.voice_client.play(source=source, after=play_next_callback)
self.is_playing = True
except disnake.ClientException as e:
print("player playing!: ", e)
except Exception as e:
print(e)
else:
print("stopping!")
self.embed.clear_fields()
coro = self.stopall()
asyncio.run_coroutine_threadsafe(coro=coro, loop=self.bot.loop).result()
return
```
Также обновите функцию next_track_callback, чтобы она была асинхронной:
```python
async def next_track_callback(self, interaction: disnake.Interaction):
await interaction.response.defer()
await self.play_next()
```