aboutsummaryrefslogtreecommitdiffstats
path: root/cogs/music/play.py
blob: be21702eec3c3e8d775fcc3e39333ff5739bc5ac (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import os

import discord
import mutagen

from . import play_utils
from discord.ext import commands
import logging

logger = logging.getLogger(__name__)

class Play(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @discord.slash_command(name="grajcuj", description="grajcujmy wszyscy!")
    async def play(
            self,
            ctx: discord.ApplicationContext,
            query: str = discord.Option(str, "co zagrać??", required=True),
            source: str = discord.Option(str, "co zagrać??", required=True, choices=["local", "soundcloud", "youtube"])

    ):
        await ctx.defer(ephemeral=True)
        if source == "local":
            candidates = await play_utils.PlayUtils(self.bot).search_local(query)
            if candidates:
                embed = discord.Embed(title="Wyniki wyszukiwania", description="Wybierz plik do odtworzenia:", color=discord.Color.blue())
                view = discord.ui.View(disable_on_timeout=True)
                for i, candidate in enumerate(candidates, start=1):
                    filename = os.path.basename(candidate)
                    metadata = None
                    if os.path.splitext(filename)[1].lower() in ['.mp3', '.wav', '.opus']:
                        metadata = mutagen.File(candidate)
                        title = metadata.get('title', None)
                    if metadata and title:
                        embed.add_field(name=f"{i}. {title}", value="\u200b", inline=False)
                    else:
                        embed.add_field(name=f"{i}. {filename}", value="\u200b", inline=False)
                    button = discord.ui.Button(label=f"Play {i}")
                    async def button_callback(interaction: discord.Interaction, candidate=candidate):
                        await ctx.interaction.delete_original_response()
                        await play_utils.PlayUtils(self.bot).play(ctx, candidate)
                    button.callback = button_callback
                    view.add_item(button)
                await ctx.respond(embed=embed, view=view, ephemeral=True)
            else:
                await ctx.respond("Nie znaleziono pliku do odtworzenia", ephemeral=True)



    @discord.slash_command(name="grajcuj_zkompresowane", description="grajcujmy wszyscy w wysokiej jakosci!")
    async def play_compressed(self, ctx: discord.ApplicationContext, url: str = discord.Option(str, "co zagrać??", required=True)):
        await ctx.defer()
        url, title = await play_utils.PlayUtils(self.bot).get_url(ctx, url)
        filename = await play_utils.PlayUtils(self.bot).download(ctx, url)
        filename = await play_utils.PlayUtils(self.bot).compress(ctx, filename)
        await play_utils.PlayUtils(self.bot).play(ctx, filename, title)

def setup(bot):
    bot.add_cog(Play(bot))