diff --git a/bot.py b/bot.py index e5682df..2263d7e 100644 --- a/bot.py +++ b/bot.py @@ -48,7 +48,8 @@ possible_games = [ "WhenTaken", "Flagle", "Genshindle", - "Planespottle" + "Planespottle", + "Travle" ] chat_limit = 1000 @@ -186,7 +187,7 @@ async def stats( average_years = data[7] await interaction.followup.send( - f"Where Taken stats for {user.mention}:\n" + f"When Taken stats for {user.mention}:\n" f"Total Games Played: {total_games}\n" f"Average Distance: {average_distance:.2f} km\n" f"Average Time Distance: {average_years:.2f} years\n" @@ -249,7 +250,24 @@ async def stats( f"Win Rate: {win_rate:.2f}%\n", ephemeral=False # Send message only to the user who called the command ) + case "travle": + total_games = data[1] + wins = data[2] + perfects = data[3] + win_rate = data[4] + perfect_rate = data[5] + total_guesses = data[6] + average_guesses = data[7] + await interaction.followup.send( + f"Travle stats for {user.mention}:\n" + f"Total Games Played: {total_games}\n" + f"Average Extra Guesses per Game: {average_guesses:.2f}\n" + f"Win Rate: {win_rate:.2f}%\n" + f"Perfect Games: {perfects}\n", + + ephemeral=False # Send message only to the user who called the command + ) case _: await interaction.followup.send( "Not a game.", @@ -291,6 +309,8 @@ async def get_table_options(ctx : discord.AutocompleteContext): return ["games","total wins","win rate","average guesses"] case "planespottle": return ["games","total wins","win rate","average guesses"] + case "travle": + return ["games","total wins","win rate","average guesses","perfects","perfect_rate"] case _: return ["HOW DID YOU GET HERE? SCREW YOU FOR MESSING WITH MY PROGRAM"] @@ -380,7 +400,8 @@ def process_message(message : discord.message, reverse : bool): gamlog.whentaken : r"#WhenTaken #[0-9]+ \([0-9]{2}\.[0-9]{2}\.[0-9]{4}\)", gamlog.flagle : r"#Flagle #[0-9]+ \(.*\) ./6", gamlog.genshindle : r"I (found|couldn't find) today's #Genshindle", - gamlog.planespottle : r"Planespottle #[0-9]+ (failed to guess|in \d/5 guesses)!" + gamlog.planespottle : r"Planespottle #[0-9]+ (failed to guess|in \d/5 guesses)!", + gamlog.travle : r"#travle.* #[0-9]+ (\+([0-9]+)|\(([0-9]+) away\))" } @@ -388,6 +409,7 @@ def process_message(message : discord.message, reverse : bool): match = re.search(pattern, message.content.strip()) if match: game(message, reverse) + continue @bot.event diff --git a/db.py b/db.py index a268b64..6581125 100644 --- a/db.py +++ b/db.py @@ -84,7 +84,7 @@ def create_table(): POINTS_AVG REAL NOT NULL, YEARS INTEGER NOT NULL, YEARS_AVG REAL NOT NULL, - LAST_SYNC INTEGER + LAST_SYNC INTEGER NOT NULL ); ''', ''' CREATE TABLE IF NOT EXISTS FLAGLE( NAME INTEGER PRIMARY KEY NOT NULL, @@ -112,7 +112,18 @@ def create_table(): GUESSES INTEGER NOT NULL, GUESS_AVG REAL NOT NULL, LAST_SYNC INTEGER NOT NULL - ); ''' + ); ''', + ''' CREATE TABLE IF NOT EXISTS TRAVLE( + NAME INTEGER PRIMARY KEY NOT NULL, + GAMES INTEGER NOT NULL, + WINS INTEGER NOT NULL, + PERFECTS INTEGER NOT NULL, + WIN_RATE REAL NOT NULL, + PERFECT_RATE REAL NOT NULL, + GUESSES INTEGER NOT NULL, + GUESS_AVG REAL NOT NULL, + LAST_SYNC INTEGER NOT NULL + ); ''', ] for table in game_tables: diff --git a/gamelogic/__init__.py b/gamelogic/__init__.py index 876da9f..a45b7bd 100644 --- a/gamelogic/__init__.py +++ b/gamelogic/__init__.py @@ -10,4 +10,5 @@ from .genshindle import genshindle from .planespottle import planespottle from .wheretaken import wheretaken from .wheretaken import whentaken +from .travle import travle diff --git a/gamelogic/airport_guessr.py b/gamelogic/airport_guessr.py index d2918e3..2001017 100644 --- a/gamelogic/airport_guessr.py +++ b/gamelogic/airport_guessr.py @@ -46,11 +46,10 @@ def airport_guessr(message : discord.message, reverse): total_games += 1 * reverse - if wins != 0: - average_guesses = total_guesses / wins - else: + if wins == 0: average_guesses = 0 - + else: + average_guesses = total_guesses / wins win_rate = (wins / total_games) * 100 diff --git a/gamelogic/connections.py b/gamelogic/connections.py index d81564b..76cd5cb 100644 --- a/gamelogic/connections.py +++ b/gamelogic/connections.py @@ -44,8 +44,8 @@ def connections(message : discord.message, reverse): total_games += 1 * reverse + total_guesses += len(color_grid) * reverse if guesses > 0: - total_guesses += guesses * reverse wins += 1 * reverse perfect_game = is_perfect_game(color_grid) if perfect_game: @@ -56,10 +56,12 @@ def connections(message : discord.message, reverse): return - if wins != 0: - average_guesses = total_guesses / wins - else: + + if wins == 0: average_guesses = 0 + else: + average_guesses = total_guesses / wins + win_rate = (wins / total_games) * 100 perfect_rate = (perfects / total_games) * 100 diff --git a/gamelogic/flagle.py b/gamelogic/flagle.py index 8ec83f4..1742a50 100644 --- a/gamelogic/flagle.py +++ b/gamelogic/flagle.py @@ -44,6 +44,8 @@ def flagle(message : discord.message, reverse): if guesses != 'X': total_guesses += int(guesses) * reverse wins += 1 * reverse + else: + total_guesses += 6 total_games += 1 * reverse diff --git a/gamelogic/genshindle.py b/gamelogic/genshindle.py index 0e74abc..77b5bd1 100644 --- a/gamelogic/genshindle.py +++ b/gamelogic/genshindle.py @@ -44,6 +44,8 @@ def genshindle(message : discord.message, reverse): guesses = match.group(1) total_guesses += int(guesses) * reverse wins += 1 * reverse + else: + total_guesses += 5 total_games += 1 * reverse diff --git a/gamelogic/satle.py b/gamelogic/satle.py index 3bfa21a..efb8562 100644 --- a/gamelogic/satle.py +++ b/gamelogic/satle.py @@ -40,9 +40,9 @@ def satle(message : discord.message, reverse): lines = message.content.splitlines() match = re.match(PATTERN, lines[0].strip()) guesses = match.group(1) + total_guesses += int(guesses) * reverse if lines[1].__contains__("🟩"): wins += 1 * reverse - total_guesses += int(guesses) * reverse total_games += 1 * reverse diff --git a/gamelogic/travle.py b/gamelogic/travle.py new file mode 100644 index 0000000..374764a --- /dev/null +++ b/gamelogic/travle.py @@ -0,0 +1,71 @@ +import sys +import time +import discord +import re + +import sqlite3 + + +def travle(message : discord.message, reverse): + if reverse == True: + reverse = -1 + else: + reverse = 1 + + conn = sqlite3.connect('stats.db') + cursor = conn.cursor() + + PATTERN = r"#travle.* #[0-9]+ (\+([0-9]+)|\(([0-9]+) away\)) ?(\(Perfect\))?" + COLORED_PATTERN = r"(?:🟥|🟩|✅|🟧)+" + + match = re.match(PATTERN, message.content.strip()) + + total_guesses = 0 + total_games = 0 + wins = 0 + sync_time = 0 + perfects = 0 + new_sync_time = (int)(time.mktime(message.created_at.timetuple())) + + cursor.execute('''SELECT * FROM TRAVLE WHERE NAME = ?''', (message.author.id,)) + + data = cursor.fetchone() + + + if data: + total_games = data[1] + wins = data[2] + perfects = data[3] + total_guesses = data[6] + sync_time = data[8] + if sync_time > new_sync_time and reverse == 1: + return + + guesses = match.group(2) + if guesses: + if match.group(4): + perfects += 1 + total_guesses += int(guesses) * reverse + wins += 1 * reverse + else: + colored_match = re.search(COLORED_PATTERN, message.content.strip()) + guesses = int(match.group(3)) + guesses += str(colored_match).count('🟥') + + total_guesses += guesses + + total_games += 1 * reverse + + + if wins == 0: + average_guesses = 0 + else: + average_guesses = total_guesses / wins + win_rate = (wins / total_games) * 100 + perfect_rate = (perfects / total_games) * 100 + + cursor.execute('''INSERT OR REPLACE INTO TRAVLE VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)''', + (message.author.id,total_games,wins,perfects,win_rate,perfect_rate,total_guesses,average_guesses,new_sync_time)) + + conn.commit() + conn.close() diff --git a/gamelogic/wordle.py b/gamelogic/wordle.py index b846a1e..e497dc1 100644 --- a/gamelogic/wordle.py +++ b/gamelogic/wordle.py @@ -43,6 +43,8 @@ def wordle(message : discord.message, reverse): if guesses != 'X': total_guesses += int(guesses) * reverse wins += 1 * reverse + else: + total_guesses += 6 total_games += 1 * reverse