Neat little Node library which lets you easily interact with the Twitch.tv PubSub service.
Feature | Topic and Example | Required Scope | You are notified when … |
---|---|---|---|
Bits | channel-bits-events-v1.<channel ID> channel-bits-events-v2.<channel ID> Example: channel-bits-events-v1.44322889 |
bits:read |
Anyone cheers on a specified channel. |
Bits Badge Notification | channel-bits-badge-unlocks.<channel_id> Example: channel-bits-badge-unlocks.44322889 |
bits:read |
Message sent when a user earns a new Bits badge in a particular channel, and chooses to share the notification with chat. |
Channel Points | channel-points-channel-v1.<channel_id> Example: channel-points-channel-v1.44322889 |
channel:read:redemptions |
A custom reward is redeemed in a channel. |
Community Channel Points | community-points-channel-v1.<channel_id> Example: community-points-channel-v1.44322889 |
No scope needed | Access to more events than standard channel points. It outputs to the reward-redeemed event. Check events table below |
Channel Subscriptions | channel-subscribe-events-v1.<channel ID> Example: channel-subscribe-events-v1.44322889 |
channel_subscriptions |
Anyone subscribes (first month, gift sub) or resubscribes (subsequent months) to a channel. |
Whispers | whispers.<user ID> Example: whispers.44322889 |
whispers:read |
Anyone whispers the specified user. |
Stream Status | video-playback.<channel name> Example: video-playback.summit1g |
No scope needed | Status on stream going up, down, and viewer count. Not officially supported by Twitch |
Moderator Action | chat_moderator_actions.<channel ID> Example: chat_moderator_actions.44322889 |
channel:moderate |
A moderator performs an action in the channel. |
Install via NPM
npm i twitchps --save
Name | Type | Optional | Default | Description |
---|---|---|---|---|
init_topics | JSON object | False | *NONE | JSON Object array of initial topics with tokens. See below. |
reconnect | boolean | True | True | Reconnect when disconnected from Pubsub servers. |
debug | boolean | True | False | Turns debug console output on and off. |
const TwitchPS = require('twitchps');
// Initial topics are required
let init_topics = [{topic: 'video-playback.bajheera'}, {topic: 'whispers.44322889', token: 'nkuaf7ur3trg7ju37md1y3u5p52s3q'}];
// Optional reconnect, debug options (Defaults: reconnect: true, debug: false)
var ps = new TwitchPS({init_topics: init_topics, reconnect: false, debug: true});
ps.on('stream-up', (data) => {
console.log(data.time , data.channel_name);
// Use data here
});
Token changed for security reasons. You can generate a token here.
In order to find the userID/channelID follow the instructions here.
For more detailed usage see example application.
Event Name | You are notified when … |
---|---|
'connected' | A successful connection has been established |
'disconnected' | The connection has been terminated |
'reconnect' | An attempt will be made to reconnect |
Event Name | List of fields |
---|---|
'error' | origin - {string} error - {string} (optional if topic is involved) topic - {string} |
'bits' | badge_entitlement - {object} (v2 only) bits_used - {integer} channel_id - {string} channel_name - {string} chat_message - {string} context - {string} is_anonymous - {boolean} (v2 only) message_id - {string} message_type - {string} time - {string} total_bits_used - {integer} user_id - {string} user_name - {string} version - {string} |
'bits-badge' | user_id - {string} - ID of user who earned the new Bits badge user_name - {string} - Login of user who earned the new Bits badge channel_id - {string} - ID of channel where user earned the new Bits badge channel_name - {string} - Login of channel where user earned the new Bits badge badge_tier - {int} - Value of Bits badge tier that was earned (1000, 10000, etc.) chat_message - {string} - [Optional] Custom message included with share time - {string} - Time when the bits were used. RFC 3339 format |
'reward-redeemed' (from community-points-channel-v1 ) |
timestamp - {string} - Time the pubsub message was sent redemption - {object} - Data about the redemption, includes unique id and user that redeemed it channel_id - {string} - ID of the channel in which the reward was redeemed. redeemed_at - {string} - Timestamp in which a reward was redeemed reward - {object} - Data about the reward that was redeemed user_input - {string} - [Optional] A string that the user entered if the reward requires input status - {string} - reward redemption status, will be FULFULLED if a user skips the reward queue, UNFULFILLED otherwise |
'channel-points' (from channel-points-channel-v1 ) |
timestamp - {string} - Time the pubsub message was sent redemption - {object} - Data about the redemption, includes unique id and user that redeemed it channel_id - {string} - ID of the channel in which the reward was redeemed. redeemed_at - {string} - Timestamp in which a reward was redeemed reward - {object} - Data about the reward that was redeemed user_input - {string} - [Optional] A string that the user entered if the reward requires input status - {string} - reward redemption status, will be FULFULLED if a user skips the reward queue, UNFULFILLED otherwise |
'community-points-all' | type - {string} timestamp - {string} event - {object} |
'community-reward-created' 'community-reward-updated' 'community-reward-deleted' 'community-goal-created' 'community-goal-updated' 'community-goal-deleted' |
timestamp - {string} event - {object} |
'subscribe' | user_name - {string} display_name - {string} channel_name - {string} user_id - {string} channel_id- {string} time- {string} sub_plan- {string} sub_plan_name - {string} months - {integer} cumulative_months - {integer} context - {string} sub_message - {object} sub_message.message - {string} sub_message.emotes - {array} recipient_id - {integer} recipient_user_name - {string} recipient_display_name - {string} |
'whisper_sent' & 'whisper_received' | id - {integer} body - {string} thread_id - {string} sender - {JSON} sender.id - {integer} sender.username - {string} sender.display_name - {string} sender.color - {string} sender.badges - {Array} sender.emotes - {Array} recipient - {JSON} recipient.id - {integer} recipient.username - {string} recipient.display_name - {string} recipient.color - {string} recipient.badges - {Array} sent_ts - {integer} nonce - {string} |
'stream-up' | time - {integer} channel_name- {string} play_delay - {string} |
'stream-down' | time - {integer} channel_name- {string} |
'viewcount' | time - {integer} channel_name- {string} viewers - {integer} |
'automod_rejected' | user - {string} user_id - {string} message_id - {string} message - {string} reason - {string} |
'approved_automod_message' | createdBy - {string} created_by_user_id - {string} message_id - {string} target_user_login - {string} target_user_id - {string} |
'denied_automod_message' | createdBy - {string} created_by_user_id - {string} message_id - {string} target_user_login - {string} target_user_id - {string} |
'add_permitted_term' | createdBy - {string} created_by_user_id - {string} approved_term - {string} |
'delete_permitted_term' | createdBy - {string} created_by_user_id - {string} deleted_term - {string} |
'add_blocked_term' | createdBy - {string} created_by_user_id - {string} approved_term - {string} |
'add_permitted_term' | createdBy - {string} created_by_user_id - {string} blocked_term - {string} |
ps.addTopic([{topic: "video-playback.starladder_cs_en"}]);
ps.addTopic([{topic: 'whispers.38290946', token: 'nkuaf7ur3trg7ju37md1y3u5p52s3q'}]);
Token changed for security reasons.
ps.removeTopic([{topic: "video-playback.starladder_cs_en"}]);
Token not required.
- Follow @thecuriouseng on Twitter
- Have a question that is not a bug report? - Tweet me @thecuriouseng
- Found a bug ? Submit an issue.