Skip to main content

Lyrics

danger

The lyrics.ovh API is currently down and needs to be self-hosted. Please refer to the lyrics.ovh GitHub repository for a guide.

Some bots provide a feature to show the lyrics of the currently playing song. This feature is provided by the Lavalink4NET.Lyrics package. This package provides a ILyricsService interface which can be used to retrieve the lyrics of a song.

Package​

note

The lyrics feature is only available in the Lavalink4NET.Lyrics package.

Usage​

First, to use the lyrics feature, you need to register the ILyricsService service in your service collection:

builder.Services.AddLyrics();

The ILyricsService interface provides a GetLyricsAsync method which can be used to retrieve the lyrics of a song. The method returns a LyricsResult object which contains the lyrics of the song.

We will now add a command that retrieves the lyrics of the currently playing song:

[SlashCommand("lyrics", description: "Searches for lyrics", runMode: RunMode.Async)]
public async Task Lyrics()
{
await DeferAsync().ConfigureAwait(false);

var player = await GetPlayerAsync(connectToVoiceChannel: false).ConfigureAwait(false);

if (player is null)
{
return;
}

var track = player.CurrentTrack;

if (track is null)
{
await FollowupAsync("🤔 No track is currently playing.").ConfigureAwait(false);
return;
}

var lyrics = await _lyricsService.GetLyricsAsync(track.Title, track.Author).ConfigureAwait(false);

if (lyrics is null)
{
await FollowupAsync("😖 No lyrics found.").ConfigureAwait(false);
return;
}

await FollowupAsync($"📃 Lyrics for {track.Title} by {track.Author}:\n{lyrics}").ConfigureAwait(false);
}

Configuration​

You can configure the lyrics service using the dependency injection configuration by using the ConfigureLyrics method.

Base address​

If you want to use another lyrics API, you can change the base address of the lyrics service, for example your self-hosted lyrics.ovh instance:

builder.Services.ConfigureLyrics(
options => options.BaseAddress = new Uri("https://some-lyrics-api.com/"));