@Foxrik

Как создать очередь проигрывания музыки для дискорд бота?

Я столкнулся с такой проблемой,я не знаю как зделать очередь проигрывания музыки но у меня есть комманда play,leave,pause,resume,skip и тд. Подскажите пожалуйста как это зделать?
Play:
#Комманда для проигрывания музыки
@Alice.command()
async def play(ctx, *, command = None):
    await ctx.channel.purge( limit = 1 )
    global server, server_id, name_channel
    author = ctx.author
    server = ctx.guild
    if command == None:
        server = ctx.guild
        name_channel = author.voice.channel.name
        voice_channel = discord.utils.get(server.voice_channels, name = name_channel)
    params = command.split(' ')
    if len(params) == 1:
        server = ctx.guild
        sourse = params[0]
        name_channel = ctx.author.voice.channel.name
        voice_channel = discord.utils.get(server.voice_channels, name = name_channel)
        print('param 1')
    elif len(params) == 3:
        server = ctx.guild
        server_id = params[0]
        voice_id = params[1]
        sourse = params[2]
        try:
            server_id = int(server_id)
            voice_id = int(voice_id)
        except:
            await ctx.channel.send(f'{author.mention}, id сервера или голосового каннала должно быть численным  ')
            return
        print('param 3')
        server = Alice.get_guild(server_id)
        voice_channel = discord.utils.get(server.voice_channels, id=voice_id)
    else:
        await ctx.channel.send(f'{author.mention}, я тебя не понимаю!')
        return
    voice = discord.utils.get(Alice.voice_clients, guild = server)
    if voice is None:
        await voice_channel.connect()
        voice = discord.utils.get(Alice.voice_clients, guild=server)
        
    if sourse == None:
        pass
    elif sourse.startswith('http'):
        if not check_domains(sourse):
            await ctx.channel.send(f'{author.mention}, Твоя ссылка не разрешена для использования напиши Wolfrik#8341!')
            return
        song_there = os.path.isfile('song.mp3')
        try:
            if song_there:
                os.remove('song.mp3')
        except PermissionError:
            await ctx.channel.send('Недостаточно прав для удаления файла!')
            return

        ydl_opts = {
            'format': 'bestaudio/best',
            'postprocessors': [
                {
                    'key': 'FFmpegExtractAudio',
                    'preferredcodec': "mp3",
                    'preferredquality': '192',
                }
            ],
        }

        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            ydl.download([sourse])
        for file in os.listdir('./'):
            if file.endswith('.mp3'):
                os.rename(file, 'song.mp3')
        voice.play(discord.FFmpegPCMAudio('song.mp3'))
    else:
        voice.play(discord.FFmpegPCMAudio(f'music/{sourse}'))
  • Вопрос задан
  • 251 просмотр
Решения вопроса 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Описать такие функции как плейлист, очередь, завершение воспроизведения, переключение трека, очистка очереди, добавление в очередь.

Так же стоит использовать объектный подход, поскольку плеер должен по-разному работать при различных состояниях (пустая очередь, есть очередь и на паузе, есть очередь и играет) и работать с такой лестницей условий как в коде выше просто неудобно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы