runabot/Christmas/Cogs/Commands_Music.py

54 lines
2.8 KiB
Python
Raw Normal View History

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