From 17cf18160cdc07cb316400df7771a09a2df98ff3 Mon Sep 17 00:00:00 2001 From: Lukas Date: Mon, 29 Jan 2024 14:46:23 +0100 Subject: [PATCH] Some changes --- Music-Bot.py | 75 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/Music-Bot.py b/Music-Bot.py index 48e8ab7..9c2ff19 100644 --- a/Music-Bot.py +++ b/Music-Bot.py @@ -1,4 +1,5 @@ import asyncio +import datetime import re from pytube import YouTube import aiohttp @@ -31,13 +32,13 @@ parser.add_argument("-p", "--prefix", help="Provides the Prefix for the bot (Sta args = parser.parse_args() -if args.cores == None: +if args.cores is None: threads = 2 else: threads = int(args.cores) -if args.prefix == None: +if args.prefix is None: b_prefix = "<" else: b_prefix = str(args.prefix) @@ -108,9 +109,7 @@ else: async with aiohttp.ClientSession() as client: async with client.get("https://www.youtube.com/results", params=p, headers=h) as resp: dom = await resp.text() - result = re.findall(r"watch\?v=(\S{11})", dom)[0:5] - print(result) - print("----") + result = list(set(re.findall(r"watch\?v=(\S{11})", dom)))[0:5] return result @@ -119,7 +118,7 @@ else: bot = commands.Bot( command_prefix=commands.when_mentioned_or(b_prefix), - description="Relatively simple music bot example", + description="BCA Music-Bot", intents=intents, help_command=None ) @@ -132,7 +131,8 @@ else: print(f"Threads for ffmpeg: {threads}") print(f"Prefix: {b_prefix}") print( - f"Invitation LINK: https://discord.com/api/oauth2/authorize?client_id={bot.user.id}&permissions=968552344896&scope=bot%20applications.commands") + f"Invitation LINK: https://discord.com/api/oauth2/authorize?client_id={bot.user.id}" + f"&permissions=968552344896&scope=bot%20applications.commands") print("------") @@ -196,7 +196,7 @@ else: while ctx.voice_client.is_playing(): await asyncio.sleep(3) else: - await ctx.voice_client.disconnect() + await ctx.voice_client.disconnect(force=True) @bot.slash_command(name="stream", description="Streams a song from YouTube [Without preloading]") @@ -242,23 +242,58 @@ else: @bot.slash_command(name="youtube", description="Searches YouTube for a given string and plays the first result") async def youtube(ctx, *, search: str): results = await youtube_search(search=search) - embed = Embed(title=f"Search results for `{search}`", color=discord.Color.green()) + embed = Embed(title=f"", color=discord.Color.green()) + embed.add_field(name="", value="", inline=False) counter = 1 for result in results: url = f"https://youtube.com/watch?v={result}" - title = YouTube(url) - embed.add_field(name=f"{counter}", value=title.title, inline=False) + video = YouTube(url) + embed.add_field(name="", value=f"{counter} | `[{str(datetime.timedelta(seconds=video.length))}]` " + f"[{video.title}]({url}{result[counter-1]}) {video.author}", inline=False) counter += 1 - print(url) - await ctx.respond(f"{success}**A short selection of videos will be displayed shortly...**") + await ctx.respond(f"{success}**🎶 Search results for `{search}`**") msg = await ctx.send(embed=embed) - await msg.add_reaction('1️') - #await msg.add_reaction('') - #await msg.add_reaction('') - #await msg.add_reaction('') - #await msg.add_reaction('') - #await msg.add_reaction('') - + await msg.add_reaction("1️⃣") + await msg.add_reaction("2️⃣") + await msg.add_reaction("3️⃣") + await msg.add_reaction("4️⃣") + await msg.add_reaction("5️⃣") + await msg.add_reaction("❌") + try: + reaction = await bot.wait_for(event='reaction_add', timeout=60.0) + except asyncio.TimeoutError: + await ctx.send('👎') + else: + vid_id = "https://youtube.com/watch?v=" + if str(reaction[0]) == "1️⃣": + vid_id += results[0] + if str(reaction[0]) == "2️⃣": + vid_id += results[1] + if str(reaction[0]) == "3️⃣": + vid_id += results[2] + if str(reaction[0]) == "5️⃣": + vid_id += results[3] + if str(reaction[0]) == "5️⃣": + vid_id += results[4] + else: + vid_id = None + print(vid_id) + if vid_id is None: + pass + else: + try: + player = await YTDLSource.from_url(vid_id, loop=bot.loop) + ctx.voice_client.play( + player, after=lambda e: print(f"Player error: {e}") if e else None + ) + except discord.HTTPException as err: + raise commands.CommandError(err) + finally: + await ctx.send(f"{success}Now playing: `{player.title}`\nRequested by {ctx.author.mention}") + while ctx.voice_client.is_playing(): + await asyncio.sleep(3) + else: + await ctx.voice_client.disconnect(force=True) """ async with ctx.typing():