Compare commits

...

No commits in common. "trunk" and "pr/refactor-words-to-separate-files" have entirely different histories.

3 changed files with 1080 additions and 1118 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
.creds/ .lgfbot

100
lgfbot.py Normal file → Executable file
View File

@ -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,
help='Loop command every x hours',
default=None,
dest='loop'
)
args = parser.parse_args()
loop = args.loop
#Ensure Credentials if not os.path.exists('./.lgfbot/lgf_client.secret'):
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: ') instance = input('Please enter your instance: ')
if not instance[:4] == 'http': if instance[:4] != 'http':
instance = 'https://' + instance 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'}) Mastodon.create_app('Hourly lgf', api_base_url = instance, to_file = './.lgfbot/lgf_client.secret')
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 mastodon = Mastodon(
with open(os.path.join(parent, '.creds', 'client.secret'), "r") as clientcreds: client_id = './.lgfbot/lgf_client.secret',
lines = clientcreds.read().split('\n') )
client_id = lines[0]
client_secret = lines[1]
instance = lines[2]
#Log in to bot account if not os.path.exists('./.lgfbot/lgf_user.secret'):
try: print('To post, lgfbot needs to generate an access token')
with open(os.path.join(parent, '.creds', 'user.secret'), "x") as usercreds: username = input('Enter your username: ')
print(instance + '/oauth/authorize?', urlencode({'response_type':'code', 'client_id':client_id, 'redirect_uri':'urn:ietf:wg:oauth:2.0:oob', 'scope':'write:statuses'})) password = getpass('Enter your password: ')
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: ") mastodon.log_in(username=username, password=password, scopes=['write:statuses'], to_file='./.lgfbot/lgf_user.secret')
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() mastodon = Mastodon(
session.headers.update({"Authorization" : "Bearer " + token}) access_token = './.lgfbot/lgf_user.secret'
)
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'))
while True:
postform = random.choice(formats)
gender = random.choice(genders)
verb = random.choice(verbs) 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) 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)
session.post(instance + '/api/v1/statuses', data={'status':content, 'visibility':'unlisted'}) mastodon.status_post(content, visibility='unlisted')
if loop:
time.sleep(loop * 3600)
else:
break

2080
verbs.txt

File diff suppressed because it is too large Load Diff