Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Playlistor | 310 | 3 months ago | 5 | mit | Python | |||||
🎶Apple Music ↔️ Spotify playlist convertor. | ||||||||||
Partify | 32 | 3 years ago | 6 | mit | JavaScript | |||||
This is a free open source Spotify-powered app that lets users host parties and have guests connect using their smartphones to submit and vote on songs. The app will only play the highest voted song and can connect to personal playlists. | ||||||||||
Lavaqueue | 25 | 6 | 1 | a month ago | 31 | October 15, 2020 | 1 | mit | TypeScript | |
A queue system for Lavalink, backed by Redis. | ||||||||||
Re Radio | 25 | 8 months ago | 33 | agpl-3.0 | TypeScript | |||||
A playlist for teams that can be edited collaboratively by all users | ||||||||||
Slack Spotify Playlist | 13 | 8 years ago | mit | Java | ||||||
Publish shared Spotify playlist updates to Slack | ||||||||||
Echotunes | 12 | 9 years ago | 1 | Ruby | ||||||
Echonest + iTunes = Sweet Playlists | ||||||||||
Spookify | 11 | a year ago | JavaScript | |||||||
Music video streaming web application with Spring Boot, Hibernate, Redis, PostgreSQL, React and Redux. | ||||||||||
Soundclouder | 11 | 7 years ago | 1 | Go | ||||||
:musical_keyboard: Crawling SoundCloud at scale (Go + Redis) | ||||||||||
Along | 10 | 5 years ago | TypeScript | |||||||
🎙Your Spotify playlists with voice interface. 🔬Empathy and the Web Speech Recognition API. | ||||||||||
Wuvt Site | 10 | a year ago | 23 | agpl-3.0 | Python | |||||
Website including a CMS, playlist information, and donation management tools |
A simple queue system for Lavalink, backed by Redis. Built as extension of my generic Lavalink wrapper.
const { Client: Lavaqueue } = require('lavaqueue');
const voice = new Lavaqueue({
userID: '', // the user that will be sending audio
password: '', // your lavalink password
hosts: {
rest: '', // your lavalink rest endpoint (include port and protocol)
ws: '', // your lavalink ws endpoint (include port and protocol)
redis: '', // your redis instance
},
send(guildID, packet) {
// send the packet to the appropriate gateway connection
},
advanceBy(queue, { previous, remaining }) { // optional
// called at the end of a track when the queue is otherwise unaware of how many tracks to
// advance by; returns a number: 0 to repeat, negative to advance in reverse, positive to
// advance forward
},
});
async function connect() {
const res = await voice.load('some identifier');
const queue = voice.queues.get('some guild ID');
await queue.player.join('channel id'); // join the voice channel
await queue.add(...res.tracks.map(t => t.track)); // add songs to the queue
await queue.start(); // start the queue
}
async function skip() {
await voice.queues.get('some guild ID').next();
}
async function stop() {
await voice.queues.get('some guild ID').stop();
}
Queues are resilient to crashes, meaning it's safe to blindly restart a queue: it will attempt to recover the previous song at the point the crash occurred. You can restart all currently playing queues by calling voice.queues.start()
, although it is recommended to do so as infrequently as possible.
Queue
store: QueueStore
guildID: string
player
- the lavalink playerstart(): Promise<boolean>
- start the queueadd(...tracks: string[]): Promise<number>
- add tracks to the queueunshift(...tracks: string[]): Promise<number>
- add tracks to the front of the queueremove(track: string): PromiseLike<number>
- remove a track from the queuenext(count: number = 1): Promise<boolean>
- skip to the next song; pass negatives to advance in reverse, or 0 to repeatsort(predicate?: (a: string, b: string) => number): Promise<number>
- sort the upcoming tracks; resolves with the length of the queuemove(from: number, to: number): Promise<string[]>
- move a track by index; resolves with the new listshuffle(): Promise<string[]>
- shuffle the list; resolves with the new listsplice(start: number, deleteCount?: number, ...tracks: string[]): Promise<string[]>
- splice the list at the given position; works like Array#splice
trim(start: number, end: number): PromiseLike<string>
- trim the queue to between the specified positionsstop(): Promise<void>
- stop playbackclear(): PromiseLike<number>
- clear the queuecurrent(): Promise<NP | null>
- retrieve the current song: returns an object with properties track
and position
tracks(start: number = 0, end: number = -1): Promise<string[]>
- retrieves queued tracksinterface NP {
position: number;
track: string;
}
QueueStore extends Map<string, Queue>
client: Client
redis: Redis
- the ioredis instance this queue store is usingstart(filter?: (guildID: string) => boolean)
- start all currently playing queues, with an optional filter callbackget(key: string): Queue
- gets the specified queue, or creates one if none is found