UNPKG

twitch-kit

Version:

Twitch Bot Package with amazing features like Title Update.

183 lines (141 loc) 5.12 kB
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'; } };