68 lines
1.6 KiB
TypeScript
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;
|
|
}
|