64 lines
1.7 KiB
TypeScript
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;
|
|
}
|