better-ttb
Version:
Create Twitch bots gooder
146 lines (98 loc) • 3.56 kB
JavaScript
const _ = require('lodash');
module.exports = {
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 content = split_msg_parts.join(' :').replace(/\r\n/g, '');
let [tags,username] = event.split('PRIVMSG')[0].split(' :');
parsed.username = username.split('!')[0]
Object.assign(parsed,this.formatTAGS(tags));
parsed.mod = !!parsed.mod;
parsed.subscriber = !!parsed.subscriber;
parsed.turbo = !!parsed.turbo;
if(parsed.emote_only) parsed.emote_only = !!parsed.emote_only;
parsed.channel = { name: channel };
parsed.content = content;
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;
},
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();
}
}