from discord.utils import basic_autocomplete from discord import Member, SlashCommandGroup, Option, AutocompleteContext from discord.ext.commands import Cog, cooldown, BucketType, command, has_permissions, bot_has_permissions, Context, guild_only, bot_has_guild_permissions, check import wavelink from Christmas.Database import database from Christmas.UI.Embed import Music_Embed async def search_music(ctx: AutocompleteContext): try: query_result = await wavelink.Playable.search(str(ctx.value), source=wavelink.TrackSource.YouTube) data = [] for query in query_result: if query is None: continue if len(query.title) > 50: title = query.title[:50]+"..." else: title = query.title data.append(title) return data except Exception as e: print(e) return ["검색에 실패했어요!"] class CMusic(Cog): def __init__(self, bot): self.bot = bot MUSIC = SlashCommandGroup(name="음악", description="음악을 재생합니다.") # @MUSIC.command(name="재생", description="음악을 재생합니다.") @cooldown(1, 10, BucketType.user) @guild_only() async def _play(self, ctx: Context, search: Option(str, name="검색", description="검색할 음악을 입력해주세요.", required=True, autocomplete=basic_autocomplete(search_music))): if not database.get_guild(ctx.guild.id)["music"] == True: return await ctx.respond(embed=Music_Embed.music_notenable(), ephemeral=True) if ctx.author.voice == None or ctx.author.voice.channel == None: return await ctx.respond(embed=Music_Embed.author_not_voice(), ephemeral=True) player = None if ctx.guild.me.voice == None or ctx.guild.me.voice.channel == None: player = await ctx.author.voice.channel.connect(cls=wavelink.Player) elif ctx.author.voice.channel != ctx.guild.me.voice.channel: await ctx.guild.me.voice.channel.move(ctx.author.voice.channel) player = await ctx.guild.me.voice.channel.connect(cls=wavelink.Player) else: player = wavelink.Node.get_player(ctx.guild.id) #try: # query_result = await wavelink.Playable.search(str(search), source=wavelink.TrackSource.YouTube) # if query_result == None: return await ctx.respond(embed=Music_Embed.music_notfound(), ephemeral=True) # if player.is_playing: # await wavelink.Queue.put_wait(query_result[0]) # await ctx.respond(embed=Music_Embed.music_queue(query_result[0].title), ephemeral=True) # else: # # await player.play(query_result[0]) # await ctx.respond(embed=Music_Embed.music_play(query_result[0].title), ephemeral=True) def setup(bot): bot.add_cog(CMusic(bot))