UNPKG

build-in-public-bot

Version:

AI-powered CLI bot for automating build-in-public tweets with code screenshots

86 lines 3.75 kB
"use strict"; 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