-
-
Save antlionguard/000e24bb039e8824fa5c58d6e324c78e to your computer and use it in GitHub Desktop.
| const timer = ms => new Promise(res => setTimeout(res, ms)); | |
| // Unretweet normally | |
| const unretweetTweet = async (tweet) => { | |
| await tweet.querySelector('[data-testid="unretweet"]').click(); | |
| await timer(250); | |
| await document.querySelector('[data-testid="unretweetConfirm"]').click(); | |
| console.log('****// Unretweeted Successfully //****') | |
| } | |
| // Sometimes twitter shows your retweet but green retweet button is invisible and therefore you need to retweet again for make unreweet. This function is for that. | |
| const unretweetUnretweetedTweet = async (tweet) => { | |
| await tweet.querySelector('[data-testid="retweet"]').click(); | |
| await timer(250); | |
| await document.querySelector('[data-testid="retweetConfirm"]').click(); | |
| console.log('****// Retweeted Successfully //****') | |
| await timer(250); | |
| unretweetTweet(tweet); | |
| } | |
| setInterval(async () => | |
| { | |
| // Get all tweets | |
| const retweetedTweetList = document.querySelectorAll('[data-testid="socialContext"]'); | |
| console.log('****// Retweeted Tweet List Collected //****') | |
| for (const retweet of retweetedTweetList) { | |
| const tweetWrapper = retweet.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement; | |
| tweetWrapper.scrollIntoView(); | |
| const isRetweeted = tweetWrapper.querySelector('[data-testid="unretweet"]'); | |
| if (isRetweeted) { | |
| console.log('****// Green Retweet Button Found - Starting "unretweetTweet" process //****') | |
| await unretweetTweet(tweetWrapper); | |
| } else { | |
| console.log('****// Green Retweet Button Not Found - Starting "unretweetUnretweetedTweet" process //****') | |
| await unretweetUnretweetedTweet(tweetWrapper); | |
| } | |
| await timer(2000); | |
| } | |
| console.log('****// List Completed //****') | |
| console.log('****// Scrolling //****') | |
| console.log(' ') | |
| console.log(' ') | |
| console.log(' ') | |
| console.log(' ') | |
| console.log(' ') | |
| console.log(' ') | |
| console.log(' ') | |
| console.log(' ') | |
| await window.scrollTo(0, document.body.scrollHeight); | |
| }, 60000); |
as of 2025 this script does not work.
I have updated it to use button instead of div for unretweet test id as following and confirmed it works:
const timer = ms => new Promise(res => setTimeout(res, ms));
const unretweetTweet = async (tweet) => { try { await tweet.querySelector('button[data-testid="unretweet"]').click(); await timer(250); await document.querySelector('div[data-testid="unretweetConfirm"]').click(); console.log('// Unretweeted Successfully //'); } catch (error) { console.error('Error during unretweet:', error); } };
const unretweetUnretweetedTweet = async (tweet) => { try { await tweet.querySelector('div[data-testid="retweet"]').click(); await timer(250); await document.querySelector('div[data-testid="retweetConfirm"]').click(); console.log('// Retweeted Successfully //'); await timer(250); unretweetTweet(tweet); } catch (error) { console.error('Error during unretweetUnretweetedTweet:', error); } };
const processTweets = async () => { const retweetedTweetList = document.querySelectorAll('span[data-testid="socialContext"]'); console.log('// Retweeted Tweet List Collected //');
for (const retweet of retweetedTweetList) { const tweetWrapper = retweet.closest('[data-testid="tweet"]'); tweetWrapper.scrollIntoView();
const isRetweeted = tweetWrapper.querySelector('button[data-testid="unretweet"]'); if (isRetweeted) { console.log('****// Green Retweet Button Found - Starting "unretweetTweet" process //****'); await unretweetTweet(tweetWrapper); } else { console.log('****// Green Retweet Button Not Found - Starting "unretweetUnretweetedTweet" process //****'); await unretweetUnretweetedTweet(tweetWrapper); } await timer(2000);} console.log('// List Completed //'); console.log('// Scrolling //'); console.log(' '); console.log(' '); console.log(' '); console.log(' '); console.log(' '); console.log(' '); console.log(' '); console.log(' '); window.scrollTo(0, document.body.scrollHeight);
// Call processTweets again using requestAnimationFrame to keep the loop going requestAnimationFrame(processTweets); };
// Start the process initially processTweets();
youre an angel
Here's work like 300 unretweet a day before your account can't load your profile anymore: