45 lines
2.2 KiB
Python
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
|
|
|
|
|
|
|
|
|