irclib/src/utility/user-mapper.ts

64 lines
1.7 KiB
TypeScript
Raw Normal View History

2022-09-23 17:38:41 +00:00
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',
2022-09-24 07:49:28 +00:00
data.arguments[0],
2022-09-23 17:38:41 +00:00
data.message !== '' ? ' :' + data.message : '',
]);
break;
case 'kick':
2022-09-24 07:49:28 +00:00
output.push(['KICK %s :%s', data.arguments.join(' '), data.message]);
2022-09-23 17:38:41 +00:00
break;
case 'part':
2022-09-24 07:49:28 +00:00
output.push(['PART %s :%s', data.arguments[0], data.message]);
2022-09-23 17:38:41 +00:00
break;
case 'nick':
case 'whois':
case 'who':
case 'names':
case 'join':
2022-09-24 07:49:28 +00:00
output.push(['JOIN %s', data.arguments[0]]);
2022-09-23 17:38:41 +00:00
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(),
2022-09-24 07:49:28 +00:00
data.arguments[0],
2022-09-23 17:38:41 +00:00
msg,
]),
);
}
break;
case 'list':
output.push([data.command.toUpperCase()]);
break;
case 'ctcp':
let ctcpmsg = '';
2022-09-24 07:49:28 +00:00
if (data.arguments[1].toLowerCase() === 'ping') {
2022-09-23 17:38:41 +00:00
ctcpmsg = 'PING ' + Math.floor(Date.now() / 1000);
} else {
ctcpmsg = data.message;
}
2022-09-24 07:49:28 +00:00
output.push(['PRIVMSG %s :\x01%s\x01', data.arguments[0], ctcpmsg]);
2022-09-23 17:38:41 +00:00
break;
default:
output.push([data.command.toUpperCase(), data.message]);
}
return output;
}