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",
"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

15
db.py
View file

@ -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:

View file

@ -10,4 +10,5 @@ from .genshindle import genshindle
from .planespottle import planespottle
from .wheretaken import wheretaken
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
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

View file

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

View file

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

View file

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

View file

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

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':
total_guesses += int(guesses) * reverse
wins += 1 * reverse
else:
total_guesses += 6
total_games += 1 * reverse