diff --git a/database.py b/database.py index 0a19f67..0fb8e05 100644 --- a/database.py +++ b/database.py @@ -23,9 +23,17 @@ def initialcheck(): timestamp text NOT NULL ); """ + player_table_check_string = """ CREATE TABLE IF NOT EXISTS user_designated_players ( + user_id integer PRIMARY KEY, + user_name text, + player_id text NOT NULL, + player_name text NOT NULL, + player_json_string text NOT NULL + );""" if conn is not None: c = conn.cursor() c.execute(soulscream_table_check_string) + c.execute(player_table_check_string) conn.commit() conn.close() @@ -68,8 +76,38 @@ def cache_soulscream(username, soulscream): if conn is not None: c = conn.cursor() c.execute(store_string, (username, soulscream, datetime.datetime.now(datetime.timezone.utc))) - conn.commit() - - + conn.commit() conn.close() + + +def designate_player(user, player_json): + conn = create_connection() + store_string = """ INSERT INTO user_designated_players(user_id, user_name, player_id, player_name, player_json_string) + VALUES (?, ?, ?, ?, ?)""" + + user_player = get_user_player_conn(conn, user) + c = conn.cursor() + if user_player is not None: + c.execute("DELETE FROM user_designated_players WHERE user_id=?", (user.id,)) #delete player if already exists + c.execute(store_string, (user.id, user.name, player_json["id"], player_json["name"], json.dumps(player_json))) + + conn.commit() + conn.close() + +def get_user_player_conn(conn, user): + try: + if conn is not None: + c = conn.cursor() + c.execute("SELECT player_json_string FROM user_designated_players WHERE user_id=?", (user.id,)) + return json.loads(c.fetchone()[0]) + else: + return False + except: + return False + +def get_user_player(user): + conn = create_connection() + player = get_user_player_conn(conn, user) + conn.close() + return player \ No newline at end of file diff --git a/onomancer.py b/onomancer.py index 7d3162d..58d3857 100644 --- a/onomancer.py +++ b/onomancer.py @@ -7,14 +7,18 @@ import database as db onomancer_url = "https://onomancer.sibr.dev/api/" name_stats_hook = "generateStats2?name=" -def get_stats(username): - #check database for cached name first +def get_stats(name): + #yell at onomancer if not in cache or too old + response = requests.get(onomancer_url + name_stats_hook + urllib.parse.quote_plus(name)) + if response.status_code == 200: + + return response.json() + +def get_scream(username): scream = db.get_soulscream(username) if scream is not None: return scream - - #yell at onomancer if not in cache or too old - response = requests.get(onomancer_url + name_stats_hook + urllib.parse.quote_plus(username)) - if response.status_code == 200: - db.cache_soulscream(username, response.json()["soulscream"]) - return response.json()["soulscream"] \ No newline at end of file + else: + scream = get_stats(username)["soulscream"] + db.cache_soulscream(username, scream) + return scream \ No newline at end of file diff --git a/the_prestige.py b/the_prestige.py index 2117dc4..3f06b1d 100644 --- a/the_prestige.py +++ b/the_prestige.py @@ -43,11 +43,11 @@ async def on_message(msg): elif msg.channel.id == config()["soulscream channel id"]: try: - await msg.channel.send(ono.get_stats(msg.author.nick)) + await msg.channel.send(ono.get_scream(msg.author.nick)) except TypeError or AttributeError: - await msg.channel.send(ono.get_stats(msg.author.name)) + await msg.channel.send(ono.get_scream(msg.author.name)) except AttributeError: - await msg.channel.send(ono.get_stats(msg.author.name)) + await msg.channel.send(ono.get_scream(msg.author.name)) elif command.startswith("roman "): possible_int_string = command.split(" ",1)[1] @@ -56,6 +56,32 @@ async def on_message(msg): except ValueError: await msg.channel.send(f"\"{possible_int_string}\" isn't an integer in Arabic numerals.") + elif command.startswith("idolize"): + if (command.startswith("idolizememe")): + meme = True + else: + meme = False + player_name = command.split(" ",1)[1] + try: + player_json = ono.get_stats(player_name) + db.designate_player(msg.author, player_json) + if not meme: + await msg.channel.send(f"{player_name} is now your idol.") + else: + await msg.channel.send(f"{player_name} is now {msg.author.display_name}'s idol.") + await msg.channel.send(f"Reply if {player_name} is your idol also.") + except: + await msg.channel.send("Something went wrong. Tell 16.") + + elif command == "showidol": + try: + player_json = db.get_user_player(msg.author) + embed=build_star_embed(player_json) + embed.set_footer(text=msg.author.display_name) + await msg.channel.send(embed=embed) + except: + await msg.channel.send("We can't find your idol. Looked everywhere, too.") + elif command == "credit": await msg.channel.send("Our avatar was graciously provided to us, with permission, by @HetreaSky on Twitter.") @@ -72,4 +98,22 @@ Our avatar was graciously provided to us, with permission, by @HetreaSky on Twit await channel.send(text) +def build_star_embed(player_json): + starkeys = {"batting_stars" : "Batting", "pitching_stars" : "Pitching", "baserunning_stars" : "Baserunning", "defense_stars" : "Defense"} + embed = discord.Embed(color=discord.Color.purple(), title=player_json["name"]) + for key in starkeys.keys(): + starstring = str(player_json[key]) + if "." in starstring: + starnum = int(starstring[0]) + addhalf = True + else: + starnum = int(player_json[key]) + addhalf = False + embedstring = "⭐" * starnum + if addhalf: + embedstring += "✨" + embed.add_field(name=starkeys[key], value=embedstring, inline=False) + return embed + + client.run(config()["token"]) \ No newline at end of file