diff --git a/5m5v-bot.js b/5m5v-bot.js index 8ac06aa..dc2bd91 100644 --- a/5m5v-bot.js +++ b/5m5v-bot.js @@ -23,25 +23,40 @@ if (!config.users.every(user => ['language', 'email', 'username', 'password'].ev const languages = config.users.map(user => user.language); const pollingIntervalMs = 40 * 1000; +const loginDelayMs = 5 * 60 * 1000; const retweetDelayMs = config.delaytime || 2 * 60 * 1000; const isDryRun = process.argv[2] === '--dry-run'; const tweetFilter = new TweetFilter(config.exclude, languages); -async function getApiKey(user) { - if (!user.apiKey) { - console.log(`Logging in as ${user.username}...`); +async function getApiKey(user, { retry = true } = {}) { + if (user.apiKey) { + return user.apiKey; + } - user.apiKey = await new Rettiwt().auth.login(user.email, user.username, user.password); + while (true) { + try { + console.log(`Logging in as ${user.username}...`); - console.log('Logged in!'); - } + await new Promise(resolve => setTimeout(resolve, loginDelayMs)); + + user.apiKey = await new Rettiwt().auth.login(user.email, user.username, user.password); - return user.apiKey; + console.log('Logged in!'); + + return user.apiKey; + } catch (e) { + console.error(`Unable to log in: ${e.message}`); + + if (!retry) { + throw e; + } + } + } } (async () => { while (true) { - const rettiwt = new Rettiwt({ apiKey: await getApiKey(config.users[0]) }); + const rettiwt = new Rettiwt({ apiKey: await getApiKey(config.users[0], { retry: true }) }); console.log(isDryRun ? 'Looking for new tweets (dry run)...' : 'Looking for new tweets...'); @@ -56,7 +71,7 @@ async function getApiKey(user) { try { if (!isDryRun) { - const rettiwt = new Rettiwt({ apiKey: await getApiKey(user) }); + const rettiwt = new Rettiwt({ apiKey: await getApiKey(user, { retry: false }) }); await rettiwt.tweet.retweet(tweet.id); }