irclib/src/utility/parser.ts

57 lines
1.3 KiB
TypeScript

import { IIRCLine } from '../types/irc.interfaces';
function skipAndLine(line: string[]): string {
let result = line.slice(1).join(' ');
if (result.indexOf(':') === 0) {
result = result.substring(1);
}
return result;
}
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] === 'PING' || pass1[0] === 'ERROR') {
final.command = pass1[0];
final.trailing = skipAndLine(pass1);
return final;
}
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;
}