A Lavalink wrapper for Discord.Net!
- Follow these instructions to setup Lavalink.
- Once Lavalink is up and running follow the code example below to setup Sharplink.
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")
.