A simple tool which lets you scrape twitter accounts and crosspost them to bluesky accounts! Comes with a CLI and a webapp for managing profiles! Works with images/videos/link embeds/threads.
13
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: allow cli import to run without server queue check

jack 539dd1d6 8419396d

+9 -7
+9 -7
src/index.ts
··· 1051 1051 } 1052 1052 } 1053 1053 1054 - async function importHistory(twitterUsername: string, bskyIdentifier: string, limit = 15, dryRun = false): Promise<void> { 1054 + async function importHistory(twitterUsername: string, bskyIdentifier: string, limit = 15, dryRun = false, ignoreCancellation = false): Promise<void> { 1055 1055 const config = getConfig(); 1056 1056 const mapping = config.mappings.find((m) => m.twitterUsernames.map(u => u.toLowerCase()).includes(twitterUsername.toLowerCase())); 1057 1057 if (!mapping) { ··· 1071 1071 const processedTweets = loadProcessedTweets(bskyIdentifier); 1072 1072 1073 1073 while (true) { 1074 - // Check if this backfill request was cancelled 1075 - const stillPending = getPendingBackfills().some(b => b.id === mapping.id); 1076 - if (!stillPending) { 1077 - console.log(`[${twitterUsername}] 🛑 Backfill cancelled by user.`); 1078 - return; 1074 + // Check if this backfill request was cancelled (unless ignoring check) 1075 + if (!ignoreCancellation) { 1076 + const stillPending = getPendingBackfills().some(b => b.id === mapping.id); 1077 + if (!stillPending) { 1078 + console.log(`[${twitterUsername}] 🛑 Backfill cancelled by user.`); 1079 + return; 1080 + } 1079 1081 } 1080 1082 1081 1083 let query = `from:${twitterUsername}`; ··· 1172 1174 console.error(`No mapping found for ${options.username}`); 1173 1175 process.exit(1); 1174 1176 } 1175 - await importHistory(options.username, mapping.bskyIdentifier, options.limit, options.dryRun); 1177 + await importHistory(options.username, mapping.bskyIdentifier, options.limit, options.dryRun, true); 1176 1178 process.exit(0); 1177 1179 } 1178 1180