Vote player
The vote player implements a voting system for tracks known from other music bots. The player allows users to vote for skipping a track. If enough users voted for skipping the track, the track will be skipped.
Members
The player implements the IVoteLavalinkPlayer
interface. The player implements the following important members in addition to the members of the queued player:
IVoteCollection Votes { get; }
ValueTask<VoteSkipInformation> GetVotesAsync(CancellationToken cancellationToken = default);
ValueTask<UserVoteResult> VoteAsync(ulong userId, UserVoteOptions options, CancellationToken cancellationToken = default);
Votes
You will notice that the player has a Votes
property. This property returns an IVoteCollection
instance which represents the votes of the player. The vote collection is a collection of IVote
instances. Each vote represents a vote for skipping a track.
GetVotesAsync
The player also has a GetVotesAsync
method which returns a VoteSkipInformation
instance. This instance contains information about the votes of the player. The information includes the number of votes for skipping the track, the number of votes required for skipping the track, and the number of votes required for skipping the track in percent.
VoteAsync
The player also has a VoteAsync
method which allows users to vote for skipping the track. The method returns a UserVoteResult
instance which contains information about the vote of the user. The information includes whether the user voted for skipping the track, whether the user's vote was successful, and whether the user's vote was the last vote required for skipping the track.
It is also possible to set a factor for the vote power of a user when submitting a vote. This can be useful for premium users or users with a certain role. The factor can be set in the UserVoteOptions
instance passed to the VoteAsync
method.
Usage
Lavalink4NET provides a player factory for this player which can be used to create the vote player without additional configuration. You can pass the player factory to the RetrieveAsync
method:
var result = await _audioService.Players
.RetrieveAsync(Context, playerFactory: PlayerFactory.Vote, retrieveOptions)
.ConfigureAwait(false);