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

116
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, 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')

2080
verbs.txt

File diff suppressed because it is too large Load Diff