Задать вопрос
Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (2)

Лучшие ответы пользователя

Все ответы (3)
  • Некорректное переключение аудио. Где может крыться проблема?

    @Umys
    Для решения этой проблемы я предлагаю обернуть вызов self.play_next() в after в функцию для предотвращения непосредственного вызова. И работать с asyncio, чтобы вызов коллбэк функции был корректным.

    Попробуйте обновить вашу функцию play_next следующим образом:

    async def play_next(self):
    self.voice_client.pause()
    self.voice_client.stop()

    if self.music_queue.__len__() > 0:
    print("next comp")
    track_name, url = self.music_queue[0]['title'], self.music_queue[0]['url']
    if self.embed.fields.__len__() == 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)
    print("before = " + str(len(self.music_queue)))
    self.music_queue.pop(0)
    print("after = " + str(len(self.music_queue)))
    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"))

    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 до версии с префиксом "async":

    async def next_track_callback(self, interaction: disnake.Interaction):
    await interaction.response.defer()
    await self.play_next()

    Попробуйте)
    Ответ написан
    2 комментария