runabot/Christmas/Cogs/Commands_Music.py

88 lines
5.7 KiB
Python
Raw Normal View History

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