2022-09-23 17:38:41 +00:00
|
|
|
import { IIRCLine } from '../types/irc.interfaces';
|
|
|
|
|
2022-09-24 07:49:28 +00:00
|
|
|
function skipAndLine(line: string[]): string {
|
|
|
|
let result = line.slice(1).join(' ');
|
|
|
|
if (result.indexOf(':') === 0) {
|
|
|
|
result = result.substring(1);
|
2022-09-23 17:38:41 +00:00
|
|
|
}
|
2022-09-24 07:49:28 +00:00
|
|
|
return result;
|
2022-09-23 17:38:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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(' ');
|
2022-09-24 07:49:28 +00:00
|
|
|
|
|
|
|
if (pass1[0] === 'PING' || pass1[0] === 'ERROR') {
|
|
|
|
final.command = pass1[0];
|
|
|
|
final.trailing = skipAndLine(pass1);
|
|
|
|
return final;
|
2022-09-23 17:38:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|