From c0c663a02fdf028946da9aa8edb12c35cbd482a0 Mon Sep 17 00:00:00 2001 From: zkwolf Date: Mon, 13 May 2024 11:31:42 +0200 Subject: [PATCH] added steam achievement logic --- src/flask_definitions.py | 1 + src/logic/challenge_handler_new.py | 46 ++++++++++++++++++++++++++++++ src/logic/webhook_handler.py | 23 +++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/src/flask_definitions.py b/src/flask_definitions.py index 4afddef..74c2126 100644 --- a/src/flask_definitions.py +++ b/src/flask_definitions.py @@ -11,6 +11,7 @@ from logic.time_handler import get_lifetime from logic.hash_handler import hash_handler from logic.challenge_handler_new import new_challenge_handler, get_challenge_ids_from_inventory from logic.level_handler import update_user_xp +from logic.webhook_handler import webhook_handler import json import os diff --git a/src/logic/challenge_handler_new.py b/src/logic/challenge_handler_new.py index bb64b4f..ee73f7e 100644 --- a/src/logic/challenge_handler_new.py +++ b/src/logic/challenge_handler_new.py @@ -3,6 +3,7 @@ from flask_definitions import * import random from util.challenge_data import * +from logic.webhook_handler import webhook_handler # Base pickedChallenges Item @@ -705,6 +706,50 @@ def get_reward(blueprint): } +def update_achievement_challenges(user_id): + steam_id = mongo.get_data_with_list(login=user_id, login_steam=False, items={"steamid"})["steamid"] + data = webhook_handler.steam_check_achievments(steam_id) + if data["playerstats"]["success"]: + achieved_achievement = [] + for achievement in data["playerstats"]["achievements"]: + if achievement["achieved"] == 1: + challenge_id = achievement["apiname"] + if challenge_id == "EFAB89E6465D1163D62A07B11048F2B6": + print(f"Completed challenge {challenge_id}, NotAQuitter") + achieved_achievement.append({"challengeId": challenge_id, "value": 50}) + elif challenge_id == "2CAEBB354D506D7C43B941BC1DA775A0": + print(f"Completed challenge {challenge_id}, Escapist") + achieved_achievement.append({"challengeId": challenge_id, "value": 10}) + elif challenge_id == "E51981B946BEE3D45C5C41B2FCFF310B": + print(f"Completed challenge {challenge_id}, SpecialDelivery") + achieved_achievement.append({"challengeId": challenge_id, "value": 500}) + elif challenge_id == "AAD05B9D46471DC811BBE0BA91916AB7": + print(f"Completed challenge {challenge_id}, DontBeADowner") + achieved_achievement.append({"challengeId": challenge_id, "value": 50}) + elif challenge_id == "BA2D4A5445CB70276A8F5D9E1AFCE080": + print(f"Completed challenge {challenge_id}, DroneZone") + achieved_achievement.append({"challengeId": challenge_id, "value": 100}) + else: + logger.graylog_logger(level="error", handler="update_achievement_challenges", + message=f"Achievement Challenge {challenge_id} not found") + if len(achieved_achievement) > 0: + user_challenges = mongo.get_data_with_list(login=steam_id, login_steam=True, items={"challengeProgression"})["challengeProgression"] + for achievement in achieved_achievement: + challenge_id = achievement["challengeId"] + value = achievement["value"] + for challenge in user_challenges: + if challenge["challengeId"] == challenge_id: + challenge["completed"] = True + challenge["value"] = value + break + mongo.write_data_with_list(login=steam_id, login_steam=True, + items_dict={"challengeProgression": user_challenges}) + else: + logger.graylog_logger(level="error", handler="update_achievement_challenges", + message=f"Failed to get achievements for steam_id {steam_id}reason {data['playerstats']['error']}") + + + def get_challenge_ids_from_inventory(user_id): Progression_HunterGroupA = mongo.get_data_with_list(login=user_id, login_steam=False, items={"HunterGroupA"})["HunterGroupA"] @@ -777,6 +822,7 @@ def get_challenge_ids_from_inventory(user_id): challenge_found = True if not challenge_found: new_challenge_handler.add_challenge_to_user(user_id, challenge) + update_achievement_challenges(user_id) class ChallengeHandler: diff --git a/src/logic/webhook_handler.py b/src/logic/webhook_handler.py index bb2f290..6bdde96 100644 --- a/src/logic/webhook_handler.py +++ b/src/logic/webhook_handler.py @@ -4,3 +4,26 @@ import requests def discord_webhook(urls, data): for url in urls: requests.post(url, json=data) + + +class WebhookHandler: + def __init__(self): + self.steam_api_key = "" + self.steam_app_id = "" + self.steam_url = "https://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001" + self.discord_webhook_url_lobby = "" + self.discord_webhook_url_reports = "" + + def setup(self, steam_api_key, steam_app_id): + self.steam_api_key = steam_api_key + self.steam_app_id = steam_app_id + #self.discord_webhook_url_lobby = discord_webhook_url_lobby + #self.discord_webhook_url_reports = discord_webhook_url_reports + + def steam_check_achievments(self, steam_id): + url = f"{self.steam_url}?appid={self.steam_app_id}&key={self.steam_api_key}&steamid={steam_id}" + response = requests.get(url) + return response.json() + + +webhook_handler = WebhookHandler()