import { IIRCLine } from '../types/irc.interfaces'; function parseERROR(line: string[]): IIRCLine { const final: IIRCLine = { user: { nickname: '', username: '', hostname: '' }, command: 'ERROR', trailing: '', raw: line.join(' '), }; let pass1 = line.slice(1).join(' '); if (pass1.indexOf(':') === 0) { pass1 = pass1.substring(1); } final.trailing = pass1; return final; } export function parse(rawline: string): IIRCLine { const final: IIRCLine = { user: { nickname: '', username: '', hostname: '', }, command: '', arguments: [], trailing: '', raw: rawline, }; const pass1 = rawline.indexOf(':') === 0 ? rawline.substring(1).split(' ') : rawline.split(' '); if (pass1[0] === 'ERROR') { return parseERROR(pass1); } if (pass1[0].indexOf('!') !== -1) { const nickuser = pass1[0].split('!'); final.user.nickname = nickuser[0]; const userhost = nickuser[1].split('@'); final.user.username = userhost[0]; final.user.hostname = userhost[1]; } else { final.user.hostname = pass1[0]; } final.command = pass1[1]; const 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; }