Как сделать возможность discord-боту проматывать аудио?

Рейтинг: 0Ответов: 0Опубликовано: 20.07.2023

На данный момент имеется подобный код:

import asyncio

import discord.ui
from discord import VoiceClient, FFmpegPCMAudio
from discord.ext.commands import Context


async def play(ctx: Context):
    path = r'C:\test.mp3'
    voice_client: VoiceClient = await ctx.author.voice.channel.connect()

    voice_client.play(discord.FFmpegPCMAudio(path))

    async def stop(interaction):
        voice_client.stop()
        await voice_client.disconnect()

    async def pause(interaction):
        voice_client.pause()

    async def resume(interaction):
        voice_client.resume()

    async def uptime(interaction):
        pass

    async def downtime(interaction):
        pass

    view = discord.ui.View()

    btn_stop = discord.ui.Button(label = 'Остановить')
    btn_stop.callback = stop
    view.add_item(btn_stop)

    btn_pause = discord.ui.Button(label = 'Пауза')
    btn_pause.callback = pause
    view.add_item(btn_pause)

    btn_resume = discord.ui.Button(label = 'Продолжить')
    btn_resume.callback = resume
    view.add_item(btn_resume)

    btn_uptime = discord.ui.Button(label = '+5 секунд')
    btn_uptime.callback = uptime
    view.add_item(btn_uptime)

    btn_downtime = discord.ui.Button(label = '-5 секунд')
    btn_downtime.callback = downtime
    view.add_item(btn_downtime)

    await ctx.send("Управление", view = view)

    while voice_client.is_playing() or voice_client.is_paused():
        await asyncio.sleep(0)

    await voice_client.disconnect()

Я никак не могу реализовать функционал кнопок промотки. В офф. документации ничего не нашёл, кроме как читать по чанкам, а ChatGPT и прочие (в т. ч. с выходом в интернет и довольно современной базой) рекомендует что-то вроде:

from discord.ffmpeg_opus_stream import FFmpegPCMAudio

audio_source = voice_client.play(FFmpegPCMAudio(path))  

async def uptime(interaction):
    audio_source.seek(10000)

Или:

async def uptime(interaction):
    audio_source = voice_client.source
    audio_source.seek(10000)

Но закономерно (насколько я понял, так это раньше работало) не работает.

Ответы

Ответов пока нет.