Skip to content

Updating from v3 to v4

This content is for the 4.0.1 version. Switch to the latest version for up-to-date documentation.

There are some major changes in Shoukaku v4. Here is some major changes that need to be made to your code.

Common usage

Getting a node

As node resolving is configurable in v4, the method to do so has changed.

const node = shoukaku.getNode();
const node = shoukaku.options.nodeResolver(shoukaku.nodes);

Joining voice channels

You now join voice channels using the main Shoukaku class, and not on the Node class

const player = await node.joinChannel({
const player = await shoukaku.joinVoiceChannel({
guildId: "your_guild_id",
channelId: "your_channel_id",
shardId: 0, // if unsharded it will always be zero (depending on your library implementation)
});

Resolving tracks

You can also use the player.node property after connecting to a voice channel to resolve tracks, but the old method would still work.

const result = await node.rest.resolve("scsearch:snowhalation");
const result = await player.node.rest.resolve("scsearch:snowhalation");

Playing tracks

Play the track using the encoded metadata.

player.playTrack({ track: metadata.track })
await player.playTrack({ track: metadata.encoded });

Leaving voice channels

Similar to joining voice channels, it is also on the main Shoukaku class.

player.connection.disconnect();
await shoukaku.leaveVoiceChannel(player.guildId);

Other changes

Player methods

Player methods now return promises.

await player.playTrack(...data);
await player.stopTrack();

Volume

There are 2 kinds of volumes you can set, global and filter.

The global volume accepts 0-1000 as it’s values

await player.setGlobalVolume(100);

To check the current global volume

console.log(player.volume);

The filter volume accepts 0.0-5.0 as it’s values

await player.setFilterVolume(1.0);

To check the current filter volume (filters.volume can be undefined)

console.log(player.filters.volume);

Internal changes

New variable in shoukaku class, which handles the “connection data” of discord only

console.log(shoukaku.connections);

Players are moved from node.players to shoukaku.players

console.log(shoukaku.players);

You can supply a custom node resolver for your own way of getting an ideal node by supplying the nodeResolver option in Shoukaku options

const ShoukakuOptions = {
...yourShoukakuOptions,
nodeResolver: (nodes, connection) => getYourIdealNode(nodes, connection),
};