irclib/src/utility/whois-parser.ts

68 lines
1.6 KiB
TypeScript

import { IIRCLine } from '../types/irc.interfaces';
export interface WhoisResponse {
nickname?: string;
hostmask?: string;
realname?: string;
channels?: string[];
connectingFrom?: string;
usingModes?: string;
server?: string;
serverName?: string;
title?: string;
loggedInAs?: string;
bot?: boolean;
registered?: boolean;
secure?: boolean;
signOnTime?: number;
idleSeconds?: number;
}
export function parseWhois(lines: IIRCLine[]) {
const data: WhoisResponse = {};
lines.forEach((line) => {
switch (line.command) {
case '311':
data.nickname = line.arguments![1];
data.hostmask = `${line.arguments![2]}@${line.arguments![3]}`;
data.realname = line.trailing || '';
break;
case '319':
data.channels = line.trailing?.split(' ');
break;
case '378':
data.connectingFrom = line.trailing;
break;
case '379':
data.usingModes = line.trailing;
break;
case '312':
data.server = line.arguments![2];
data.serverName = line.trailing || '';
break;
case '313':
data.title = line.trailing;
break;
case '330':
data.loggedInAs = line.arguments![2];
break;
case '335':
data.bot = true;
break;
case '307':
data.registered = true;
break;
case '671':
data.secure = true;
break;
case '317':
data.signOnTime = parseInt(line.arguments![3], 10);
data.idleSeconds = parseInt(line.arguments![2], 10);
break;
}
});
return data;
}