diff --git a/src/Lavalink4NET/Clients/MemberVoiceStateBehavior.cs b/src/Lavalink4NET/Clients/MemberVoiceStateBehavior.cs
index aa7c7a70..93c1a0b4 100644
--- a/src/Lavalink4NET/Clients/MemberVoiceStateBehavior.cs
+++ b/src/Lavalink4NET/Clients/MemberVoiceStateBehavior.cs
@@ -16,4 +16,9 @@ public enum MemberVoiceStateBehavior : byte
/// Regardless of the player's connection state, the user must be in the same voice channel as the player.
///
RequireSame,
+
+ ///
+ /// Regardless of the player's connection state, the user must be in a different voice channel than the player.
+ ///
+ RequireDifferent,
}
diff --git a/src/Lavalink4NET/Players/PlayerManager.cs b/src/Lavalink4NET/Players/PlayerManager.cs
index 7c2dbe52..29090083 100644
--- a/src/Lavalink4NET/Players/PlayerManager.cs
+++ b/src/Lavalink4NET/Players/PlayerManager.cs
@@ -254,8 +254,7 @@ static async ValueTask> CheckPreconditionsAsync(
if (player is not null)
{
- if (voiceStateBehavior is MemberVoiceStateBehavior.AlwaysRequired or MemberVoiceStateBehavior.RequireSame &&
- memberVoiceChannel is null)
+ if (voiceStateBehavior is not MemberVoiceStateBehavior.Ignore && memberVoiceChannel is null)
{
return PlayerResult.UserNotInVoiceChannel;
}
@@ -277,6 +276,14 @@ await DiscordClient
.ConfigureAwait(false);
}
}
+ else
+ {
+ // Player is in same voice chanenl as bot
+ if (voiceStateBehavior is MemberVoiceStateBehavior.RequireDifferent)
+ {
+ return PlayerResult.UserInSameVoiceChannel;
+ }
+ }
return await CheckPreconditionsAsync(player, preconditions, cancellationToken).ConfigureAwait(false);
}
diff --git a/src/Lavalink4NET/Players/PlayerResult.cs b/src/Lavalink4NET/Players/PlayerResult.cs
index 6272d004..9eaa7322 100644
--- a/src/Lavalink4NET/Players/PlayerResult.cs
+++ b/src/Lavalink4NET/Players/PlayerResult.cs
@@ -32,6 +32,8 @@ public static PlayerResult Success(TPlayer player)
public static PlayerResult VoiceChannelMismatch => new(null, PlayerRetrieveStatus.VoiceChannelMismatch, null);
+ public static PlayerResult UserInSameVoiceChannel => new(null, PlayerRetrieveStatus.UserInSameVoiceChannel, null);
+
public static PlayerResult BotNotConnected => new(null, PlayerRetrieveStatus.BotNotConnected, null);
public static PlayerResult PreconditionFailed(TPlayer player, IPlayerPrecondition precondition)
diff --git a/src/Lavalink4NET/Players/PlayerRetrieveStatus.cs b/src/Lavalink4NET/Players/PlayerRetrieveStatus.cs
index 955ea524..1076ab6c 100644
--- a/src/Lavalink4NET/Players/PlayerRetrieveStatus.cs
+++ b/src/Lavalink4NET/Players/PlayerRetrieveStatus.cs
@@ -5,6 +5,7 @@ public enum PlayerRetrieveStatus : byte
Success,
UserNotInVoiceChannel,
VoiceChannelMismatch,
+ UserInSameVoiceChannel,
BotNotConnected,
PreconditionFailed,
}