#!/usr/bin/env python3 import os import sys from typing import List, Tuple import tweepy from time import sleep from random import shuffle # Return our credentials from environment variables as UTF-8 bytes. def get_arguments() -> Tuple[bytes, bytes, bytes, bytes]: consumer_key: bytes = os.environ['CONSUMER_KEY'].encode('utf8') consumer_secret: bytes = os.environ['CONSUMER_SECRET'].encode('utf8') access_token: bytes = os.environ['ACCESS_TOKEN'].encode('utf8') access_token_secret: bytes = os.environ['ACCESS_TOKEN_SECRET'].encode('utf8') return consumer_key, consumer_secret, access_token, access_token_secret # Copy the file lines to a new List[str] and shuffle it. def populate_array(file_lines: List[str]) -> List[str]: array: List[str] = file_lines.copy() # Scramble like an egg. shuffle(array) return array # Main function. def main() -> None: consumer_key: bytes consumer_secret: bytes access_token: bytes access_token_secret: bytes # Access and set authentication method to our Twitter credentials. consumer_key, consumer_secret, access_token, access_token_secret = get_arguments() auth: tweepy.OAuth1UserHandler = tweepy.OAuth1UserHandler(consumer_key=consumer_key, consumer_secret=consumer_secret, access_token=access_token, access_token_secret=access_token_secret) # Creating an API object with our authentication method. api: tweepy.API = tweepy.API(auth=auth) array: List[str] with open('./everybody.txt', 'r', encoding='utf-8') as my_file: # Read lines one by one from my_file and assign to file_lines variable file_lines: List[str] = [x.strip() for x in my_file.readlines()] # Close file. my_file.close() # Create List[str] from file_lines. array = populate_array(file_lines) # Driving loop. while True: while array: # Grab last element and then remove it. tweet: str = array.pop() try: # Output the last element, which will be the tweet. print(tweet) # Create a tweet through the API. api.update_status(tweet) # Chill out for 1800 seconds. sleep(1800) except tweepy.Forbidden as fe: # We probably tried to create a duplicate tweet, but say what happened. print(fe.api_errors) # Chill out for 30 seconds. sleep(30) except tweepy.BadRequest as be: # Something is wrong with our client, so say what happened. print(be.api_errors) # Bail. We shouldn't keep trying. sys.exit(1) except tweepy.TweepyException as te: # Something very unexpected happened, so say what happened. print(te) # Bail. We shouldn't keep trying. sys.exit(1) # Let's do the time warp again. array = populate_array(file_lines) # Do not delete. if __name__ == '__main__': main()