diff --git a/.gitignore b/.gitignore index eacac3a..e4c1c93 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -.lgfbot/ \ No newline at end of file +.lgfbot diff --git a/lgfbot.py b/lgfbot.py old mode 100644 new mode 100755 index 00033c0..8630085 --- a/lgfbot.py +++ b/lgfbot.py @@ -1,59 +1,33 @@ #!/usr/bin/env python import random -import requests -import json from getpass import getpass +from mastodon import Mastodon 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 +if not os.path.exists('./.lgfbot/'): + os.mkdir('./.lgfbot') + +if not os.path.exists('./.lgfbot/lgf_client.secret'): + instance = input('Please enter your instance: ') + if instance[:4] != 'http': + instance = 'https://' + instance + Mastodon.create_app('Hourly lgf', api_base_url = instance, to_file = './.lgfbot/lgf_client.secret') + +mastodon = Mastodon( + client_id = './.lgfbot/lgf_client.secret', +) + +if not os.path.exists('./.lgfbot/lgf_user.secret'): + print('To post, lgfbot needs to generate an access token') + username = input('Enter your username: ') + password = getpass('Enter your password: ') + mastodon.log_in(username=username, password=password, scopes=['write:statuses'], to_file='./.lgfbot/lgf_user.secret') -#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}) +mastodon = Mastodon( + access_token = './.lgfbot/lgf_user.secret' +) with open('adjectives.txt') as f: adjectives = list(map(str.rstrip, f)) @@ -81,4 +55,4 @@ else: 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'}) +mastodon.status_post(content, visibility='unlisted')