From 014d05629aadbb42054ce8261f2fbd830f31f560 Mon Sep 17 00:00:00 2001 From: "Bence T." <3326575+tbb98@users.noreply.github.com> Date: Thu, 1 May 2025 12:11:56 +0200 Subject: [PATCH 1/2] removed unuseable msg --- main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/main.py b/main.py index 76b23ac..9268fcf 100644 --- a/main.py +++ b/main.py @@ -23,7 +23,6 @@ async def on_ready(): client_id = application_info.id invite_url = f"https://discord.com/oauth2/authorize?client_id={client_id}&permissions=3145728&scope=bot" - print(f"itt vagyok gecik ( {bot.user} )") print(f"Invite URL: {invite_url}") @bot.command() From 60ebd345e7610dcc3134b9e0b150e44965c0e580 Mon Sep 17 00:00:00 2001 From: "Bence T." <3326575+tbb98@users.noreply.github.com> Date: Thu, 1 May 2025 12:22:58 +0200 Subject: [PATCH 2/2] multi-server support with broken volume --- main.py | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/main.py b/main.py index 9268fcf..760833d 100644 --- a/main.py +++ b/main.py @@ -9,8 +9,8 @@ intents = discord.Intents.default() intents.message_content = True # Needed to read .play/.stop commands bot = commands.Bot(command_prefix="..", intents=intents) -# Global variable to hold the current voice client -voice_client = None +# Global variable to hold the current voice clients +voice_clients = {} # Sets the default volume to 20%, to make headphone users survive # the volume does not change when the bot is already playing, only new audio @@ -27,26 +27,26 @@ async def on_ready(): @bot.command() async def play(ctx, url: str): - global voice_client + guild_id = ctx.guild.id if not ctx.author.voice: await ctx.send("lépjél már be egy kurva csatornába te szerencsétlen fasz") return - # Connect to the user's voice channel if not already connected - if not voice_client or not voice_client.is_connected(): - voice_client = await ctx.author.voice.channel.connect() + if guild_id not in voice_clients or not voice_clients[guild_id].is_connected(): + voice_clients[guild_id] = await ctx.author.voice.channel.connect() - # Stop any currently playing audio - if voice_client.is_playing(): - voice_client.stop() + vc = voice_clients[guild_id] + if vc.is_playing(): + vc.stop() try: # Load blocked keywords from file with open("blocked_keywords.txt", "r", encoding="utf-8") as f: blocked_keywords = [line.strip().lower() for line in f if line.strip()] + # YTDLP options ydl_opts = { "format": "bestaudio/best", "quiet": True, @@ -54,6 +54,7 @@ async def play(ctx, url: str): "default_search": "auto", } + # Use yt-dlp to extract audio URL and check for blocked keywords with yt_dlp.YoutubeDL(ydl_opts) as ydl: info = ydl.extract_info(url, download=False) title = info["title"].lower() @@ -63,15 +64,17 @@ async def play(ctx, url: str): audio_url = info["url"] print("Audio URL:", audio_url) + # Set up FFmpeg options with the current volume ffmpeg_options = { "before_options": "-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5 -protocol_whitelist file,http,https,tcp,tls,crypto", "options": f"-vn -af volume={current_volume}" } - voice_client.play( + # Play the audio + vc.play( FFmpegPCMAudio(audio_url, **ffmpeg_options), after=lambda e: print(f"Finished playing: {e}") - ) + ) await ctx.send(f"most ez a fos szól: {info['title']}") except Exception as e: @@ -79,14 +82,15 @@ async def play(ctx, url: str): @bot.command() async def stop(ctx): - global voice_client + guild_id = ctx.guild.id - if voice_client and voice_client.is_playing(): - voice_client.stop() + if guild_id in voice_clients and voice_clients[guild_id].is_playing(): + voice_clients[guild_id].stop() await ctx.send("hát akkor ne hallgassad basszalak szájba") else: await ctx.send("nem is szól semmi te buzeráns fasz") +#Does not work in multi-server setup, needs fix @bot.command() async def volume(ctx, vol: float): global current_volume @@ -98,11 +102,11 @@ async def volume(ctx, vol: float): @bot.command() async def leave(ctx): - global voice_client + guild_id = ctx.guild.id - if voice_client and voice_client.is_connected(): - await voice_client.disconnect() - voice_client = None + if guild_id in voice_clients and voice_clients[guild_id].is_connected(): + await voice_clients[guild_id].disconnect() + del voice_clients[guild_id] await ctx.send("akkor csá gecik") else: await ctx.send("nem is vagyok voice channelben basszam ki a szádat")