A stable and updated wrapper around Lavalink
The ShipGirl Project, feat Shoukaku; ⓒ Kancolle
✅ Stable
✅ Documented
✅ Updated
✅ Extendable
✅ ESM & CommonJS supported
✅ Very cute (Very Important)
Refer to /src/connectors for list of supported libraries + how to support other libraries
- Stable (3.x.x) (Needs Lavalink Versions:
3.5.x< |3.9.x>)
npm install shoukaku
- Dev (4.0.0-dev) (Needs Lavalink Versions:
3.7.x<)
For living on the edge but with latest features:
npm install https://github.com/Deivu/Shoukaku.git#v4
Dev versions are not guaranteed to stay the same api wise, and even with last known stable, I won't say it's 100% stable
https://deivu.github.io/Shoukaku/ (Stable v3 version only)
https://github.com/Deivu/Shoukaku/tree/v3 (v3 stable github branch)
v4.x.x docs are in your intellisense for now (I only deploy stable release docs on the Github page)
Initializing the library (Using Connector Discord.JS)
const{ Client }=require('discord.js');const{ Shoukaku, Connectors }=require('shoukaku');constNodes=[{name: 'Localhost',url: 'localhost:6969',auth: 'marin_kitagawa'}];constclient=newClient();constshoukaku=newShoukaku(newConnectors.DiscordJS(client),Nodes);// ALWAYS handle error, logging it will doshoukaku.on('error',(_,error)=>console.error(error));client.login('token');// If you want shoukaku to be available on client, then bind it to it, here is one example of itclient.shoukaku=shoukaku;Never initialize Shoukaku like this, or else she will never initialize, start shoukaku before you call
client.login()
// NEVER DO THIS, OR SHOUKAKU WILL NEVER INITIALIZEclient.on('ready',()=>{client.shoukaku=newShoukaku(newConnectors.DiscordJS(client),Nodes);});Searching and joining a channel (Async Function Implementation)
constnode=shoukaku.getNode();if(!node)return;constresult=awaitnode.rest.resolve('scsearch:snowhalation');if(!result?.tracks.length)return;constmetadata=result.tracks.shift();constplayer=awaitnode.joinChannel({guildId: 'your_guild_id',channelId: 'your_channel_id',shardId: 0// if unsharded it will always be zero (depending on your library implementation)});// player is created and ready, do your thingPlaying a track and changing a playback option (in this example, volume)
awaitplayer.playTrack({track: metadata.encodedTrack});awaitplayer.setVolume(0.5);Updating the whole player if you don't want to use my helper functions
awaitplayer.update({ ...playerOptions});| Option | Type | Description |
|---|---|---|
| resume | boolean | Whether to resume a connection on disconnect to Lavalink (Server Side) (Note: DOES NOT RESUME WHEN THE LAVALINK SERVER DIES) |
| resumeKey | string | Resume key for Lavalink |
| resumeTimeout | number | Timeout before resuming a connection in seconds |
| resumeByLibrary | boolean | Whether to resume the players by doing it in the library side (Client Side) (Note: TRIES TO RESUME REGARDLESS OF WHAT HAPPENED ON A LAVALINK SERVER) |
| alwaysSendResumeKey | boolean | Disables the first time initialization tracking of nodes, and just sends the resume key always (Note: Useful for people who save their players to redis and wants to resume sessions even at first boot) |
| reconnectTries | number | Number of times to try and reconnect to Lavalink before giving up |
| reconnectInterval | number | Timeout before trying to reconnect in seconds |
| restTimeout | number | Time to wait for a response from the Lavalink REST API before giving up in seconds |
| moveOnDisconnect | boolean | Whether to move players to a different Lavalink node when a node disconnects |
| userAgent | string | User Agent to use when making requests to Lavalink |
| structures | Object{rest?, player?} | Custom structures for shoukaku to use |
Open a pr to add your plugin here
| Name | Link | Description |
|---|---|---|
| Kazagumo | Github | A Shoukaku wrapper that have built-in queue system |
| stone-deezer | NPM | A plugin to simplify deezer links and then play it from available sources (REQUIRES KAZAGUMO) |
Support (#Development) | Lavalink
@Sāya#0113
