twitch-kit
Version:
Twitch Bot Package with amazing features like Title Update.
183 lines (141 loc) • 5.12 kB
JavaScript
module.exports = {
commands: [],
formatCHANNEL(channel){
channel = channel.toLowerCase()
return channel.charAt(0) !== '#' ? '#' + channel : channel
},
formatJOIN(event){
event = event.replace(/\r\n/g, '')
return event.split('JOIN ')[1]
},
formatPART(event){
event = event.replace(/\r\n/g, '')
return event.split('PART ')[1]
},
formatPRIVMSG(event) {
const parsed = {}
const msg_parts = event.split('PRIVMSG ')[1]
let split_msg_parts = msg_parts.split(' :')
const channel = split_msg_parts[0]
if(split_msg_parts.length >= 2) {
split_msg_parts.shift()
}
const message = split_msg_parts.join(' :').replace(/\r\n/g, '')
let [tags,username] = event.split('PRIVMSG')[0].split(' :')[0];
Object.assign(parsed,this.formatTAGS(event.split('PRIVMSG')[0].split(' :')[0].split("!")[0].substr(1)))
parsed.mod = !!parsed.mod
parsed.subscriber = !!parsed.subscriber
parsed.turbo = !!parsed.turbo
if(parsed.emote_only) parsed.emote_only = !!parsed.emote_only
parsed.channel = channel
parsed.message = message
parsed.username = parsed.display_name.toLowerCase()
if(parsed.channel.substr(1) === parsed.username) parsed.mod = true;
return parsed
},
formatCLEARCHAT(event) {
const parsed = {}
const msg_parts = event.split('CLEARCHAT ')[1]
let split_msg_parts = msg_parts.split(' :')
const channel = split_msg_parts[0]
const target_username = split_msg_parts[1]
let [tags] = event.split('CLEARCHAT')[0].split(' :')
Object.assign(parsed,this.formatTAGS(tags))
if(parsed.ban_reason) {
parsed.ban_reason = parsed.ban_reason.replace(/\\s/g, ' ')
}
if(parsed.ban_duration) parsed.type = 'timeout'
else parsed.type = 'ban'
parsed.channel = channel
if (target_username) {
parsed.target_username = target_username.replace(/\r\n/g, '')
}
/* TODO: This needs a proper fix */
parsed.tmi_sent_ts = parseInt(parsed.tmi_sent_ts)
return parsed
},
formatCLEARMSG(event) {
const parsed = {};
const msg_parts = event.split('CLEARMSG');
let split_msg_parts = msg_parts[0].split(';');
let username = split_msg_parts[0].split('@login=')[1];
let roomId = split_msg_parts[1].split('@room-id=')[1];
let msgId = split_msg_parts[2].split('target-msg-id=')[1];
let tmi = split_msg_parts[3].split(' ')[0].split('tmi-sent-ts=');
let channel = msg_parts[1].split("#")[1].split(" :")[0];
let msg = msg_parts[1].split("#")[1].split(" :")[1];
parsed['type'] = "delete";
parsed['target_username'] = username;
parsed['channel'] = channel;
parsed['room_id'] = roomId;
parsed['tmi_sent_ts'] = tmi;
parsed['msg_id'] = msgId;
},
formatTAGS(tagstring) {
let tagObject = {}
const tags =tagstring.replace(/\s/g,' ').split(';')
tags.forEach(tag => {
const split_tag = tag.split('=')
const name = this.formatTagName(split_tag[0])
let val = this.formatTagVal(split_tag[1])
tagObject[name] = val
})
if (tagObject.badges){
tagObject.badges = this.formatBADGES(tagObject.badges)
}
return tagObject
},
formatBADGES(badges){
let badgesObj = {}
if(badges) {
badges = badges.split(',')
badges.forEach(badge => {
const split_badge = badge.split('/')
badgesObj[split_badge[0]] = +split_badge[1]
})
}
return badgesObj
},
formatUSERNOTICE(event){
const parsed = {}
const msg_parts = event.split('USERNOTICE')[1]
let split_msg_parts = msg_parts.split(' :')
parsed.channel = split_msg_parts[0].trim()
parsed.message = split_msg_parts[1] || null
let tags = event.split('USERNOTICE')[0].split(':')[0].trim()
Object.assign(parsed,this.formatTAGS(tags))
return parsed
},
formatTagName(tag) {
if(tag.includes('-')) {
tag = tag.replace(/-/g, '_')
}
if(tag.includes('@')) {
tag = tag.replace('@', '')
}
return tag.trim()
},
formatTagVal(val) {
if(!val) return null
if(val.match(/^[0-9]+$/) !== null) {
return +val
}
if (val.includes('\s')){
val = val.replace(/\\s/g, ' ')
}
return val.trim()
},
async checkErrors(text) {
text = text.toLowerCase();
if(text.includes('login authentication failed')) {
return await 'LOGIN';
}
if(text.includes('improperly formattet auth')) {
return await 'AUTH';
}
if(text.includes('your message was not sent because you are sending too quickly')) {
return await 'SPAM';
}
return await 'OK';
}
};