63 lines
1.9 KiB
Python
Executable File
63 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from mastodon import Mastodon
|
|
import json
|
|
|
|
# load JSON config file
|
|
def load_config() -> dict:
|
|
with open('config.json') as f:
|
|
config_data = json.load(f)
|
|
return config_data
|
|
|
|
# create Mastodon object using stored API secrets
|
|
# TODO: load config from $XDG_CONFIG_HOME
|
|
def gen_masto_obj(config_data: dict) -> Mastodon:
|
|
m = Mastodon(
|
|
access_token = config_data['token'],
|
|
api_base_url = config_data['instance']
|
|
)
|
|
return m
|
|
|
|
# generate phlog URLs for linking in the post
|
|
def gen_url(config_data: dict, phlog_file: str) -> dict:
|
|
base_path = f"{config_data['gopher']}/{config_data['phlog_format']}/{phlog_file}"
|
|
gopher_url = f"gopher://{base_path}"
|
|
proxy_url = f"https://{config_data['proxy']}/{base_path}"
|
|
urls = {'gopher':gopher_url, 'proxy':proxy_url}
|
|
return urls
|
|
|
|
# display post contents and verify with the user
|
|
def post_check(post: str) -> bool:
|
|
print('You are about to post')
|
|
print()
|
|
print(post)
|
|
print()
|
|
will_continue = input("Continue? [y/N] ")
|
|
print()
|
|
return will_continue.upper() in ['Y', 'YES']
|
|
|
|
def main():
|
|
# load config.json
|
|
# TODO: handle command line switches to override defaults
|
|
config_data = load_config()
|
|
m = gen_masto_obj(config_data)
|
|
|
|
# generate URLs
|
|
# TODO: prompt for phlog path
|
|
phlog_file = 'test.txt'
|
|
urls = gen_url(config_data, phlog_file)
|
|
|
|
# get post description, generate post text
|
|
# TODO: Spawn $EDITOR, content warnings
|
|
text = "Test post, please ignore"
|
|
post = f"{text}\n\nGopher: {urls['gopher']}\nHTML Proxy: {urls['proxy']}"
|
|
|
|
# verify the post with the user and post it
|
|
if post_check(post):
|
|
toot_dict = m.status_post(post, visibility=config_data['visibility'])
|
|
print(f"Posted at {toot_dict['url']}")
|
|
else:
|
|
print('Aborted.')
|
|
|
|
if __name__ == '__main__':
|
|
main()
|