Compare commits

1 Commits

Author SHA1 Message Date
Lukas Blacha
a3c818a963 Changed version and branch (0.2, main) 2023-02-08 13:16:51 +01:00

View File

@@ -1,7 +1,7 @@
import asyncio
import datetime
import re
from pytube import YouTube
from datetime import timedelta
import aiohttp
import yt_dlp
import discord
@@ -17,9 +17,8 @@ banner = """
| | | | \__ \ | ( _____| | | ( | |
_| _| \__,_| ____/ _| \___| ____/ \___/ \__|
"""
version = "0.1"
branch = "dev"
version = "0.2"
branch = "main"
success = "**Success ✅**\n"
warning = "**Warning **\n"
error = "**Error ❗️**\n"
@@ -27,24 +26,9 @@ cache_dir = "cache"
logging.basicConfig(level=logging.INFO)
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--token", help="Bot TOKEN")
parser.add_argument("-c", "--cores", help="Number of Cores for ffmpeg (Standard 2)")
parser.add_argument("-p", "--prefix", help="Provides the Prefix for the bot (Standard <)")
args = parser.parse_args()
if args.cores is None:
threads = 2
else:
threads = int(args.cores)
if args.prefix is None:
b_prefix = "<"
else:
b_prefix = str(args.prefix)
if args.token is None:
if args.token == None:
print(f"{banner}\n\nPLEASE PROVIDE BOT A TOKEN BY RUNNING LIKE THE FOLLOWING:")
print("\n")
print(">>> python3 Music-Bot.py -t TOKEN <<<")
@@ -99,7 +83,7 @@ else:
filename = data["url"] if stream else ytdl.prepare_filename(data)
return cls(discord.FFmpegPCMAudio(source=filename, executable="ffmpeg", pipe=False, stderr=False,
before_options=f"-threads {threads}", options=ffmpeg_options), data=data)
before_options="-threads 2", options=ffmpeg_options), data=data)
async def youtube_search(search: str):
@@ -109,16 +93,17 @@ 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 = list(set(re.findall(r"watch\?v=(\S{11})", dom)))[0:5]
return result
found = re.findall(r"watch\?v=(\S{11})", dom)[0]
url = f"https://www.youtube.com/watch?v={found}"
return url
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(
command_prefix=commands.when_mentioned_or(b_prefix),
description="BCA Music-Bot",
command_prefix=commands.when_mentioned_or("!"),
description="Relatively simple music bot example",
intents=intents, help_command=None
)
@@ -128,11 +113,8 @@ else:
print(banner)
print(f"Bot Version: {version} ({branch})")
print(f"Bot: {bot.user} (ID: {bot.user.id})")
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}"
f"&permissions=968552344896&scope=bot%20applications.commands")
f"Invitation LINK: https://discord.com/api/oauth2/authorize?client_id={bot.user.id}&permissions=968552344896&scope=bot%20applications.commands")
print("------")
@@ -193,10 +175,6 @@ else:
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)
@bot.slash_command(name="stream", description="Streams a song from YouTube [Without preloading]")
@@ -206,11 +184,8 @@ else:
ctx.voice_client.play(
player, after=lambda e: print(f"Player error: {e}") if e else None
)
await ctx.respond(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()
@bot.slash_command(name="pause", description="Pauses the playback")
@@ -241,61 +216,7 @@ 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"", 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}"
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
await ctx.respond(f"{success}**🎶 Search results for `{search}`**")
msg = await ctx.send(embed=embed)
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)
"""
url = await youtube_search(search=search)
async with ctx.typing():
await ctx.respond("🤖 Your song is queued for download... please wait ", ephemeral=True)
try:
@@ -307,16 +228,11 @@ else:
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()
"""
@play.before_invoke
@stream.before_invoke
#@youtube.before_invoke
@youtube.before_invoke
async def ensure_voice(ctx: commands.Context):
if ctx.voice_client is None:
if ctx.author.voice:
@@ -327,8 +243,6 @@ else:
ctx.voice_client.stop()
"""
@bot.event
async def on_application_command_error(ctx, error):
print(f"[on_application_command_error]\n{ctx.author}\n{error}")
@@ -353,6 +267,5 @@ else:
print(f"[on_command_error]\n{ctx.author}\n{error}")
embed = Embed(title=f"{error}", color=15158332)
await ctx.send(embed=embed)
"""
bot.run(token=args.token, reconnect=True)