#!/usr/bin/env python import random import requests import json from getpass import getpass import os from urllib.parse import urlencode #Ensure Credentials parent = os.path.dirname(os.path.realpath(__file__)) try: os.mkdir(os.path.join(parent, '.creds')) except FileExistsError: pass #Create app try: with open(os.path.join(parent, '.creds', 'client.secret'), "x") as clientcreds: instance = input('Please enter your instance: ') if not instance[:4] == 'http': instance = 'https://' + instance response = requests.post(instance + '/api/v1/apps', data={'client_name':'Hourly lgf','scopes':'write:statuses', 'redirect_uris':'urn:ietf:wg:oauth:2.0:oob'}) response = response.json() print(response) clientcreds.write(response['client_id'] + "\n") clientcreds.write(response['client_secret'] + "\n") clientcreds.write(instance + "\n") except FileExistsError: pass #Fetch information from app credential file with open(os.path.join(parent, '.creds', 'client.secret'), "r") as clientcreds: lines = clientcreds.read().split('\n') client_id = lines[0] client_secret = lines[1] instance = lines[2] #Log in to bot account try: with open(os.path.join(parent, '.creds', 'user.secret'), "x") as usercreds: print(instance + '/oauth/authorize?', urlencode({'response_type':'code', 'client_id':client_id, 'redirect_uri':'urn:ietf:wg:oauth:2.0:oob', 'scope':'write:statuses'})) code = input("To generate a token to access your account, lgfbot needs an authorization code. Please authorize using the link above and enter the code it provides you \nCode: ") response = requests.post(instance + '/oauth/token', data={'grant_type':'authorization_code', 'code':code, 'client_id':client_id, 'client_secret':client_secret, 'redirect_uri':'urn:ietf:wg:oauth:2.0:oob', 'scope':'write:statuses'}) usercreds.write(response.json()['access_token']) except FileExistsError: pass #Fetch information from user credential file with open(os.path.join(parent, '.creds', 'user.secret'), "r") as usercreds: lines = usercreds.read().split('\n') token = lines[0] session = requests.Session() session.headers.update({"Authorization" : "Bearer " + token}) with open('adjectives.txt') as f: adjectives = list(map(str.rstrip, f)) with open('verbs.txt') as f: verbs = list(map(str.rstrip, f)) postform = random.choice(( '{adjective} {gender} who {verb}', '{adjective} {gender}', '{gender} who {verb}', )) gender = random.choice(('lgf', 'lbf', 'elf')) verb = random.choice(verbs) if verb[-2:] == 'ed' and verb[-3] not in {'a', 'e', 'i', 'o', 'u'}: verb = verb[:-2] if verb[-1] in {'a', 'i', 'o', 'u'}: verb = verb + 'es' elif verb[-1] in {'s', 'x'} or verb[-2] in {'s', 'x'} or verb[-2:] == 'ch': verb = verb + 'es' elif verb[-1] == 'y' and verb[-2] not in {'a', 'e', 'i', 'o', 'u'}: verb = verb[:-1] + 'ies' else: verb = verb + 's' adjective = random.choice(adjectives) content = postform.format(adjective=adjective, gender=gender, verb=verb) print(content) session.post(instance + '/api/v1/statuses', data={'status':content, 'visibility':'direct'})