Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kritzware/twitch-bot
🤖 Easily create chat bots for Twitch.tv
https://github.com/kritzware/twitch-bot
chatbot irc javascript kappa nodejs twitch twitchbot
Last synced: 7 days ago
JSON representation
🤖 Easily create chat bots for Twitch.tv
- Host: GitHub
- URL: https://github.com/kritzware/twitch-bot
- Owner: kritzware
- License: mit
- Created: 2017-07-30T21:06:38.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-01-11T07:49:01.000Z (almost 2 years ago)
- Last Synced: 2024-10-30T08:53:23.008Z (about 2 months ago)
- Topics: chatbot, irc, javascript, kappa, nodejs, twitch, twitchbot
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/twitch-bot
- Size: 439 KB
- Stars: 149
- Watchers: 7
- Forks: 36
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-twitch-dev - kritzware/twitch-bot - Easily create chat bots for Twitch.tv. (Libraries / JavaScript (Node.js))
README
# twitch-bot [![CircleCI](https://circleci.com/gh/kritzware/twitch-bot.svg?style=svg&circle-token=3d338af28058e84dde13bee88751a50f55aefab3)](https://circleci.com/gh/kritzware/twitch-bot)
Easily create chat bots for Twitch.tv## Install
Install via NPM
```
$ npm install twitch-bot
```## Example
```javascript
const TwitchBot = require('twitch-bot')const Bot = new TwitchBot({
username: 'Kappa_Bot',
oauth: 'oauth:dwiaj91j1KKona9j9d1420',
channels: ['twitch']
})Bot.on('join', channel => {
console.log(`Joined channel: ${channel}`)
})Bot.on('error', err => {
console.log(err)
})Bot.on('message', chatter => {
if(chatter.message === '!test') {
Bot.say('Command executed! PogChamp')
}
})```
## Index
- [Events](https://github.com/kritzware/twitch-bot#events)
- [`connected`](https://github.com/kritzware/twitch-bot#connected---)
- [`join`](https://github.com/kritzware/twitch-bot#join---)
- [`part`](https://github.com/kritzware/twitch-bot#part---)
- [`message`](https://github.com/kritzware/twitch-bot#message---chatter-object)
- [`timeout`](https://github.com/kritzware/twitch-bot#timeout---event-object)
- [`subscription`](https://github.com/kritzware/twitch-bot#subscription---event-object)
- [`ban`](https://github.com/kritzware/twitch-bot#ban---event-object)
- [`error`](https://github.com/kritzware/twitch-bot#error---err-object)
- [`close`](https://github.com/kritzware/twitch-bot#close---)
- [Methods](https://github.com/kritzware/twitch-bot#methods)
- [`join()`](https://github.com/kritzware/twitch-bot#join-channelname--string))
- [`part()`](https://github.com/kritzware/twitch-bot#part-channelname--string)
- [`say()`](https://github.com/kritzware/twitch-bot#saymessage-string-err-callback)
- [`timeout()`](https://github.com/kritzware/twitch-bot#timeoutusername-string-duration-int-reason-string)
- [`ban()`](https://github.com/kritzware/twitch-bot#banusername-string-reason-string)
- [`close()`](https://github.com/kritzware/twitch-bot#close)
- [Tests](https://github.com/kritzware/twitch-bot#running-tests)## Events
### `connected - ()`
This event is emitted when the bot has connected to the IRC server.
#### Usage
```javascript
Bot.on('connected', () => ... )
```### `join - ()`
This event is emitted when a channel has been joined successfully.
#### Usage
```javascript
Bot.on('join', channel => ... )
```### `part - ()`
This event is emitted when a channel has been left successfully.
#### Usage
```javascript
Bot.on('part', channel => ... )
```### `message - (chatter: Object)`
Emitted when a `PRIVSMSG` event is sent over IRC. Chatter object attributes can be found on the [Twitch developers site](https://dev.twitch.tv/docs/v5/guides/irc/#privmsg-twitch-tags)#### Usage
```javascript
Bot.on('message', chatter => ... )
```#### Example Response
```javascript
{ 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
```javascript
kritzware: "/timeout {user} {duration} {reason}"
```#### Usage
```javascript
Bot.on('timeout', event => ... )
```#### Example Response
```javascript
{ 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
```javascript
Bot.on('subscription', event => ... )
```#### Example Response
```javascript
{
"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
```javascript
Bot.on('ban', event => ... )
```#### Chat Trigger
```javascript
kritzware: "/ban {user} {reason}"
```#### Example Response
```javascript
{ 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:
```javscript
{ 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:
```javscript
{ 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:
```javascript
{ message: 'Your message was not sent because you are sending messages too quickly' }
```#### Usage
```javascript
Bot.on('error', err => ... )
```#### Example Response
```javascript
{ 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
```javascript
Bot.on('close', () => {
console.log('closed bot irc connection')
})
```## Methods
### `join(channel: String)`
Attempts to join a channel. If successful, emits the 'join' event.#### Example
```javascript
Bot.on('join', channel => {
console.log(`Bot joined ${channel}`)
})
Bot.join('channel2')
```### `part(channel: String)`
Attempts to part from a channel. If successful, emits the 'part' event.#### Example
```javascript
Bot.on('part', channel => {
console.log(`Bot left ${channel}`)
})
Bot.part('channel2')
```### `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
```javascript
Bot.say('This is a message')Bot.say('Pretend this message is over 500 characters', err => {
sent: false,
message: 'Exceeded PRIVMSG character limit (500)'
ts: '2017-08-13T16:38:54.989Z'
})// If connected to multiple channels
Bot.say('message to #channel1', 'channel1')
Bot.say('message to #channel2', 'channel2')
```### `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
```javascript
Bot.timeout('kritzware', 10)
// "kritzware was timed out for 10 seconds"Bot.timeout('kritzware', 5, 'Using a banned word')
// "kritzware was timed out for 5 seconds, reason: 'Using a banned word'"Bot.on('message', chatter => {
if(chatter.message === 'xD') Bot.timeout(chatter.username, 10)
})
```### `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
```javascript
Bot.ban('kritzware')
// "kritzware is now banned from the room"Bot.timeout('kritzware', 'Using a banned word')
// "kritzware is now banned from the room, reason: 'Using a banned word'"Bot.on('message', chatter => {
if(chatter.message === 'Ban me!') Bot.ban(chatter.username)
})
```### `close()`
Closes the Twitch irc connection. Bot will be removed from the Twitch channel AND the irc server.#### Example
```javascript
Bot.close()
```## 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:
```javascript
TWITCHBOT_USERNAME=mod_username
TWITCHBOT_OAUTH=oauth:mod-oauth-token
TWITCHBOT_CHANNEL=mod_channel
TWITCHBOT_USERNAME_NON_MOD=non_mod_username
TWITCHBOT_OAUTH_NON_MOD=oauth:non-mod-oauth-token
TWITCHBOT_CHANNEL_NON_MOD=mod_channel
```
To run the tests (powered with [Mocha](https://mochajs.org/)), use the following command:
```bash
yarn test
```