import chalk from 'chalk'; import { BushClient } from '../extensions/BushClient'; export class CustomConsole { private client: BushClient; public constructor(client: BushClient) { this.client = client; } private parseColors(content: any, color: 'blueBright' | 'blackBright' | 'redBright' | 'yellowBright' | 'greenBright'): string | any { if (typeof content === 'string') { const newContent: Array = content.split(/<<|>>/); const tempParsedArray: Array = []; newContent.forEach((value, index) => { if (index % 2 !== 0) { tempParsedArray.push(chalk[color](value)); } else { tempParsedArray.push(value); } }); return tempParsedArray.join(''); } else { return content; } } private timeStamp(): string { const now = new Date(); const hours = now.getHours(); const minute = now.getMinutes(); let hour = hours; let amOrPm: 'AM' | 'PM' = 'AM'; if (hour > 12) { amOrPm = 'PM'; hour = hour - 12; } return `${hour >= 10 ? hour : `0${hour}`}:${minute >= 10 ? minute : `0${minute}`} ${amOrPm}`; } /** * Logs debug information. * @param content - The content to log. */ public debug(content: any): void { console.log(`${chalk.bgGrey(this.timeStamp())} ${chalk.grey('[Debug]')}`, content); } /** * Logs verbose information. Highlight information by surrounding it in `<<>>`. * @param header - The header displayed before the content, displayed in grey. * @param content - The content to log, highlights displayed in bright black. */ public verbose(header: string, content: string): void { return console.info(`${chalk.bgGrey(this.timeStamp())} ${chalk.grey(`[${header}]`)} ` + this.parseColors(content, 'blackBright')); } /** * Logs information. Highlight information by surrounding it in `<<>>`. * @param header - The header displayed before the content, displayed in cyan. * @param content - The content to log, highlights displayed in bright blue. */ public info(header: string, content: string): void { return console.info(`${chalk.bgCyan(this.timeStamp())} ${chalk.cyan(`[${header}]`)} ` + this.parseColors(content, 'blueBright')); } /** * Logs warnings. Highlight information by surrounding it in `<<>>`. * @param header - The header displayed before the content, displayed in yellow. * @param content - The content to log, highlights displayed in bright yellow. */ public warn(header: string, content: string): void { return console.warn(`${chalk.bgYellow(this.timeStamp())} ${chalk.yellow(`[${header}]`)} ` + this.parseColors(content, 'yellowBright')); } /** * Logs errors. Highlight information by surrounding it in `<<>>`. * @param header - The header displayed before the content, displayed in bright red. * @param content - The content to log, highlights displayed in bright red. */ public error(header: string, content: string): void { return console.error(`${chalk.bgRedBright(this.timeStamp())} ${chalk.redBright(`[${header}]`)} ` + this.parseColors(content, 'redBright')); } /** * Logs successes. Highlight information by surrounding it in `<<>>`. * @param header - The header displayed before the content, displayed in green. * @param content - The content to log, highlights displayed in bright green. */ public success(header: string, content: string): void { return console.log(`${chalk.bgGreen(this.timeStamp())} ${chalk.greenBright(`[${header}]`)} ` + this.parseColors(content, 'greenBright')); } }