build-in-public-bot
Version:
AI-powered CLI bot for automating build-in-public tweets with code screenshots
86 lines • 3.75 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.postCommand = postCommand;
const logger_1 = require("../utils/logger");
const config_1 = require("../services/config");
const ai_1 = require("../services/ai");
const storage_1 = require("../services/storage");
const twitter_1 = require("../services/twitter");
const prompts_1 = require("../utils/prompts");
const chalk_1 = __importDefault(require("chalk"));
async function postCommand(message, options) {
const configService = config_1.ConfigService.getInstance();
const aiService = ai_1.AIService.getInstance();
const storageService = storage_1.StorageService.getInstance();
const twitterService = twitter_1.TwitterService.getInstance();
try {
const config = await configService.load();
let generatedTweet;
if (options.noAi) {
generatedTweet = message;
logger_1.logger.info('Using direct message (AI disabled)');
}
else {
logger_1.logger.startSpinner('Generating tweet with AI...');
generatedTweet = await aiService.generateTweet({ message, includeScreenshot: false }, config);
logger_1.logger.stopSpinner(true, 'Tweet generated!');
}
console.log('\n' + chalk_1.default.bold('Tweet:'));
console.log(chalk_1.default.cyan('─'.repeat(50)));
console.log(generatedTweet);
console.log(chalk_1.default.cyan('─'.repeat(50)));
console.log(chalk_1.default.gray(`Character count: ${generatedTweet.length}/280\n`));
let shouldPost = options.confirm;
if (shouldPost) {
shouldPost = await (0, prompts_1.confirm)('Do you want to post this tweet?', true);
}
if (shouldPost) {
try {
logger_1.logger.startSpinner('Posting to Twitter...');
const result = await twitterService.post(generatedTweet);
logger_1.logger.stopSpinner(true, 'Posted to Twitter!');
const tweet = {
id: result.id,
text: generatedTweet,
createdAt: new Date(),
url: result.url
};
await storageService.saveTweet(tweet);
logger_1.logger.success('Tweet posted successfully! 🚀');
if (result.url) {
logger_1.logger.info(`View your tweet: ${result.url}`);
}
}
catch (error) {
logger_1.logger.stopSpinner(false, 'Failed to post to Twitter');
const draft = {
id: `draft-${Date.now()}`,
text: generatedTweet,
createdAt: new Date(),
includeScreenshot: false
};
await storageService.saveDraft(draft);
logger_1.logger.error(`Twitter posting failed: ${error.message}`);
logger_1.logger.info('Tweet saved as draft. You can retry later from "bip history".');
}
}
else {
const draft = {
id: `draft-${Date.now()}`,
text: generatedTweet,
createdAt: new Date(),
includeScreenshot: false
};
await storageService.saveDraft(draft);
logger_1.logger.info('Tweet saved as draft. Use "bip history" to view drafts.');
}
}
catch (error) {
logger_1.logger.stopSpinner(false, 'Failed to generate tweet');
throw error;
}
}
//# sourceMappingURL=post.js.map
;