Skip to main content

Songrequest

Topic

channel.songrequest

Description

This topic provides real-time songrequest events published to Astro for WebSocket delivery. It covers all songrequest-related actions including player controls, queue management, history tracking, song playback, and settings updates.

Usage

Subscribe to this topic to receive notifications about songrequest activities, allowing you to build real-time songrequest displays, queue management interfaces, or sync songrequest state across multiple clients.

Message Structure

{
"id": "01KC4840ZZ1BAMK5R2V9QX9BNA",
"ts": "2025-01-15T14:30:00Z",
"type": "message",
"topic": "channel.songrequest",
"room": "577c0455f9a31ea72a36b2b3",
"data": {
"event": "queue.add",
"payload": {}
}
}

Parameters

ParameterTypeDescription
roomstringChannel ID
data.eventstringEvent type (e.g., queue.add, settings.update)
data.payloadobjectEvent-specific payload data

Events

Player Events

EventDescription
playSong resumed
pauseSong paused
volumeVolume changed

volume

{
"event": "volume",
"payload": {
"volume": 75
}
}
ParameterTypeDescription
volumenumberVolume level (0-100)

Queue Events

EventDescription
queue.addSong added to queue
queue.removeSong removed from queue
queue.clearQueue cleared
queue.purgeUser purged from queue
pending.approvePending songs approved

queue.add

{
"event": "queue.add",
"payload": {
"song": {
"_id": "507f1f77bcf86cd799439011",
"videoId": "dQw4w9WgXcQ",
"title": "Example Song Title",
"duration": 212,
"start": 0,
"end": 212,
"channel": "577c0455f9a31ea72a36b2b3",
"amount": 0,
"message": "Great song!",
"user": {
"providerId": "12345678",
"username": "viewer123",
"subscriber": true
},
"promoted": false,
"skipped": false,
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"type": "video",
"source": "bot",
"approvedBy": "",
"provider": "youtube",
"voteskips": [],
"tags": ["music"],
"statistics": {
"viewCount": 1000000,
"likeCount": 50000,
"dislikeCount": 1000
},
"categoryId": 10
},
"position": 3,
"queue": "queue"
}
}
ParameterTypeDescription
songSongrequestSongThe song that was added
positionnumberOptional position in queue
queuestringQueue type: pending or queue

queue.remove

{
"event": "queue.remove",
"payload": {
"queue": "queue",
"songId": "507f1f77bcf86cd799439011"
}
}
ParameterTypeDescription
queuestringQueue type: pending or queue
songIdstringID of the removed song

queue.clear

{
"event": "queue.clear",
"payload": {
"queue": "queue"
}
}
ParameterTypeDescription
queuestringQueue type: pending or queue

queue.purge

{
"event": "queue.purge",
"payload": {
"queue": "queue",
"user": "viewer123"
}
}
ParameterTypeDescription
queuestringQueue type (always queue)
userstringUsername whose songs were purged

pending.approve

{
"event": "pending.approve",
"payload": {
"approvedBy": "moderator123"
}
}
ParameterTypeDescription
approvedBystringUsername of the approver

History Events

EventDescription
history.addSong added to history
history.clearHistory cleared
history.removeEntry removed from history

history.add

The payload contains the full history document.

history.clear

{
"event": "history.clear",
"payload": {
"removed": 25
}
}
ParameterTypeDescription
removednumberNumber of entries removed

history.remove

{
"event": "history.remove",
"payload": {
"songId": "507f1f77bcf86cd799439011"
}
}
ParameterTypeDescription
songIdstringID of the removed history entry

Song Events

EventDescription
song.nextNext song playing
song.skipSong skipped
song.positionPosition changed in queue
song.voteskipVote-skip progress update
song.previousPrevious song replayed

song.next

{
"event": "song.next",
"payload": {
"nextSong": {
"_id": "507f1f77bcf86cd799439011",
"videoId": "dQw4w9WgXcQ",
"title": "Next Song Title",
"duration": 180
}
}
}
ParameterTypeDescription
nextSongSongrequestSongThe next song, or undefined if queue is empty

song.position

{
"event": "song.position",
"payload": {
"songId": "507f1f77bcf86cd799439011",
"position": 2
}
}
ParameterTypeDescription
songIdstringID of the song
positionnumberNew position in queue

song.voteskip

{
"event": "song.voteskip",
"payload": {
"totalVotes": 3,
"votesRequired": 5,
"completed": false
}
}
ParameterTypeDescription
totalVotesnumberCurrent number of votes
votesRequirednumberVotes needed to skip
completedbooleanWhether the vote-skip succeeded

song.previous

{
"event": "song.previous",
"payload": {
"song": {
"_id": "507f1f77bcf86cd799439011",
"videoId": "dQw4w9WgXcQ",
"title": "Previous Song Title"
}
}
}
ParameterTypeDescription
songSongrequestSongThe previous song being replayed

Settings Events

EventDescription
settings.updateSongrequest settings changed

settings.update

The payload contains the full SongrequestSettings object.

Data Types

SongrequestSong

FieldTypeDescription
_idstringUnique song identifier
videoIdstringVideo ID from provider
titlestringSong title
durationnumberDuration in seconds
startnumberStart time in seconds
endnumberEnd time in seconds
channelstringChannel ID
amountnumberTip amount (if tip request)
messagestringUser message with request
userSongrequestUserUser who requested the song
promotedbooleanWhether song was promoted in queue
skippedbooleanWhether song was skipped
urlstringFull URL to the video
typestringContent type
sourcestringRequest source: tip, bot, or site
approvedBystringUsername of approver (if moderated)
providerstringVideo provider (e.g., youtube)
voteskipsarrayArray of users who voted to skip
tagsarrayVideo tags
statistics.viewCountnumberVideo view count
statistics.likeCountnumberVideo like count
statistics.dislikeCountnumberVideo dislike count
categoryIdnumberVideo category ID

SongrequestUser

FieldTypeDescription
providerIdstringOptional provider user ID
usernamestringUsername
subscriberbooleanOptional subscriber status

SongrequestSettings

FieldTypeDescription
enabledbooleanWhether songrequests are enabled
modestringMode: free, tip, or combined
moderationbooleanWhether moderation is enabled
player.delaynumberPlayer delay in milliseconds
limits.queueLimitnumberMaximum queue size
limits.maxDurationnumberMaximum song duration
limits.maxFreeDurationnumberMaximum duration for free requests
limits.users.freenumberFree requests per user
limits.users.paidnumberPaid requests per user
backupPlaylist.urlstringBackup playlist URL
backupPlaylist.prioritizeQueuebooleanWhether to prioritize queue over backup
bannedUsersarrayArray of banned users
bot.costnumberPoints cost for bot requests
bot.subscriberDiscountnumberSubscriber discount percentage
bot.exemptUserLevelnumberUser level exempt from limits
bot.minUserLevelnumberMinimum user level to request
bot.voteskip.enabledbooleanWhether vote-skip is enabled
bot.voteskip.votesRequirednumberVotes required to skip
tips.prioritizebooleanWhether to prioritize tip requests
tips.minAmountnumberMinimum tip amount
tips.mediashare.enabledbooleanWhether mediashare is enabled
tips.mediashare.costPerSecondnumberCost per second for mediashare
youtube.securityLevelnumberYouTube security level
youtube.musicOnlybooleanWhether to allow only music
youtube.bannedTagsarrayArray of banned tags
youtube.bannedVideosarrayArray of banned video IDs
youtube.streamGeoLocationstringStream geo-location setting