src/Cli/index.js
'use strict';
import * as fs from 'fs';
import * as readline from 'readline';
import Botlang from '../Botlang';
import Styles from './Styles';
if ('undefined' === typeof process.argv[2]) {
process.stdout.write(`${Styles.red.open}No botscript has been defined.${Styles.red.close}\n`);
process.stdout.write(`${Styles.red.open}Usage: "/botlang <path-to-your-botlang-script>"${Styles.red.close}\n`);
process.exit(1);
} else if (!fs.existsSync(process.argv[2])) {
process.stdout.write(`${Styles.red.open}File "${process.argv[2]}" does not exist .${Styles.red.close}\n`);
process.stdout.write(`${Styles.red.open}Usage: "/botlang <path-to-your-botlang-script>"${Styles.red.close}\n`);
process.exit(1);
}
const options = new Map()
.set('botname', 'Bot')
.set('path', process.argv[2])
.set('prompt', '> ')
.set('system', 'Sys')
.set('username', 'You'),
rl = readline.createInterface({
input : process.stdin,
output : process.stdout
}),
sourceCode = fs.readFileSync(options.get('path'), {
encoding : 'utf8',
flag : 'r'
}),
bot = new Botlang(sourceCode),
write = (text) => {
process.stdout.write(`${text}`);
},
writeBot = (text) => {
write(`${Styles.green.open}[${options.get('botname')}]:${Styles.green.close} ${text}`);
},
writeSys = (text) => {
write(`${Styles.green.open}[${options.get('system')}]:${Styles.green.close} ${text}`);
};
write(`\n${Styles.yellow.open}`);
write(`🤖 Welcome to botlang#${Botlang.version()}\n`);
write(` Brain from "${options.get('path')}" loaded\n`);
write(`${Styles.yellow.close}\n`);
rl.setPrompt(`${Styles.green.open}[${options.get('username')}]:${Styles.green.close} `);
rl.prompt();
rl.on('line', (line) => {
const input = line.trim();
if ('' === input) write();
else if (/\\help/.test(input)) writeSys('Not implemented yet. Read the source code in the meantime ...\n');
else if (/\\version/.test(input)) writeSys(`${Botlang.version()}\n`);
else writeBot(`${bot.reply(input)}\n`);
rl.prompt();
});
rl.on('close', () => {
write(`\n\n${Styles.yellow.open}🤖 Bye bye ...${Styles.yellow.close}\n`);
process.exit(0);
});