I Delete My Tweets

Coverage Status

Screen Shot 2022-05-11 at 19 04 53

A CLI (as in Command Line Interface) to delete your tweets based on faves, RTs, words, hashtags, and time.

There are some services out there with a friendly web interface, but this is not one of them. You must know the basics of working with a UNIX terminal and configuring a Twitter API app, as this will only work if you have a Twitter Developer account.

Due to the irrevocable nature of tweet deletion, all delete commands are dry-run true, meaning you must call all of them with a --dry-run=false flag if you want them to really do something.

Called with --dry-run=false, there is no way to revoke tweet deletion. They are just gone, disappeared into the ether (or stashed in the Twitter-owned secret place you have no access to without a mandate since nothing gets really deleted from the web these days, folks).

This tool won't delete all of your tweets in one fell swoop; it is more of a way to delete your old tweets from time to time. The Twitter API rate limits are relatively complicated, and I don't even wanna go there, but if you do intend on deleting all of your tweets, you can do it with this CLI and some perseverance. I did delete more than 100k of mine by using this script every day for a couple of weeks. The more tweets you delete, the fewer of them you have, and with time the rate limits won't be that much of a problem.

I Delete My Tweets (IDMT) can delete your tweets by fetching them via API using an APP you will have to set up yourself. Still, it can also delete tweets from a CSV (comma-separated file) that you can generate from the archive you can request from twitter.com by going to Settings and privacy > Your Account > Download an archive of your data.

Once you get your zipped archive from Twitter, unzip it, and find the tweet.js file.

IDMT can convert that into a CSV file with:

$ i_delete_my_tweets convert to_csv path_to_tweet.js

TIP: You can find an example of the CSV header in the project's root folder.

These are the keys/values that make the script work. They are read from and written to a .i_delete_my_tweets env file in your user directory (~/). You can fill the values yourself or work with the commands (see Usage) to do that interactively.

KEY VALUE DESCRIPTION
CONSUMER_KEY String Your Twitter App key
CONSUMER_SECRET String Your Twitter App secret
ACCESS_TOKEN String Account access token
ACCESS_TOKEN_SECRET String Access token secret
OLDER_THAN "2022-04-28 21:20:47 -0300" A timestamp (quote to avoid system parser problems)
PATH_TO_CSV './tweets.csv' A path to a CSV file
FAVE_THRESHOLD 3 Minimum number of faves to skip deletion
RT_THRESHOLD 5 Minimum number of RTs to skip deletion
WITH_WORDS #FML, trump, musk A comma-separated list of words and hashtags that, if found on a tweet, would delete it immediately.
If this list is not empty, IDMT will use the words only and bypass any FAVE or RT threshold criteria.
OLDER_THAN is always taken into account, though.
SCREEN_NAME jack The account screen_name

Since you have to call commands with --dry-run=false for them to really take action, just play around with the skip rules before using --dry-run=false and see what works for you.

Install

$ gem install i_delete_my_tweets

IDMT is compatible with ruby-2.6.5 up.

Usage

$ i_delete_my_tweets -h

Will print all commands and options.

$ i_delete_my_tweets -v

Gives you the version.

Commands

$ i_delete_my_tweets config store key value

Set-up

You have to wait for the account to be reviewed and approved.

  • Create a Twitter App with read and write permission
  • Take note of the app's CONSUMER_KEY and CONSUMER_SECRET

Config

$ i_delete_my_tweets config store CONSUMER_KEY 9183921819809283910f
$ i_delete_my_tweets config store CONSUMER_SECRET 0293090239-2039209302-238392839
$ i_delete_my_tweets config store RT_THRESHOLD 2
$ i_delete_my_tweets config store FAVE_THRESHOLD 2
$ i_delete_my_tweets config store OLDER_THAN 2021-11-02
$ i_delete_my_tweets config store SCREEN_NAME mytwitterhandle
$ i_delete_my_tweets config store WITH_WORDS "#fml, #drunktweets, rogan"

IDMT can generate an ACCESS_TOKEN and ACCESS_TOKEN_SECRET for you using a PIN provided that you do have a Twitter App setup and CONSUMER_KEY and CONSUMER_SECRET.

You can bypass most of the configuration by doing a

$ i_delete_my_tweets config authorize_with_pin <consumer-key> <consumer-value>

It will generate a URL that will take you to Twitter and issue a PIN. Then IDMT will configure ACCESS_TOKEN, ACCESS_TOKEN_SECRET, and SCREEN_NAME for you.

At any point, you can check if all keys/values are good to go with

$ i_delete_my_tweets config check

Delete

$ i_delete_my_tweets delete start

Will start traversing the API for your tweets and applying the OLDER_THAN, FAVE_THRESHOLD, and RT_THRESHOLD rules (they are applied in this order). These rules are NOT COMBINED; the tweet is deleted if one of the rules matches. If you set up words or hashtags, then IDMT will use those to match tweets up to deletion; OLDER_THAN and presence in WITH_WORDS will be used as criteria instead.

Pass in --dry-run=false if you REALLY want to delete them otherwise this command will just output the tweets it would delete but doesn't because the default flag for delete commands is --dry-run=true.

$ i_delete_my_tweets delete from_csv

Will use the tweets from the CSV file and not fetch the API for them. This is a nice option if you want to avoid some of the API rate limits and will be a little faster since it will not do the initial tweet-fetching over HTTP.