4.0.1 • Published 1 year ago

shoukaku-fix v4.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Shoukaku

A stable and updated wrapper around Lavalink

Discord npm Github Stars GitHub issues Snyk Vulnerabilities for npm package NPM

The ShipGirl Project, feat Shoukaku; ⓒ Azur Lane

Features

✅ Stable

✅ Documented

✅ Updated

✅ Extendable

✅ ESM & CommonJS supported

✅ Very cute (Very Important)

Supported Libraries

Refer to /src/connectors for list of supported libraries + how to support other libraries

Installation

npm install shoukaku

Documentation

https://shoukaku.shipgirl.moe/

Small code snippet examples

Initializing the library (Using Connector Discord.JS)

const { Client } = require("discord.js");
const { Shoukaku, Connectors } = require("shoukaku");
const Nodes = [
  {
    name: "Localhost",
    url: "localhost:6969",
    auth: "re_aoharu",
  },
];
const client = new Client();
const shoukaku = new Shoukaku(new Connectors.DiscordJS(client), Nodes);

// Always handle "error" events or your program may crash due to uncaught error
shoukaku.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 it
client.shoukaku = shoukaku;

Never initialize Shoukaku like this, or else she will never initialize, start shoukaku before you call client.login()

client.on("ready", () => {
  client.shoukaku = new Shoukaku(new Connectors.DiscordJS(client), Nodes);
});

Join a voice channel, search for a track, play the track, then disconnect after the track ends

// create a voice connection and player using Shoukaku#joinVoiceChannel
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)
});
// player is created, now search for a track
const result = await player.node.rest.resolve("scsearch:snowhalation");
if (!result?.data.length) return;
const metadata = result.tracks.shift();
// play the searched track
await player.playTrack({ track: { encoded: metadata.encoded } });
// wait for track to end
await once(player, 'end');
// leaver the voice channel
await shoukaku.leaveVoiceChannel(player.guildId);

Playing a track and changing a playback option (in this example, volume)

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

Updating the whole player if you don\'t want to use my helper functions

await player.update({ ...playerOptions });

Setting a custom get node ideal function

const shoukaku = new Shoukaku(
  new Connectors.DiscordJS(client),
  [{ ...yourNodeOptions }],
  {
    ...yourShoukakuOptions,
    nodeResolver: (nodes, connection) => getYourIdealNode(nodes, connection),
  }
);
const player = await shoukaku.joinVoiceChannel({
  guildId: "your_guild_id",
  channelId: "your_channel_id",
  shardId: 0,
});

A full bot example (that dont use timeout to leave the voice channel) can be found at https://github.com/shipgirlproject/Shoukaku?tab=readme-ov-file#full-bot-implementation-of-shoukaku-in-discordjs

Shoukaku's options

OptionTypeDefaultDescriptionNotes
resumebooleanfalseIf you want to enable resuming when your connection when your connection to lavalink disconnects
resumeTimeoutnumber30Timeout before lavalink destroys the players on a disconnectIn seconds
resumeByLibrarybooleanfalseIf you want to force resume players no matter what even if it's not resumable by lavalink
reconnectTriesnumber3Number of tries to reconnect to lavalink before disconnecting
reconnectIntervalnumber5Timeout between reconnectsIn seconds
restTimeoutnumber60Maximum amount of time to wait for rest lavalink api requestsIn seconds
moveOnDisconnectbooleanfalseWhether to move players to a different lavalink node when a node disconnects
userAgentstring(auto)Changes the user-agent used for lavalink requestsNot recommeded to change
structuresObject{rest?, player?}{}Custom structures for shoukaku to use
voiceConnectionTimeoutnumber15Maximum amount of time to wait for a join voice channel commandIn seconds
nodeResolverfunctionfunctionCustom node resolver if you want to have your own method of getting the ideal node

3rd Party Plugins

NameLinkDescription
KazagumoGithubA wrapper for Shoukaku that has an internal queue system

Open a PR if you want to add your plugin here

Other Links

Support (#Development) | Lavalink

Full bot implementation of Shoukaku in Discord.JS

Kongou

Made with ❤ by

@ichimakase (Saya)

4.0.1

1 year ago

4.0.0

1 year ago

4.0.4

1 year ago

4.0.3

1 year ago

4.0.2

1 year ago