54 lines
2.8 KiB
Python
54 lines
2.8 KiB
Python
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)) |