A Lavalink wrapper for Discord.Net!
Getting Started
DiscordSocketClient client = new DiscordSocketClient();
LavalinkManager lavalinkManager = new LavalinkManager(client, new LavalinkManagerConfig
{
RESTHost = "localhost",
RESTPort = 2333,
WebSocketHost = "localhost",
WebSocketPort = 2333,
Authorization = "YOUR_SECRET_AUTHORIZATION_KEY",
TotalShards = 1
});
Notes:
You don't have to pass a
LavalinkManagerConfig
since Sharplink uses the default config.As of Lavalink v3.1, in
LavalinkManagerConfig
your hosts,RESTHost
andWebSocketHost
, should be identical, andRESTPort
should be identical toWebSocketPort
.Set
TotalShards
to the total amount of shards your bot uses. If you don't understand whatTotalShards
is you are probably not sharding your bot and should set this value to1
.Use only a single instance of
LavaLinkManager
. If possible addLavalinkManager
to your DI (Dependency Injection).
Once a LavalinkManager is set up it will need to be started. It is recommended you put this in the ready event.
client.Ready += async () =>
{
await lavalinkManager.StartAsync();
}
From there you can connect to audio channels, play music, and do whatever else you wish to do. Here is an example to connect and play music on a voice channel.
// Get LavalinkPlayer for our Guild and if it's null then join a voice channel.
LavalinkPlayer player = lavalinkManager.GetPlayer(GUILD_ID) ?? await lavalinkManager.JoinAsync(VOICE_CHANNEL);
// Now that we have a player we can go ahead and grab a track and play it
LoadTracksResponse response = await lavalinkManager.GetTracksAsync("IDENTIFIER");
// Gets the first track from the response
LavalinkTrack track = response.Tracks.First();
await player.PlayAsync(track);
// For legacy usage with GetTrackAsync() on pre beta-0005 (This is deprecated, please upgrade)
// The below note about search results applies to this method also
LavalinkTrack track = await lavalinkManager.GetTrackAsync("IDENTIFIER");
await player.PlayAsync(track);
Notes: To get a track from Youtube use GetTracksAsync($"ytsearch:Query")
. To get a track from SoundCloud use GetTracksAsync($"scsearch:Query")
.