Replace mastodon.py dependency with requests calls

This commit is contained in:
Wardyn 2023-01-23 12:53:41 -08:00
parent 179c904733
commit 9d6d82bd2f
1 changed files with 49 additions and 23 deletions

View File

@ -1,33 +1,59 @@
#!/usr/bin/env python #!/usr/bin/env python
import random import random
import requests
import json
from getpass import getpass from getpass import getpass
from mastodon import Mastodon
import os import os
from urllib.parse import urlencode
if not os.path.exists('./.lgfbot/'): #Ensure Credentials
os.mkdir('./.lgfbot') parent = os.path.dirname(os.path.realpath(__file__))
try:
if not os.path.exists('./.lgfbot/lgf_client.secret'): os.mkdir(os.path.join(parent, '.creds'))
instance = input('Please enter your instance: ') except FileExistsError:
if instance[:4] != 'http': pass
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')
mastodon = Mastodon( #Create app
access_token = './.lgfbot/lgf_user.secret' 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: with open('adjectives.txt') as f:
adjectives = list(map(str.rstrip, f)) adjectives = list(map(str.rstrip, f))
@ -55,4 +81,4 @@ else:
adjective = random.choice(adjectives) adjective = random.choice(adjectives)
content = postform.format(adjective=adjective, gender=gender, verb=verb) content = postform.format(adjective=adjective, gender=gender, verb=verb)
print(content) print(content)
mastodon.status_post(content, visibility='unlisted') session.post(instance + '/api/v1/statuses', data={'status':content, 'visibility':'direct'})