#!/usr/bin/env python3 import click import emoji import getpass import json import os import sys from mastodon import Mastodon @click.command() @click.argument('status', required=False) @click.option('--creds', default=os.path.join(os.path.dirname(__file__), "toot.json")) def toot(status, creds): # get config with open(creds) as f: config = json.load(f) # set up connection to mastodon mastodon = Mastodon( client_id=config['client_id'], client_secret=config['client_secret'], access_token=config['access_token'], api_base_url=config['base_url'], ) # get status from argument or from stdin if not status: status = "".join(sys.stdin).strip() # replace shortcodes with emoji :thumbsup: status = emoji.emojize(status, use_aliases=True) # check status length and post status if len(status) > 5000: print("Status is too long, try again") elif len(status) == 0: print("Did you type a status?") else: print(mastodon.toot(f"{status}\n~{getpass.getuser()}")["uri"]) if __name__=='__main__': toot()