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))