@s3dking/randomjoke
Version:
Choose a random dad joke
113 lines (106 loc) • 3.18 kB
JavaScript
#!/usr/bin/env node
const { joke } = require('./index.js');
const yargs = require('yargs/yargs');
const { hideBin } = require('yargs/helpers');
const argv = yargs(hideBin(process.argv))
.usage('Usage: randomjoke <command> [options]')
.command('get', 'Get jokes', {
type: {
alias: 't',
describe: 'Type of joke (dad/dark/programming/puns)',
type: 'string',
default: 'dad'
},
amount: {
alias: 'a',
describe: 'Number of jokes to generate',
type: 'number',
default: 1
},
numbered: {
alias: 'n',
describe: 'Number the jokes',
type: 'boolean',
default: false
}
})
.command('rate', 'Rate a joke', {
type: {
alias: 't',
describe: 'Type of joke',
type: 'string',
required: true
},
index: {
alias: 'i',
describe: 'Joke index',
type: 'number',
required: true
},
rating: {
alias: 'r',
describe: 'Rating (1-5)',
type: 'number',
required: true
}
})
.command('submit', 'Submit a new joke', {
text: {
alias: 'x',
describe: 'Joke text',
type: 'string',
required: true
},
type: {
alias: 't',
describe: 'Joke type',
type: 'string',
required: true
},
tags: {
alias: 'g',
describe: 'Tags (comma-separated)',
type: 'string',
default: ''
}
})
.command('top', 'Get top rated jokes', {
type: {
alias: 't',
describe: 'Type of joke',
type: 'string',
required: true
},
limit: {
alias: 'l',
describe: 'Number of jokes',
type: 'number',
default: 10
}
})
.help('h')
.alias('h', 'help')
.example('randomjoke get', 'Generates one dad joke')
.example('randomjoke get -t dark -a 3 -n', 'Generates 3 numbered dark jokes')
.example('randomjoke rate -t dad -i 1 -r 5', 'Rates the first dad joke with 5 stars')
.example('randomjoke submit -x "Why did the chicken cross the road?" -t dad', 'Submits a new dad joke')
.example('randomjoke top -t dad -l 5', 'Gets the top 5 dad jokes')
.argv;
try {
// Handle positional arguments if provided
const [type, amount, numbered] = argv._;
const options = {
type: type || argv.type,
jokes: Number(amount) || argv.amount,
numbered: numbered === 'true' || argv.numbered
};
const result = joke.generate(options);
if (typeof result === 'object') {
Object.values(result).forEach(j => console.log(j));
} else {
console.log(result);
}
} catch (error) {
console.error('Error:', error.message);
process.exit(1);
}