import os import random from mastodon import Mastodon import sqlite3 def get_food(): foods = ["no spoilers"] food = foods[random.randint(0, len(foods) - 1)] return food def get_cur_and_ensure_table(db_con): cur = db_con.cursor() cur.execute("CREATE TABLE IF NOT EXISTS used(used TEXT)") def record_usage(cursor, my_food): cursor.execute("INSERT INTO USED(used) values (?)", (my_food,)) def is_already_used(cursor, my_food): cursor.execute("SELECT used FROM Used where used = ?", (my_food,)) result = cursor.fetchone() return result is not None def get_unique_food(db_con): cursor = db_con.cursor() max_attempts = 3 current_attempt = 1 while True and current_attempt < max_attempts: current_attempt = current_attempt + 1 my_food = get_food() used = is_already_used(cursor, my_food) if not used: record_usage(cursor, my_food) return my_food def get_masto_client_and_login(): client_id = os.environ["LIONSEAT_CLIENTID"] client_secret = os.environ["LIONSEAT_CLIENTSECRET"] mastodon_instance_url = os.environ["LIONSEAT_MASTO_URL"] mastodon = Mastodon( client_id=client_id, client_secret=client_secret, api_base_url=mastodon_instance_url, ) mastodon.log_in( username=os.environ["LIONSEAT_USER"], password=os.environ["LIONSEAT_PASS"], to_file="liomseatbot.secret", scopes=["read", "write"], ) return mastodon with sqlite3.connect("lionseat.db") as db_con: get_cur_and_ensure_table(db_con) food = get_unique_food(db_con) if food is not None: status = f"Lions will eat {food}" print(status) mastodon = get_masto_client_and_login() mastodon.status_post(status, visibility="public")