import asyncio import random from typing import TypedDict import db from httpx import Client from sqlalchemy.orm import Session import datetime Player_ban_data = TypedDict("Player_ban_data",{"player_name":str, "banned":bool, "permanent":bool}) async def check_banned_player(db_session:Session,httpx_session:Client,player_name:str) -> Player_ban_data: return_dict = {"player_name":player_name,"permanent":False,"banned":None} player:db.Player = db.get_or_create(db_session,db.Player,player_name = player_name)[0] player_ban_query:db.PlayerBan = db_session.query(db.PlayerBan).filter(db.PlayerBan.player_id == player.id).filter(db.PlayerBan.unbanned == False).one_or_none() if player_ban_query is None: await asyncio.sleep(0.01+random.random()*0.5) api_request = await httpx_session.get(f'http://login.strongholdkingdoms.com/ajaxphp/username_search.php?term={player_name}') api_request = api_request.json() if not api_request: #Request returned empty, so player_name is banned new_player_ban = db.PlayerBan(player_id = player.id) db_session.add(new_player_ban) db_session.commit() return_dict["banned"] = True return return_dict else: #Player returned by SHK servers, so not banned return return_dict else: #Player found in PlayerBan, evaluate if its permanent then return return_dict["banned"] = True elapsed_time = datetime.datetime.now() - player_ban_query.date_added if elapsed_time.days >= 3: player_ban_query.last_check = datetime.datetime.now() api_request = await httpx_session.get(f'http://login.strongholdkingdoms.com/ajaxphp/username_search.php?term={player_name}') api_request = api_request.json() if api_request: #Player returned by SHK servers, so not banned, flag the entry as unbanned player_ban_query.unbanned = True if elapsed_time.days() >= 14: player_ban_query.permanent = True db_session.commit() return_dict["banned"] = not player_ban_query.unbanned return_dict["permanent"] = player_ban_query.permanent return return_dict