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; }