irclib/src/utility/user-mapper.ts

64 lines
1.7 KiB
TypeScript

import { IUserLine } from '../types/irc.interfaces';
import { truncate } from './truncate';
export function mapUserInput(data: IUserLine, msgMaxLength = 512): string[][] {
let output: string[][] = [];
switch (data.command) {
case 'topic':
output.push([
'TOPIC %s',
data.arguments![0],
data.message !== '' ? ' :' + data.message : '',
]);
break;
case 'kick':
output.push(['KICK %s :%s', data.arguments!.join(' '), data.message]);
break;
case 'part':
output.push(['PART %s :%s', data.arguments![0], data.message]);
break;
case 'nick':
case 'whois':
case 'who':
case 'names':
case 'join':
output.push(['JOIN %s', data.arguments![0]]);
break;
case 'quit':
output.push(['QUIT :%s', data.message]);
break;
case 'privmsg':
case 'notice':
const split = data.message.split('\n');
for (const splitMsg of split) {
const messages = truncate(splitMsg, msgMaxLength);
output.push(
...messages.map((msg) => [
'%s %s :%s',
data.command.toUpperCase(),
data.arguments![0],
msg,
]),
);
}
break;
case 'list':
output.push([data.command.toUpperCase()]);
break;
case 'ctcp':
let ctcpmsg = '';
if (data.arguments![1].toLowerCase() === 'ping') {
ctcpmsg = 'PING ' + Math.floor(Date.now() / 1000);
} else {
ctcpmsg = data.message;
}
output.push(['PRIVMSG %s :\x01%s\x01', data.arguments![0], ctcpmsg]);
break;
default:
output.push([data.command.toUpperCase(), data.message]);
}
return output;
}