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, }