Easily create chat bots for Twitch.tv
Install
Install via NPM
$ npm install twitch-bot
Example
const TwitchBot = const Bot = username: 'Kappa_Bot' oauth: 'oauth:dwiaj91j1KKona9j9d1420' channels: 'twitch' Bot Bot Bot
Index
Events
connected - ()
This event is emitted when the bot has connected to the IRC server.
Usage
Bot
join - ()
This event is emitted when a channel has been joined successfully.
Usage
Bot
part - ()
This event is emitted when a channel has been left successfully.
Usage
Bot
message - (chatter: Object)
Emitted when a PRIVSMSG
event is sent over IRC. Chatter object attributes can be found on the Twitch developers site
Usage
Bot
Example Response
color: '#3C78FD' display_name: 'kritzware' emotes: '88:18-25' id: 'c5ee7248-3cea-43f5-ae44-2916d9a1325a' mod: true room_id: 44667418 sent_ts: 1501541672959 subscriber: true tmi_sent_ts: 1501541673368 turbo: false user_id: 44667418 user_type: 'mod' badges: broadcaster: 1 subscriber: 0 channel: '#kritzware' message: 'This is a message PogChamp' username: 'Kritzware'
timeout - (event: Object)
Emitted when a user is timed out in the chat. The ban_reason
attribute is null
when no reason message is used.
Chat Trigger
kritzware: "/timeout {user} {duration} {reason}"
Usage
Bot
Example Response
ban_duration: 10 // seconds ban_reason: 'Using a banned word' room_id: 44667418 target_user_id: 37798112 tmi_sent_ts: 1503346029068 type: 'timeout' channel: '#kritzware' target_username: 'blarev'
subscription - (event: Object)
Emitted when a user subscribes to a channel and chooses to share the subscription in chat.
Usage
Bot
Example Response
"badges": "broadcaster": 1 "staff": 1 "turbo": 1 "channel": "#dallas" "color": "#008000" "display_name": "ronni" "emotes": null "id": "db25007f-7a18-43eb-9379-80131e44d633" "login": "ronni" "message": "Great stream -- keep it up!" // null if no message given "mod": 0 "msg_id": "resub" "msg_param_months": 6 "msg_param_sub_plan": "Prime" "msg_param_sub_plan_name": "Prime" "room_id": 1337 "subscriber": 1 "system_msg": "ronni has subscribed for 6 months!" "tmi_sent_ts": 1507246572675 "turbo": 1 "user_id": 1337 "user_type": "staff"
ban - (event: Object)
Emitted when a user is permanently banned from the chat. The ban_reason
attribute is null
when no reason message is used.
Usage
Bot
Chat Trigger
kritzware: "/ban {user} {reason}"
Example Response
ban_reason: 'Using a banned word' room_id: 44667418 target_user_id: 37798112 tmi_sent_ts: 1503346078025 type: 'ban' channel: '#kritzware' target_username: 'blarev'
error - (err: Object)
Emitted when any errors occurs in the Twitch IRC channel, or when attempting to connect to a channel.
Error types
Login authentication failed
This error occurs when either your twitch username or oauth are incorrect/invalid.
Response:
{ message: 'Login authentication failed' }
Improperly formatted auth
This error occurs when your oauth password is not formatted correctly. The valid format should be "oauth:your-oauth-password-123"
.
Response:
{ message: 'Improperly formatted auth' }
Your message was not sent because you are sending messages too quickly
This error occurs when a message fails to send due to sending messages too quickly. You can avoid this by making the bot a moderator in the channel, if applicable/allowed.
Response:
message: 'Your message was not sent because you are sending messages too quickly'
Usage
Bot
Example Response
message: 'Some error happened in the IRC channel'
close - ()
This event is emitted when the irc connection is destroyed via the Bot.close()
method.
Usage
Bot
Methods
join(channel: String)
Attempts to join a channel. If successful, emits the 'join' event.
Example
BotBot
part(channel: String)
Attempts to part from a channel. If successful, emits the 'part' event.
Example
BotBot
say(message: String, channel: []Channel, err: Callback)
Send a message in the currently connected Twitch channel. channels
parameter not needed when connected to a single channel. An optional callback is provided for validating if the message was sent correctly.
Example
Bot Bot // If connected to multiple channelsBotBot
timeout(username: String, channel: []Channel, duration: int, reason: String)
Timeout a user from the chat. channels
parameter not needed when connected to a single channel. Default duration
is 600 seconds. Optional reason
message.
Example
Bot// "kritzware was timed out for 10 seconds" Bot// "kritzware was timed out for 5 seconds, reason: 'Using a banned word'" Bot
ban(username: String, reason: String)
Permanently ban a user from the chat. channels
parameter not needed when connected to a single channel. Optional reason
message.
Example
Bot// "kritzware is now banned from the room" Bot// "kritzware is now banned from the room, reason: 'Using a banned word'" Bot
close()
Closes the Twitch irc connection. Bot will be removed from the Twitch channel AND the irc server.
Example
Bot
Running Tests
Running the test suite requires at least two twitch accounts, one moderator account and one normal account. The channel used must be the same - This is so timeout/ban methods can be tested with the mod account. Using these two accounts, set the following environment variables:
TWITCHBOT_USERNAME=mod_usernameTWITCHBOT_OAUTH=oauth:mod-oauth-tokenTWITCHBOT_CHANNEL=mod_channelTWITCHBOT_USERNAME_NON_MOD=non_mod_usernameTWITCHBOT_OAUTH_NON_MOD=oauth:non-mod-oauth-tokenTWITCHBOT_CHANNEL_NON_MOD=mod_channel
To run the tests (powered with Mocha), use the following command:
yarn test