2023-12-02 06:03:50 +00:00
from discord . utils import basic_autocomplete
from discord import Member , SlashCommandGroup , Option , AutocompleteContext
2023-11-26 04:27:34 +00:00
from discord . ext . commands import Cog , cooldown , BucketType , command , has_permissions , bot_has_permissions , Context , guild_only , bot_has_guild_permissions , check
2023-12-02 06:03:50 +00:00
import wavelink
2023-11-26 04:27:34 +00:00
2023-12-02 06:03:50 +00:00
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 [ " 검색에 실패했어요! " ]
2023-11-26 04:27:34 +00:00
class CMusic ( Cog ) :
def __init__ ( self , bot ) :
self . bot = bot
2023-12-02 06:03:50 +00:00
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)
2023-11-26 04:27:34 +00:00
def setup ( bot ) :
bot . add_cog ( CMusic ( bot ) )