// :nickname!username@hostname command arg ume nts :trailing // or // :hostname command arg ume nts :trailing function parseERROR (line) { let final = { user: { nickname: '', username: '', hostname: '' }, command: 'ERROR', message: '', raw: line.join(' ') } let pass1 = line.slice(1).join(' ') if (pass1.indexOf(':') === 0) { pass1 = pass1.substring(1) } final.message = pass1 return final } module.exports = function (rawline) { let final = { user: { nickname: '', username: '', hostname: '' }, command: '', arguments: [], trailing: '', raw: rawline } let pass1 = (rawline.indexOf(':') === 0 ? rawline.substring(1).split(' ') : rawline.split(' ')) if (pass1[0] === 'ERROR') return parseERROR(pass1) if (pass1[0].indexOf('!') !== -1) { let nickuser = pass1[0].split('!') final.user.nickname = nickuser[0] let userhost = nickuser[1].split('@') final.user.username = userhost[0] final.user.hostname = userhost[1] } else { final.user.hostname = pass1[0] } final.command = pass1[1] let pass2 = pass1.slice(2).join(' ') if (pass2.indexOf(':') !== -1) { final.arguments = pass2.substring(0, pass2.indexOf(' :')).split(' ') final.trailing = pass2.substring(pass2.indexOf(':') + 1) } else { final.arguments = pass2.split(' ') } return final }