2023-12-02 06:03:50 +00:00
from discord . utils import basic_autocomplete
2023-12-02 10:42:36 +00:00
from discord import Member , SlashCommandGroup , Option , AutocompleteContext , Color
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-12-02 10:42:36 +00:00
import random
2023-12-03 10:06:21 +00:00
import pendulum
2023-12-02 06:03:50 +00:00
from Christmas . Database import database
2023-12-02 10:42:36 +00:00
from Christmas . UI . Embed import Music_Embed , ChristmasEmbed
from Christmas . config import ChristmasConfig
2023-12-02 06:03:50 +00:00
2023-11-26 04:27:34 +00:00
class CMusic ( Cog ) :
def __init__ ( self , bot ) :
self . bot = bot
2023-12-02 10:42:36 +00:00
self . config = ChristmasConfig ( )
2023-11-26 04:27:34 +00:00
2023-12-02 06:03:50 +00:00
MUSIC = SlashCommandGroup ( name = " 음악 " , description = " 음악을 재생합니다. " )
#
2023-12-02 10:42:36 +00:00
@MUSIC.command ( name = " 재생 " , description = " LOFI 음악을 재생합니다. " )
2023-12-02 06:03:50 +00:00
@cooldown ( 1 , 10 , BucketType . user )
@guild_only ( )
2023-12-02 10:42:36 +00:00
async def _play ( self , ctx : Context ) :
if not await database . get_guild ( ctx . guild . id ) : return await ctx . respond ( embed = ChristmasEmbed ( title = " ❌ 에러! " , description = " 서버가 가입되어있지 않아요! 서버를 가입해주세요! " , color = Color . red ( ) ) , ephemeral = True )
2023-12-03 10:06:21 +00:00
await ctx . defer ( )
2023-12-02 10:42:36 +00:00
get_guild = await database . get_guild ( ctx . guild . id )
2023-12-03 10:06:21 +00:00
if not get_guild [ " music " ] == True : return await ctx . respond ( embed = Music_Embed . music_notenable ( ) )
if get_guild [ " admin_run " ] == True :
if not ctx . author . guild_permissions . administrator : return await ctx . respond ( embed = ChristmasEmbed ( title = " ❌ 에러! " , description = " 관리자만 사용할수 있는 명령어에요! " , color = Color . red ( ) ) , ephemeral = True )
if ctx . author . voice == None or ctx . author . voice . channel == None : return await ctx . respond ( embed = Music_Embed . author_not_voice ( ) )
2023-12-02 06:03:50 +00:00
player = None
2023-12-02 10:42:36 +00:00
node = wavelink . Pool . get_node ( )
if node . get_player ( ctx . guild . id ) == None :
2023-12-02 06:03:50 +00:00
player = await ctx . author . voice . channel . connect ( cls = wavelink . Player )
2023-12-02 10:42:36 +00:00
else :
player = node . get_player ( ctx . guild . id )
try :
2023-12-03 10:06:21 +00:00
query = None
if pendulum . now ( ) > pendulum . datetime ( 2023 , 12 , 24 , 12 , 0 , 0 ) :
query = await wavelink . Playable . search ( self . config . CHRISTMAS , source = wavelink . TrackSource . YouTube )
else :
query = await wavelink . Playable . search ( random . choice ( self . config . LOFI ) , source = wavelink . TrackSource . YouTube )
2023-12-02 10:42:36 +00:00
await player . play ( query [ 0 ] )
await ctx . respond ( embed = Music_Embed . music_play ( ) )
except Exception as e :
print ( e )
@MUSIC.command ( name = " 정지 " , description = " 음악을 정지합니다. " )
@cooldown ( 1 , 10 , BucketType . user )
@guild_only ( )
async def _stop ( self , ctx : Context ) :
if not await database . get_guild ( ctx . guild . id ) : return await ctx . respond ( embed = ChristmasEmbed ( title = " ❌ 에러! " , description = " 서버가 가입되어있지 않아요! 서버를 가입해주세요! " , color = Color . red ( ) ) , ephemeral = True )
2023-12-03 10:06:21 +00:00
await ctx . defer ( )
2023-12-02 10:42:36 +00:00
get_guild = await database . get_guild ( ctx . guild . id )
2023-12-03 10:06:21 +00:00
if not get_guild [ " music " ] == True : return await ctx . respond ( embed = Music_Embed . music_notenable ( ) )
if get_guild [ " admin_run " ] == True :
if not ctx . author . guild_permissions . administrator : return await ctx . respond ( embed = ChristmasEmbed ( title = " ❌ 에러! " , description = " 관리자만 사용할수 있는 명령어에요! " , color = Color . red ( ) ) , ephemeral = True )
if ctx . author . voice == None or ctx . author . voice . channel == None : return await ctx . respond ( embed = Music_Embed . author_not_voice ( ) )
2023-12-02 10:42:36 +00:00
node = wavelink . Pool . get_node ( )
player = node . get_player ( ctx . guild . id )
if player == None : return await ctx . respond ( embed = Music_Embed . music_not_playing ( ) , ephemeral = True )
await player . stop ( )
2023-12-03 10:06:21 +00:00
# 음악 채널에서 나감
await player . disconnect ( )
2023-12-02 10:42:36 +00:00
await ctx . respond ( embed = Music_Embed . music_stop ( ) )
2023-12-03 10:06:21 +00:00
@MUSIC.command ( name = " 설정 " , description = " 음악 설정을 변경합니다. " )
@cooldown ( 1 , 10 , BucketType . user )
@guild_only ( )
async def _setting ( self , ctx : Context , setting : Option ( str , name = " 설정 " , description = " 설정할 항목을 선택해주세요! " , choices = [ " 음악 활성화 " , " 관리자만 재생 가능 " ] , required = True ) , value : Option ( str , name = " 값 " , description = " 설정할 값을 선택해주세요! " , choices = [ " 켜기 " , " 끄기 " ] , required = True ) ) :
if not await database . get_guild ( ctx . guild . id ) : return await ctx . respond ( embed = ChristmasEmbed ( title = " ❌ 에러! " , description = " 서버가 가입되어있지 않아요! 서버를 가입해주세요! " , color = Color . red ( ) ) , ephemeral = True )
await ctx . defer ( )
if not ctx . author . guild_permissions . administrator : return await ctx . respond ( embed = ChristmasEmbed ( title = " ❌ 에러! " , description = " 관리자만 사용할수 있는 명령어에요! " , color = Color . red ( ) ) , ephemeral = True )
if setting == " 관리자만 재생 가능 " :
if value == " 켜기 " :
await database . update_music_setting ( ctx . guild . id , True , " admin_run " )
await ctx . respond ( embed = Music_Embed . music_setting ( True , " admin_run " ) , ephemeral = True )
else :
await database . update_music_setting ( ctx . guild . id , False , " admin_run " )
await ctx . respond ( embed = Music_Embed . music_setting ( False , " admin_run " ) , ephemeral = True )
if setting == " 음악 활성화 " :
if value == " 켜기 " :
await database . update_music_setting ( ctx . guild . id , True , " music " )
await ctx . respond ( embed = Music_Embed . music_setting ( True , " music " ) , ephemeral = True )
else :
await database . update_music_setting ( ctx . guild . id , False , " music " )
await ctx . respond ( embed = Music_Embed . music_setting ( False , " music " ) , ephemeral = True )
2023-11-26 04:27:34 +00:00
def setup ( bot ) :
bot . add_cog ( CMusic ( bot ) )