better-ttb
v1.2.0
Published
Create Twitch bots gooder
Downloads
5
Maintainers
Readme
Better TTB
Its gooder then the other one
Install
Install via NPM
$ npm install better-ttb
Example
const TwitchClient = require('better-ttb')
const Client = new TwitchClient.{
username: 'Xeno_Pog',
oauth: 'oauth:how_how_is_he_pogging',
channels: ['twitch']
})
Client.on('join', channel => {
console.log(`Joined channel: ${channel.name}`)
})
Client.on('error', err => {
console.log(err)
})
Client.on('message', message => {
if(message.content === '!test') {
Client.send('Command executed! PogChamp')
}
})
Events
connected - (client: TwitchBot)
This event is emitted when the bot has connected to the IRC server.
Usage
Client.on('connected', client => ... );
join - (channel: Channel)
This event is emitted when a channel has been joined successfully.
Usage
Client.on('join', channel => ... );
part - (channel: Channel)
This event is emitted when a channel has been left successfully.
Usage
Client.on('part', channel => ... );
message - (message: Object)
Emitted when a PRIVSMSG
event is sent over IRC. The message (Chatter) object attributes can be found on the Twitch developers site
Usage
Client.on('message', message => ... );
Example Response
{
color: '#3C78FD',
display_name: 'XenoBranch',
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: { name: '#XenoBranch', send: { ... } },
message: 'This is a message PogChamp',
username: 'XenoBranch',
client: TwitchBot { ... }
}
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
XenoBranch: "/timeout {user} {duration} {reason}"
Usage
Client.on('timeout', event => ... )
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: { name: '#XenoBranch', send: { ... } },
target_username: 'serxka'
}
subscription - (event: Object)
Emitted when a user subscribes to a channel and chooses to share the subscription in chat.
Usage
Client.on('subscription', event => ... )
Example Response
{
badges: {
broadcaster: 1,
staff: 1,
turbo: 1
},
channel: { name: '#XenoBranch', send: { ... } },
color: '#008000',
display_name: 'bruh',
emotes: null,
id: 'db25007f-7a18-43eb-9379-80131e44d633',
login: 'bruh',
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: 'bruh 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
Client.on('ban', event => ... )
Chat Trigger
XenoBranch: "/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: '#XenoBranch',
target_username: 'serxka'
}
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
Client.on('error', err => ... )
Example Response
{ message: 'Some error happened in the IRC channel' }
close - ()
This event is emitted when the irc connection is destroyed via the Client.close()
method.
Usage
Client.on('close', () => {
console.log('closed bot irc connection');
});
Methods
join(channel: String)
Attempts to join a channel. If successful, emits the 'join' event.
Example
Client.on('join', channel => {
console.log(`Client joined ${channel.name}`);
});
Client.join('channel2');
part(channel: Object)
Attempts to part from a channel. If successful, emits the 'part' event.
Example
Client.on('part', channel => {
console.log(`Client left ${channel.name}`);
});
Client.part('channel2');
(Client | Channel).send(message: String, channel: []Channel, err: Callback)
Sends a message to the 'Channel' with an optional error callback. The channel is either:
- Given Client.send()
- The currently connected channel
- The specified channel
- Given Channel.send(), the Channel's well, channel.
Example
Client.send('This is a message');
Client.send('your mum (okay so the joke is that she is so incredibly large that she is longer than the 500 character limit)', err => {
sent: false,
message: 'Exceeded PRIVMSG character limit (500)'
ts: '2017-08-13T16:38:54.989Z'
})
// If connected to multiple channels
Client.send('message to #channel1', 'channel1')
Client.send('message to #channel2', 'channel2')
// Responding without reply() because you dont like the formatting or smth
Message.channel.send("Bruh weirdChamp");
Message.reply(message: String, err: Callback)
Responds to the author of the given Message object in the given message channel, prefixing the message with '@${author's username}, ${message}', where author's username is, well, the authors username, and message is your given message. An optional callback is provided for validating if the message was sent correctly.
Example
//IDK its hard to demonstrate this
Message.reply('Listen here you fool, you buffon, you absoulute moron, you complete and utter daft punk.');
Message.rply('i already did this joke', err => {
sent: false,
message: 'Exceeded PRIVMSG character limit (500)'
ts: '2017-08-13T16:38:54.989Z'
})
timeout(username: Object, 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
Client.timeout('XenoBranch', 10)
// "XenoBranch was timed out for 10 seconds"
Client.timeout('XenoBranch', 5, 'Using a banned word (L)')
// "XenoBranch was timed out for 5 seconds, reason: 'Using a banned word (L)'"
Client.on('message', message => {
if(message.content === 'boyfriend') Client.timeout(message.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
Client.ban('XenoBranch')
// "XenoBranch is now banned from the room"
Client.timeout('XenoBranch', 'Using a banned word (L)')
// "XenoBranch is now banned from the room, reason: 'Using a banned word (L)'"
Client.on('message', message => {
if(message.content === 'simp') Client.ban(message.username)
})
close()
Closes the Twitch irc connection. Client will be removed from the Twitch channel AND the irc server.
Example
Client.close()