Added travle, and changed average guess calculations

This commit is contained in:
termite 2025-01-21 11:17:59 -08:00
parent 4b8e4f8f52
commit 6b5cc61c3f
10 changed files with 126 additions and 14 deletions

28
bot.py
View file

@ -48,7 +48,8 @@ possible_games = [
"WhenTaken", "WhenTaken",
"Flagle", "Flagle",
"Genshindle", "Genshindle",
"Planespottle" "Planespottle",
"Travle"
] ]
chat_limit = 1000 chat_limit = 1000
@ -186,7 +187,7 @@ async def stats(
average_years = data[7] average_years = data[7]
await interaction.followup.send( 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"Total Games Played: {total_games}\n"
f"Average Distance: {average_distance:.2f} km\n" f"Average Distance: {average_distance:.2f} km\n"
f"Average Time Distance: {average_years:.2f} years\n" f"Average Time Distance: {average_years:.2f} years\n"
@ -249,7 +250,24 @@ async def stats(
f"Win Rate: {win_rate:.2f}%\n", f"Win Rate: {win_rate:.2f}%\n",
ephemeral=False # Send message only to the user who called the command 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 _: case _:
await interaction.followup.send( await interaction.followup.send(
"Not a game.", "Not a game.",
@ -291,6 +309,8 @@ async def get_table_options(ctx : discord.AutocompleteContext):
return ["games","total wins","win rate","average guesses"] return ["games","total wins","win rate","average guesses"]
case "planespottle": case "planespottle":
return ["games","total wins","win rate","average guesses"] return ["games","total wins","win rate","average guesses"]
case "travle":
return ["games","total wins","win rate","average guesses","perfects","perfect_rate"]
case _: case _:
return ["HOW DID YOU GET HERE? SCREW YOU FOR MESSING WITH MY PROGRAM"] 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.whentaken : r"#WhenTaken #[0-9]+ \([0-9]{2}\.[0-9]{2}\.[0-9]{4}\)",
gamlog.flagle : r"#Flagle #[0-9]+ \(.*\) ./6", gamlog.flagle : r"#Flagle #[0-9]+ \(.*\) ./6",
gamlog.genshindle : r"I (found|couldn't find) today's #Genshindle", 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()) match = re.search(pattern, message.content.strip())
if match: if match:
game(message, reverse) game(message, reverse)
continue
@bot.event @bot.event

15
db.py
View file

@ -84,7 +84,7 @@ def create_table():
POINTS_AVG REAL NOT NULL, POINTS_AVG REAL NOT NULL,
YEARS INTEGER NOT NULL, YEARS INTEGER NOT NULL,
YEARS_AVG REAL NOT NULL, YEARS_AVG REAL NOT NULL,
LAST_SYNC INTEGER LAST_SYNC INTEGER NOT NULL
); ''', ); ''',
''' CREATE TABLE IF NOT EXISTS FLAGLE( ''' CREATE TABLE IF NOT EXISTS FLAGLE(
NAME INTEGER PRIMARY KEY NOT NULL, NAME INTEGER PRIMARY KEY NOT NULL,
@ -112,7 +112,18 @@ def create_table():
GUESSES INTEGER NOT NULL, GUESSES INTEGER NOT NULL,
GUESS_AVG REAL NOT NULL, GUESS_AVG REAL NOT NULL,
LAST_SYNC INTEGER 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: for table in game_tables:

View file

@ -10,4 +10,5 @@ from .genshindle import genshindle
from .planespottle import planespottle from .planespottle import planespottle
from .wheretaken import wheretaken from .wheretaken import wheretaken
from .wheretaken import whentaken from .wheretaken import whentaken
from .travle import travle

View file

@ -46,11 +46,10 @@ def airport_guessr(message : discord.message, reverse):
total_games += 1 * reverse total_games += 1 * reverse
if wins != 0: if wins == 0:
average_guesses = total_guesses / wins
else:
average_guesses = 0 average_guesses = 0
else:
average_guesses = total_guesses / wins
win_rate = (wins / total_games) * 100 win_rate = (wins / total_games) * 100

View file

@ -44,8 +44,8 @@ def connections(message : discord.message, reverse):
total_games += 1 * reverse total_games += 1 * reverse
total_guesses += len(color_grid) * reverse
if guesses > 0: if guesses > 0:
total_guesses += guesses * reverse
wins += 1 * reverse wins += 1 * reverse
perfect_game = is_perfect_game(color_grid) perfect_game = is_perfect_game(color_grid)
if perfect_game: if perfect_game:
@ -56,10 +56,12 @@ def connections(message : discord.message, reverse):
return return
if wins != 0:
average_guesses = total_guesses / wins if wins == 0:
else:
average_guesses = 0 average_guesses = 0
else:
average_guesses = total_guesses / wins
win_rate = (wins / total_games) * 100 win_rate = (wins / total_games) * 100
perfect_rate = (perfects / total_games) * 100 perfect_rate = (perfects / total_games) * 100

View file

@ -44,6 +44,8 @@ def flagle(message : discord.message, reverse):
if guesses != 'X': if guesses != 'X':
total_guesses += int(guesses) * reverse total_guesses += int(guesses) * reverse
wins += 1 * reverse wins += 1 * reverse
else:
total_guesses += 6
total_games += 1 * reverse total_games += 1 * reverse

View file

@ -44,6 +44,8 @@ def genshindle(message : discord.message, reverse):
guesses = match.group(1) guesses = match.group(1)
total_guesses += int(guesses) * reverse total_guesses += int(guesses) * reverse
wins += 1 * reverse wins += 1 * reverse
else:
total_guesses += 5
total_games += 1 * reverse total_games += 1 * reverse

View file

@ -40,9 +40,9 @@ def satle(message : discord.message, reverse):
lines = message.content.splitlines() lines = message.content.splitlines()
match = re.match(PATTERN, lines[0].strip()) match = re.match(PATTERN, lines[0].strip())
guesses = match.group(1) guesses = match.group(1)
total_guesses += int(guesses) * reverse
if lines[1].__contains__("🟩"): if lines[1].__contains__("🟩"):
wins += 1 * reverse wins += 1 * reverse
total_guesses += int(guesses) * reverse
total_games += 1 * reverse total_games += 1 * reverse

71
gamelogic/travle.py Normal file
View file

@ -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()

View file

@ -43,6 +43,8 @@ def wordle(message : discord.message, reverse):
if guesses != 'X': if guesses != 'X':
total_guesses += int(guesses) * reverse total_guesses += int(guesses) * reverse
wins += 1 * reverse wins += 1 * reverse
else:
total_guesses += 6
total_games += 1 * reverse total_games += 1 * reverse