Attempt to fix voice_client
This commit is contained in:
@@ -69,26 +69,34 @@ class VoiceCog(commands.Cog):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
# Get voice client for this guild
|
# Get voice client for this guild
|
||||||
voice_client = discord.utils.get(self.bot.voice_clients, guild=guild)
|
current_voice_client = discord.utils.get(self.bot.voice_clients, guild=guild)
|
||||||
|
|
||||||
if voice_client:
|
if current_voice_client:
|
||||||
if voice_client.channel == channel:
|
if current_voice_client.channel == channel:
|
||||||
print(f"Already in channel: {channel.name} in guild {guild.name}.")
|
print(f"Already in channel: {channel.name} in guild {guild.name}.")
|
||||||
|
voice_client_to_use = current_voice_client # Use existing
|
||||||
else:
|
else:
|
||||||
await voice_client.move_to(channel)
|
await current_voice_client.move_to(channel)
|
||||||
print(f"Moved to channel: {channel.name} in guild {guild.name}.")
|
print(f"Moved to channel: {channel.name} in guild {guild.name}.")
|
||||||
|
voice_client_to_use = current_voice_client # Use moved existing
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
voice_client = await channel.connect(timeout=60.0, reconnect=True)
|
voice_client_to_use = await channel.connect(timeout=60.0, reconnect=True)
|
||||||
print(f"Connected to channel: {channel.name} in guild {guild.name}.")
|
print(f"Connected to channel: {channel.name} in guild {guild.name}.")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Failed to connect to {channel.name} in guild {guild.name}. Error: {e}")
|
print(f"Failed to connect to {channel.name} in guild {guild.name}. Error: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# --- IMPORTANT: Validate voice_client_to_use BEFORE passing to NoiseGate ---
|
||||||
|
if not voice_client_to_use:
|
||||||
|
print(f"Failed to obtain a valid VoiceClient object for guild {guild.name}.")
|
||||||
|
return False
|
||||||
|
|
||||||
if discord.opus.is_loaded():
|
if discord.opus.is_loaded():
|
||||||
# Create and start the NoiseGate audio stream for this server
|
# Create and start the NoiseGate audio stream for this server
|
||||||
|
# Ensure the correct voice client is passed
|
||||||
stream_handler = NoiseGate(
|
stream_handler = NoiseGate(
|
||||||
_voice_connection=voice_client,
|
_voice_connection=voice_client_to_use, # Corrected: use the unified variable
|
||||||
_noise_gate_threshold=self.ng_threshold,
|
_noise_gate_threshold=self.ng_threshold,
|
||||||
_input_device_index=self.device_id
|
_input_device_index=self.device_id
|
||||||
)
|
)
|
||||||
@@ -98,7 +106,9 @@ class VoiceCog(commands.Cog):
|
|||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
print("Opus library not loaded. Cannot start audio stream.")
|
print("Opus library not loaded. Cannot start audio stream.")
|
||||||
await voice_client.disconnect() # Disconnect if opus isn't loaded
|
# Disconnect if opus isn't loaded but a connection was made
|
||||||
|
if voice_client_to_use:
|
||||||
|
await voice_client_to_use.disconnect()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Internal API method to leave a voice channel
|
# Internal API method to leave a voice channel
|
||||||
@@ -155,7 +165,6 @@ class VoiceCog(commands.Cog):
|
|||||||
if not discord.opus.is_loaded():
|
if not discord.opus.is_loaded():
|
||||||
await ctx.send("Opus audio library is not loaded. I cannot join a voice channel.")
|
await ctx.send("Opus audio library is not loaded. I cannot join a voice channel.")
|
||||||
raise commands.CommandError("Opus not loaded.")
|
raise commands.CommandError("Opus not loaded.")
|
||||||
|
|
||||||
# --- Discord Bot Manager Class ---
|
# --- Discord Bot Manager Class ---
|
||||||
class DiscordBotManager:
|
class DiscordBotManager:
|
||||||
def __init__(self, device_id: int = 0, ng_threshold: int = 50):
|
def __init__(self, device_id: int = 0, ng_threshold: int = 50):
|
||||||
|
|||||||
Reference in New Issue
Block a user