You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

111 lines
2.8 KiB

#!/usr/bin/env python3
import os
from random import choice
from time import sleep, time
from mastodon import Mastodon
import typer
app = typer.Typer()
FJ = {
"clientcred": "fedijitis_clientcred.secret",
"usercred": "fedijitis_usercred.secret",
"post_text": "jitis is live! join at {link} \n\n"
"if this post was boosted in the last {delay} minutes it's still going!",
"closing_texts": [
"the jitis has ceased",
"the jitis has ended",
"jitis boss: defeated",
"in terms of people in jitis, we no longer have people in jitis",
"jitis ended\n\nbottom text",
"end of an era voice end of the jitis",
"jitis defederated",
"great jitis felled",
"jitis was the impostor",
"you know what, un-meets your jitis",
"jitsi met"
]
}
def auth():
instance_url: str = typer.prompt("Instance url").rstrip("/")
Mastodon.create_app(
"fedijitis",
api_base_url=instance_url,
to_file=FJ["clientcred"]
)
username: str = typer.prompt("Username/Email")
password: str = typer.prompt("Password", hide_input=True)
mastodon = Mastodon(
client_id=FJ["clientcred"],
api_base_url=instance_url
)
mastodon.log_in(
username,
password,
to_file=FJ["usercred"]
)
u = mastodon.me() # uwu
typer.secho(f"Success! logged in as @{u['acct']}", fg="green")
def get_mastodon():
if os.path.isfile(FJ["usercred"]):
return Mastodon(access_token=FJ["usercred"])
auth()
return get_mastodon()
@app.command()
def main():
m = get_mastodon()
link = typer.prompt("jitis link")
delay = typer.prompt("boost how often (minutes)", type=int)
followers_only = typer.confirm("followers_only?", default=True)
t = m.status_post(
FJ["post_text"].format(link=link, delay=delay),
visibility="private" if followers_only else "unlisted"
)
typer.echo("Created the post! ctrl+c to end the jitis and exit.")
try:
i = 1
sleep(delay*60)
m.status_reblog(t["id"])
typer.echo(f"boosting! running for {delay * i} minutes...")
sleep(delay*60)
while True:
now = time()
i += 1
m.status_unreblog(t["id"])
while True:
try:
sleep(5)
m.status_reblog(t["id"])
break
except:
...
typer.echo(f"boosting! running for {delay*i} minutes...")
sleep(delay*60 - (time() - now))
except KeyboardInterrupt:
m.status_post(choice(FJ["closing_texts"]), in_reply_to_id=t["id"])
typer.echo("\nposted closing toot, see you next time!")
raise typer.Exit()
if __name__ == "__main__":
typer.run(main)