สร้างแชทบอทสำหรับ Twitch.tv ได้อย่างง่ายดาย
ติดตั้งผ่าน NPM
$ npm install twitch-bot
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' )
}
} )
connected
join
part
message
timeout
subscription
ban
error
close
join()
)part()
say()
timeout()
ban()
close()
connected - ()
เหตุการณ์นี้เกิดขึ้นเมื่อบอทเชื่อมต่อกับเซิร์ฟเวอร์ IRC
Bot . on ( 'connected' , ( ) => ... )
join - ()
กิจกรรมนี้จะถูกส่งออกมาเมื่อมีการเข้าร่วมช่องสำเร็จแล้ว
Bot . on ( 'join' , channel => ... )
part - ()
เหตุการณ์นี้จะถูกส่งออกมาเมื่อปล่อยช่องไว้สำเร็จ
Bot . on ( 'part' , channel => ... )
message - (chatter: Object)
ปล่อยออกมาเมื่อมีการส่งเหตุการณ์ PRIVSMSG
ผ่าน IRC สามารถดูคุณสมบัติของวัตถุ Chatter ได้ที่เว็บไซต์นักพัฒนา Twitch
Bot . on ( 'message' , chatter => ... )
{ 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)
ปล่อยออกมาเมื่อผู้ใช้หมดเวลาในการแชท คุณลักษณะ ban_reason
เป็น null
เมื่อไม่มีการใช้ข้อความแสดงเหตุผล
kritzware: "/timeout {user} {duration} {reason}"
Bot . on ( 'timeout' , event => ... )
{ 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)
เกิดขึ้นเมื่อผู้ใช้สมัครรับข้อมูลช่องและเลือกที่จะแบ่งปันการสมัครรับข้อมูลในแชท
Bot . on ( 'subscription' , event => ... )
{
"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)
แจ้งเมื่อผู้ใช้ถูกแบนจากแชทอย่างถาวร คุณลักษณะ ban_reason
เป็น null
เมื่อไม่มีการใช้ข้อความแสดงเหตุผล
Bot . on ( 'ban' , event => ... )
kritzware: "/ban {user} {reason}"
{ 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)
แจ้งเมื่อเกิดข้อผิดพลาดใดๆ ในช่อง Twitch IRC หรือเมื่อพยายามเชื่อมต่อกับช่อง
Login authentication failed
ข้อผิดพลาดนี้เกิดขึ้นเมื่อชื่อผู้ใช้ twitch หรือ oauth ของคุณไม่ถูกต้อง/ไม่ถูกต้อง
การตอบสนอง:
{ message: 'Login authentication failed' }
Improperly formatted auth
ข้อผิดพลาดนี้เกิดขึ้นเมื่อรหัสผ่าน oauth ของคุณมีรูปแบบไม่ถูกต้อง รูปแบบที่ถูกต้องควรเป็น "oauth:your-oauth-password-123"
การตอบสนอง:
{ message: 'Improperly formatted auth' }
Your message was not sent because you are sending messages too quickly
ข้อผิดพลาดนี้เกิดขึ้นเมื่อไม่สามารถส่งข้อความได้เนื่องจากการส่งข้อความเร็วเกินไป คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยกำหนดให้บอทเป็นผู้ดูแลในช่อง หากมี/ได้รับอนุญาต
การตอบสนอง:
{ message : 'Your message was not sent because you are sending messages too quickly' }
Bot . on ( 'error' , err => ... )
{ message : 'Some error happened in the IRC channel' }
close - ()
เหตุการณ์นี้เกิดขึ้นเมื่อการเชื่อมต่อ irc ถูกทำลายโดยใช้วิธี Bot.close()
Bot . on ( 'close' , ( ) => {
console . log ( 'closed bot irc connection' )
} )
join(channel: String)
ความพยายามที่จะเข้าร่วมช่อง หากสำเร็จ ให้ส่งเสียงกิจกรรม 'เข้าร่วม'
Bot . on ( 'join' , channel => {
console . log ( `Bot joined ${ channel } ` )
} )
Bot . join ( 'channel2' )
part(channel: String)
ความพยายามที่จะแยกออกจากช่อง หากสำเร็จ ให้ปล่อยเหตุการณ์ 'ส่วนหนึ่ง'
Bot . on ( 'part' , channel => {
console . log ( `Bot left ${ channel } ` )
} )
Bot . part ( 'channel2' )
say(message: String, channel: []Channel, err: Callback)
ส่งข้อความในช่อง Twitch ที่เชื่อมต่ออยู่ในปัจจุบัน ไม่จำเป็นต้องใช้พารามิเตอร์ channels
เมื่อเชื่อมต่อกับช่องสัญญาณเดียว มีการโทรกลับเพิ่มเติมเพื่อตรวจสอบว่าข้อความถูกส่งอย่างถูกต้องหรือไม่
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)
หมดเวลาผู้ใช้จากการแชท ไม่จำเป็นต้องใช้พารามิเตอร์ channels
เมื่อเชื่อมต่อกับช่องสัญญาณเดียว duration
เริ่มต้นคือ 600 วินาที ข้อความ reason
เพิ่มเติม
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)
แบนผู้ใช้จากการแชทอย่างถาวร ไม่จำเป็นต้องใช้พารามิเตอร์ channels
เมื่อเชื่อมต่อกับช่องสัญญาณเดียว ข้อความ reason
เพิ่มเติม
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()
ปิดการเชื่อมต่อ Twitch irc บอทจะถูกลบออกจากช่อง Twitch และเซิร์ฟเวอร์ irc
Bot . close ( )
การเรียกใช้ชุดทดสอบต้องมีบัญชี Twitch อย่างน้อยสองบัญชี บัญชีผู้ดูแลหนึ่งบัญชี และบัญชีปกติหนึ่งบัญชี ช่องทางที่ใช้จะต้องเหมือนกัน - เพื่อให้สามารถทดสอบวิธีการหมดเวลา/แบนกับบัญชี mod ได้ ใช้ทั้งสองบัญชีนี้ ตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้:
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
หากต้องการรันการทดสอบ (ขับเคลื่อนด้วย Mocha) ให้ใช้คำสั่งต่อไปนี้:
yarn test