Skip to content

Instantly share code, notes, and snippets.

@VityaSchel
Last active March 3, 2024 06:03
Show Gist options
  • Save VityaSchel/1600c9ed2e811875f9d98e4e84b8a938 to your computer and use it in GitHub Desktop.
Save VityaSchel/1600c9ed2e811875f9d98e4e84b8a938 to your computer and use it in GitHub Desktop.
YouTube chat subscription JavaScript: Get every new message during YouTube livestream chat with DOM Mutation Observer
/* YouTube Chat Subscription Function. Written by VityaSchel
* Subscribe to new messages in YouTube chat in JS (browser-only)
* Pass callback function which gets 2 parameters: author, message
* !! Does not support emojies, user badges, message deletions !!
*/
function subscribeToChat(chatMessageCallback) {
let chatObserverCallback = (mutationsList, observer) => {
let messageMutation = mutationsList.filter(mutation => mutation.target.id === 'items').find(itemDOM => itemDOM.addedNodes.length > 0)
if(messageMutation === undefined || messageMutation.addedNodes.length === 0) { return; }
let messageNode = messageMutation.addedNodes[0]
if(messageNode === undefined) { return; }
let messageContent = messageNode.querySelector('#content')
let authorName = messageContent.querySelector('yt-live-chat-author-chip > #author-name').innerText
let messageText = messageContent.querySelector('#message').innerText
chatMessageCallback(authorName, messageText)
}
let chatTarget = document.querySelector('yt-live-chat-item-list-renderer')
let chatObserver = new MutationObserver(chatObserverCallback)
chatObserver.observe(chatTarget, { childList: true, subtree: true })
}
// Example of usage:
// subscribeToChat((author, msg) => console.log(author, ':', msg))
/* Output:
* Jay : pallavi Didi ️
* Nightbot : Hey Sameer Kumar is Spammer randwa, enjoy The Good Life :)
*/
@VityaSchel
Copy link
Author

Tested in chat pop-up.
URL of chat pop-up: https://www.youtube.com/live_chat?is_popout=1&v=[VIDEO_ID]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment