resetLeaderboard

This commit is contained in:
SpudGunMan
2025-10-10 00:36:22 -07:00
parent 4b1123dcac
commit 35c8dc6f70
2 changed files with 35 additions and 40 deletions
+1 -1
View File
@@ -63,7 +63,7 @@ def auto_response(message, snr, rssi, hop, pkiStatus, message_from_id, channel_n
"howfar": lambda: handle_howfar(message, message_from_id, deviceID, isDM),
"howtall": lambda: handle_howtall(message, message_from_id, deviceID, isDM),
"joke": lambda: tell_joke(message_from_id),
"leaderboard": lambda: get_mesh_leaderboard(),
"leaderboard": lambda: get_mesh_leaderboard(message, message_from_id, deviceID),
"lemonstand": lambda: handleLemonade(message, message_from_id, deviceID),
"lheard": lambda: handle_lheard(message, message_from_id, deviceID, isDM),
"mastermind": lambda: handleMmind(message, message_from_id, deviceID),
+34 -39
View File
@@ -1059,25 +1059,28 @@ def displayNodeTelemetry(nodeID=0, rxNode=0, userRequested=False):
return dataResponse
positionMetadata = {}
meshLeaderboard = {}
def initializeMeshLeaderboard():
global meshLeaderboard
# Leaderboard for tracking extreme metrics, if changed update loadLeaderboard
meshLeaderboard = {
'lowestBattery': {'nodeID': None, 'value': 101, 'timestamp': 0}, # 🪫
'longestUptime': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 🕰️
'fastestSpeed': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 🚓
'highestAltitude': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 🚀
'coldestTemp': {'nodeID': None, 'value': 999, 'timestamp': 0}, # 🥶
'hottestTemp': {'nodeID': None, 'value': -999, 'timestamp': 0}, # 🥵
'worstAirQuality': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 💨
'mostMessages': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 💬
'highestDBm': {'nodeID': None, 'value': -999, 'timestamp': 0}, # 📶
'weakestDBm': {'nodeID': None, 'value': 999, 'timestamp': 0}, # 📶
'mostReactions': {'nodeID': None, 'value': 0, 'timestamp': 0}, # ❤️
'adminPackets': [], # 🚨
'tunnelPackets': [], # 🚨
'audioPackets': [], # ☎️
'simulatorPackets': [] # 🤖
}
# Leaderboard for tracking extreme metrics, if changed update loadLeaderboard
meshLeaderboard = {
'lowestBattery': {'nodeID': None, 'value': 101, 'timestamp': 0}, # 🪫
'longestUptime': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 🕰️
'fastestSpeed': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 🚓
'highestAltitude': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 🚀
'coldestTemp': {'nodeID': None, 'value': 999, 'timestamp': 0}, # 🥶
'hottestTemp': {'nodeID': None, 'value': -999, 'timestamp': 0}, # 🥵
'worstAirQuality': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 💨
'mostMessages': {'nodeID': None, 'value': 0, 'timestamp': 0}, # 💬
'highestDBm': {'nodeID': None, 'value': -999, 'timestamp': 0}, # 📶
'weakestDBm': {'nodeID': None, 'value': 999, 'timestamp': 0}, # 📶
'mostReactions': {'nodeID': None, 'value': 0, 'timestamp': 0}, # ❤️
'adminPackets': [], # 🚨
'tunnelPackets': [], # 🚨
'audioPackets': [], # ☎️
'simulatorPackets': [] # 🤖
}
def consumeMetadata(packet, rxNode=0, channel=-1):
global positionMetadata, telemetryData, meshLeaderboard
uptime = battery = temp = iaq = nodeID = 0
@@ -1431,41 +1434,33 @@ def saveLeaderboard():
logger.warning(f"System: Error saving Mesh Leaderboard: {e}")
def loadLeaderboard():
# load the meshLeaderboard from a pickle file
global meshLeaderboard
try:
with open('data/leaderboard.pkl', 'rb') as f:
meshLeaderboard = pickle.load(f)
# Ensure all keys from the default exist
defaults = {}
initializeMeshLeaderboard()
defaults.update(meshLeaderboard) # loaded values overwrite defaults
meshLeaderboard = defaults
if logMetaStats:
logger.debug("System: Mesh Leaderboard loaded from leaderboard.pkl")
# Ensure leaderboard keys exist (for versioning/migrations)
if 'mostMessages' not in meshLeaderboard:
meshLeaderboard['mostMessages'] = {'nodeID': None, 'value': 0, 'timestamp': 0}
if 'highestDBm' not in meshLeaderboard:
meshLeaderboard['highestDBm'] = {'nodeID': None, 'value': -999, 'timestamp': 0}
if 'weakestDBm' not in meshLeaderboard:
meshLeaderboard['weakestDBm'] = {'nodeID': None, 'value': 999, 'timestamp': 0}
except FileNotFoundError:
if logMetaStats:
logger.debug("System: No existing Mesh Leaderboard found, starting fresh")
initializeMeshLeaderboard()
except Exception as e:
logger.warning(f"System: Error loading Mesh Leaderboard: {e}")
# Ensure 'mostMessages' exists (versioning issues)
if 'mostMessages' not in meshLeaderboard:
meshLeaderboard['mostMessages'] = {'nodeID': None, 'value': 0, 'timestamp': 0}
# Ensure 'highestDBm' exists (versioning issues)
if 'highestDBm' not in meshLeaderboard:
meshLeaderboard['highestDBm'] = {'nodeID': None, 'value': -999, 'timestamp': 0}
# Ensure 'weakestDBm' exists (versioning issues)
if 'weakestDBm' not in meshLeaderboard:
meshLeaderboard['weakestDBm'] = {'nodeID': None, 'value': 999, 'timestamp': 0}
def get_mesh_leaderboard():
initializeMeshLeaderboard()
def get_mesh_leaderboard(msg, fromID, deviceID):
"""Get formatted leaderboard of extreme mesh metrics"""
global meshLeaderboard
result = "📊 Leaderboard 📊\n"
if "reset" in msg.lower() and str(fromID) in bbs_admin_list:
initializeMeshLeaderboard()
return "✅ Leaderboard has been reset.\n"
# Lowest battery
if meshLeaderboard['lowestBattery']['nodeID']:
nodeID = meshLeaderboard['lowestBattery']['nodeID']