kaomoji-maker
Version:
Interactive kaomoji maker running on Node.js
145 lines (140 loc) • 3.54 kB
JavaScript
;
const inquirer = require('inquirer');
const fs = require('fs');
const ncp = require("copy-paste");
const homeDir = require('os').homedir();
/**
* Create kaomoji selecting the different parts
* @return {Promise}
*/
module.exports.create = () => {
const parts = ['arms_symmetric', 'arms_left', 'bodies_symmetric', 'bodies_left', 'cheeks', 'eyes', 'mouths_noses', 'bodies_right', 'arms_right'].map(fileName =>
fs.readFileSync(`${__dirname}/parts/${fileName}.txt`, 'utf8').split('\n')
);
return inquirer.prompt([
{
type: 'list',
name: 'leftArm',
message: 'Choose left arm',
choices: ['', ...parts[1], ...parts[0]]
},
{
type: 'list',
name: 'leftBody',
message: 'Choose left body',
choices: ['', ...parts[3], ...parts[2]]
},
{
type: 'list',
name: 'leftCheek',
message: 'Choose left cheek',
choices: ['', ...parts[4]]
},
{
type: 'list',
name: 'leftEye',
message: 'Choose left eye',
choices: ['', ...parts[5]]
},
{
type: 'list',
name: 'noseMouth',
message: 'Choose nose/mouth',
choices: ['', ...parts[6]]
},
{
type: 'list',
name: 'rightEye',
message: 'Choose right eye',
choices: ['', ...parts[5]]
},
{
type: 'list',
name: 'rightCheek',
message: 'Choose right cheek',
choices: ['', ...parts[4]]
},
{
type: 'list',
name: 'rightBody',
message: 'Choose right body',
choices: ['', ...parts[7], ...parts[2]]
},
{
type: 'list',
name: 'rightArm',
message: 'Choose right arm',
choices: ['', ...parts[8], ...parts[0]]
},
]).then(a => {
const kaomoji = `${a.leftArm}${a.leftBody}${a.leftCheek}${a.leftEye}${a.noseMouth}${a.rightEye}${a.rightCheek}${a.rightBody}${a.rightArm}`;
console.log('Your kaomoji:', kaomoji);
this.kaomoji = kaomoji;
return inquirer.prompt([
{
type: 'confirm',
name: 'copy',
message: 'Copy to clipboard: (Y/n)',
default: true
},
{
type: 'confirm',
name: 'save',
message: 'Save kaomoji: (Y/n)',
default: true,
when: (a) => {
if (a.copy) {
ncp.copy(this.kaomoji);
console.log('Kaomoji copied to clipboard')
}
return true;
}
}
]);
}).then(a => {
if (a.save) {
fs.writeFileSync(`${homeDir}/saved_kaomoji.txt`, `\n${this.kaomoji}`, { flag: 'a' });
console.log(`Kaomoji saved in ${homeDir}`);
}
});
}
/**
* Choose kaomoji from list and copy it to the clipboard
* @return {Promise}
*/
module.exports.get = () => {
let kaomojiList;
try {
kaomojiList = fs.readFileSync(`${homeDir}/saved_kaomoji.txt`, 'utf8').split('\n');
} catch (err) {
if (err.code === 'ENOENT') {
console.log(`Kamoji not found in ${homeDir}/saved_kaomoji.txt ¯\\_(ツ)_/¯`);
return;
}
}
return inquirer.prompt([
{
type: 'list',
name: 'kaomoji',
message: 'Copy to clipboard saved kaomoji',
choices: kaomojiList
}
]).then(a => {
ncp.copy(a.kaomoji);
console.log('Kaomoji copied to clipboard');
});
}
/**
* Remove multiple kaomoji from saved list
* TODO not implemented yet
*/
module.exports.remove = () => {
console.log('Not implemented yet (⊙︿⊙)');
}
/**
* Exits app
*/
module.exports.exit = () => {
console.log('See you! (・ω・)ノ');
process.exit();
}