Goodbye is a Go application, when someone unfollows you on Twitter, it will Direct Message you their Twitter handle.
At its core, it’s a program that downloads your twitter follower list in certain intervals, and compares it with the previous list to find out who has unfollowed you.
It has the following execution modes:
-
-daemon: Process continously runs and fetches the followers every 5 minutes (or specified$GOODBYE_POLLING_INTERVAL). Doesn't need extra storage to store followers list (stores in-memory). -
-http-addr: Process listens on specified port and checks follower list on each request toGET /goodbye. Needs extra storage (currently a GCS bucket) to store follower list. (Suitable for serverless environments) -
-run-once:Process runs once and exits. Needs extra storage (currently a GCS bucket) to store follower list. (Suitable for cronjobs.)
First, you will need a config.json file containing Twitter API credentials.
Create a Twitter application on https://dev.twitter.com and access tokens for the application. Save these and pass as environment variables to the application:
export CONSUMER_KEY=[...] \
CONSUMER_SECRET=[...] \
ACCESS_TOKEN=[...] \
ACCESS_TOKEN_SECRET=[...]
./goodbye -daemonYou can compile the application with Go compiler, or use the Dockerfile to build a container image.
Clone this repo on a Linux server with docker installed and build the Docker image in the repository root directory:
docker build -t goodbye .Then run the container and give it the arguments it needs.
docker run -d --restart=always \
-e CONSUMER_KEY=[...] \
-e CONSUMER_SECRET=[...] \
-e ACCESS_TOKEN=[...] \
-e ACCESS_TOKEN_SECRET=[...] \
--name=goodbye-agent \
goodbye -daemonCheck if it is running fine: docker logs -f goodbye-agent.
The -daemon mode stores the follower IDs in memory, however other modes need
external storage (currently only Google Cloud Storage is supported) to store
the follower IDs.
-
Create a new Google Cloud Storage bucket to store follower IDs:
BUCKET_NAME=pick-a-name gsutil mb gs://$BUCKET_NAME -
Upload an empty file named
idsto GCS buckettouch ids gsutil cp ./ids gs://$BUCKET_NAME/ids
Use this gs://my_bucket/ids value as the -followers-file argument.
Copyright (c) 2013-2019, Ahmet Alp Balkan
Made in Bellevue,WA and Seattle, WA with love.
