stormbrigade_sheriff/sb_utils.py

45 lines
2.2 KiB
Python

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