Compare commits
No commits in common. "trunk" and "pr/refactor-words-to-separate-files" have entirely different histories.
trunk
...
pr/refacto
|
@ -1 +1 @@
|
||||||
.creds/
|
.lgfbot
|
||||||
|
|
|
@ -1,72 +1,33 @@
|
||||||
#!/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
|
|
||||||
import argparse
|
|
||||||
import time
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
if not os.path.exists('./.lgfbot/'):
|
||||||
parser.add_argument('-l', '--loop',
|
os.mkdir('./.lgfbot')
|
||||||
action='store',
|
|
||||||
type=float,
|
if not os.path.exists('./.lgfbot/lgf_client.secret'):
|
||||||
help='Loop command every x hours',
|
instance = input('Please enter your instance: ')
|
||||||
default=None,
|
if instance[:4] != 'http':
|
||||||
dest='loop'
|
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',
|
||||||
)
|
)
|
||||||
args = parser.parse_args()
|
|
||||||
loop = args.loop
|
|
||||||
|
|
||||||
#Ensure Credentials
|
if not os.path.exists('./.lgfbot/lgf_user.secret'):
|
||||||
parent = os.path.dirname(os.path.realpath(__file__))
|
print('To post, lgfbot needs to generate an access token')
|
||||||
try:
|
username = input('Enter your username: ')
|
||||||
os.mkdir(os.path.join(parent, '.creds'))
|
password = getpass('Enter your password: ')
|
||||||
except FileExistsError:
|
mastodon.log_in(username=username, password=password, scopes=['write:statuses'], to_file='./.lgfbot/lgf_user.secret')
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
#Create app
|
mastodon = Mastodon(
|
||||||
try:
|
access_token = './.lgfbot/lgf_user.secret'
|
||||||
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))
|
||||||
|
@ -74,23 +35,24 @@ with open('adjectives.txt') as f:
|
||||||
with open('verbs.txt') as f:
|
with open('verbs.txt') as f:
|
||||||
verbs = list(map(str.rstrip, f))
|
verbs = list(map(str.rstrip, f))
|
||||||
|
|
||||||
|
postform = random.choice((
|
||||||
formats = (
|
'{adjective} {gender} who {verb}',
|
||||||
'{adjective} {gender} who {verb}',
|
|
||||||
'{adjective} {gender}',
|
'{adjective} {gender}',
|
||||||
'{gender} who {verb}',
|
'{gender} who {verb}',
|
||||||
)
|
))
|
||||||
genders = ('lgf', 'lbf', 'elf')
|
gender = random.choice(('lgf', 'lbf', 'elf'))
|
||||||
|
verb = random.choice(verbs)
|
||||||
while True:
|
if verb[-2:] == 'ed' and verb[-3] not in {'a', 'e', 'i', 'o', 'u'}:
|
||||||
postform = random.choice(formats)
|
verb = verb[:-2]
|
||||||
gender = random.choice(genders)
|
if verb[-1] in {'a', 'i', 'o', 'u'}:
|
||||||
verb = random.choice(verbs)
|
verb = verb + 'es'
|
||||||
adjective = random.choice(adjectives)
|
elif verb[-1] in {'s', 'x'} or verb[-2] in {'s', 'x'} or verb[-2:] == 'ch':
|
||||||
content = postform.format(adjective=adjective, gender=gender, verb=verb)
|
verb = verb + 'es'
|
||||||
print(content)
|
elif verb[-1] == 'y' and verb[-2] not in {'a', 'e', 'i', 'o', 'u'}:
|
||||||
session.post(instance + '/api/v1/statuses', data={'status':content, 'visibility':'unlisted'})
|
verb = verb[:-1] + 'ies'
|
||||||
if loop:
|
else:
|
||||||
time.sleep(loop * 3600)
|
verb = verb + 's'
|
||||||
else:
|
adjective = random.choice(adjectives)
|
||||||
break
|
content = postform.format(adjective=adjective, gender=gender, verb=verb)
|
||||||
|
print(content)
|
||||||
|
mastodon.status_post(content, visibility='unlisted')
|
||||||
|
|
Loading…
Reference in New Issue