Как сделать возможность discord-боту проматывать аудио?
На данный момент имеется подобный код:
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)
Но закономерно (насколько я понял, так это раньше работало) не работает.
Источник: Stack Overflow на русском