178 lines
4.9 KiB
Python
178 lines
4.9 KiB
Python
import sys
|
|
import time
|
|
import discord
|
|
import re
|
|
|
|
import sqlite3
|
|
|
|
def wheretaken(message : discord.message, reverse):
|
|
if reverse == True:
|
|
reverse = -1
|
|
else:
|
|
reverse = 1
|
|
|
|
total_distance = 0
|
|
total_points = 0
|
|
total_games = 0
|
|
|
|
sync_time = 0
|
|
new_sync_time = (int)(time.mktime(message.created_at.timetuple()))
|
|
|
|
conn = sqlite3.connect('stats.db')
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute('''SELECT * FROM WHERETAKEN WHERE NAME = ?''', (message.author.id,))
|
|
|
|
data = cursor.fetchone()
|
|
|
|
if data:
|
|
total_games = data[1]
|
|
total_distance = data[2]
|
|
total_points = data[4]
|
|
sync_time = data[6]
|
|
if sync_time > new_sync_time and reverse == 1:
|
|
return
|
|
|
|
distances, points = parse_distances_and_points(message.content)
|
|
avg_distance = calculate_average(distances)
|
|
|
|
total_distance += avg_distance * reverse
|
|
total_points += sum(points) * reverse
|
|
total_games += 1 * reverse
|
|
|
|
|
|
average_distance = total_distance / total_games
|
|
average_points = total_points / total_games
|
|
|
|
cursor.execute('''INSERT OR REPLACE INTO WHERETAKEN VALUES(?, ?, ?, ?, ?, ?, ?)''',
|
|
(message.author.id,
|
|
total_games,
|
|
total_distance,
|
|
average_distance,
|
|
total_points,
|
|
average_points,
|
|
new_sync_time
|
|
))
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
def whentaken(message : discord.message, reverse):
|
|
if reverse == True:
|
|
reverse = -1
|
|
else:
|
|
reverse = 1
|
|
|
|
total_distance = 0
|
|
total_points = 0
|
|
total_games = 0
|
|
total_years = 0
|
|
|
|
sync_time = 0
|
|
new_sync_time = (int)(time.mktime(message.created_at.timetuple()))
|
|
|
|
conn = sqlite3.connect('stats.db')
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute('''SELECT * FROM WHENTAKEN WHERE NAME = ?''', (message.author.id,))
|
|
|
|
data = cursor.fetchone()
|
|
|
|
if data:
|
|
total_games = data[1]
|
|
total_distance = data[2]
|
|
total_points = data[4]
|
|
total_years = data[6]
|
|
sync_time = data[8]
|
|
if sync_time > new_sync_time and reverse == 1:
|
|
return
|
|
|
|
distances, points, years = parse_distances_points_years(message.content)
|
|
avg_distance = calculate_average(distances)
|
|
avg_years = calculate_average(years)
|
|
|
|
total_years += avg_years
|
|
total_distance += avg_distance * reverse
|
|
total_points += sum(points) * reverse
|
|
total_games += 1 * reverse
|
|
|
|
|
|
average_distance = total_distance / total_games
|
|
average_points = total_points / total_games
|
|
average_years = total_years / total_games
|
|
|
|
cursor.execute('''INSERT OR REPLACE INTO WHENTAKEN VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)''',
|
|
(message.author.id,
|
|
total_games,
|
|
total_distance,
|
|
average_distance,
|
|
total_points,
|
|
average_points,
|
|
total_years,
|
|
average_years,
|
|
new_sync_time
|
|
))
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
def parse_distances_points_years(message):
|
|
pattern = r'.{4}([0-9]*\.?[0-9]+)([A-Za-z]?) ([A-Za-z]+) - ..([0-9]+) yrs - .([0-9]+)/200'
|
|
matches = re.findall(pattern, message)
|
|
|
|
converted_distances = []
|
|
points = []
|
|
years = []
|
|
|
|
for distance, thousands, unit, year, point in matches:
|
|
# Convert distance to float
|
|
distance = float(distance)
|
|
|
|
# Handle 'K' (thousands) notation
|
|
if thousands:
|
|
distance *= 1000 # Convert K to actual kilometers
|
|
|
|
# If the unit is meters, convert to kilometers
|
|
if unit == 'm':
|
|
distance /= 1000 # Convert meters to kilometers
|
|
|
|
# Store the distance and corresponding points
|
|
converted_distances.append(distance)
|
|
points.append(int(point))
|
|
years.append(int(year))
|
|
|
|
return converted_distances, points, years
|
|
|
|
def parse_distances_and_points(message):
|
|
# Find all the distances in the format of 'xxx km' or 'xxx m' and their corresponding points
|
|
pattern = r'(\d+(\.\d+)?)\s*(km|m|K)\s*(km)?\s*[^a-zA-Z0-9]*\s*(\d+)\s*/\s*\d+'
|
|
matches = re.findall(pattern, message)
|
|
|
|
converted_distances = []
|
|
points = []
|
|
|
|
for distance, _, unit, _, point in matches:
|
|
# Convert distance to float
|
|
distance = float(distance)
|
|
|
|
# Handle 'K' (thousands) notation
|
|
if unit == 'K':
|
|
distance *= 1000 # Convert K to actual kilometers
|
|
|
|
# If the unit is meters, convert to kilometers
|
|
elif unit == 'm':
|
|
distance /= 1000 # Convert meters to kilometers
|
|
|
|
# Store the distance and corresponding points
|
|
converted_distances.append(distance)
|
|
points.append(int(point))
|
|
|
|
return converted_distances, points
|
|
|
|
def calculate_average(distances):
|
|
# Calculate the average of the distances
|
|
if distances:
|
|
return sum(distances) / len(distances)
|
|
return 0
|