HEXI/hexi/plugins/battlefield2042status/data_tools.py

108 lines
3.5 KiB
Python
Raw Normal View History

2023-11-02 11:57:54 +08:00
import os
import aiohttp
filepath = os.path.dirname(__file__).replace("\\", "/")
bf_ban_url = "https://api.gametools.network/bfban/checkban"
ban_reason = {
0: "未处理",
1: "石锤",
2: "待自证",
3: "MOSS自证",
4: "无效举报",
5: "讨论中",
6: "需要更多管理投票",
7: "未知原因封禁",
8: "刷枪"
}
def hacker_check(weapon_data):
"""
简易外挂数据检测
:param weapon_data: 武器数据
:return: 返回检测的数据标记
击杀数大于100小于切爆头率大于30小于40标记1
击杀数大于100切爆头率大于40标记2基本实锤
"""
ignore_type = ["DMR", "Bolt Action", "Railguns", "Lever-Action Carbines", "Sidearm", "Crossbows", "Shotguns"]
sign = []
for weapon in weapon_data:
if weapon["type"] not in ignore_type:
sign.append(headshot(weapon))
continue
return sign
def headshot(weapon):
sign = 999
if 30.00 <= float(weapon["headshots"].replace('%', "")) and float(weapon["kills"]) >= 100:
if float(weapon["headshots"].replace('%', "")) <= 40.00:
if float(weapon["kills"]) < 200:
sign = 1
else:
sign = 0
elif float(weapon["headshots"].replace('%', "")) > 40.00:
if float(weapon["kills"]) < 200:
sign = 2
else:
sign = 3
return sign
async def get_bf_ban_check(user_name, userids, personaids):
url = "https://api.gametools.network/bfban/checkban/"
params = {
"names": user_name,
"userids": userids,
"personaids": personaids
}
headers = {'accept': 'application/json'}
trans = "未查询到相关信息"
async with aiohttp.ClientSession() as session:
async with session.get(url, headers=headers, params=params) as response:
if response.status == 200:
res = await response.json()
hacker_name = res["names"][user_name.lower()]["hacker"]
hacker_userids = res["userids"][f"{userids}"]["hacker"]
hacker_personaids = res["personaids"][f"{personaids}"]["hacker"]
if hacker_name:
ban_result = res["names"][user_name.lower()]["status"]
trans = ban_reason[ban_result]
elif hacker_userids:
ban_result = res["userids"][f"{userids}"]["status"]
trans = ban_reason[ban_result]
elif hacker_personaids:
ban_result = res["personaids"][f"{personaids}"]["status"]
trans = ban_reason[ban_result]
else:
if "status" in str(res):
res_data = search_field_in_json(res, "status")
trans = ban_reason[res_data]
return trans
def search_field_in_json(obj, field_name):
"""
递归搜索 JSON 对象中的指定字段名
:param obj: JSON 对象
:param field_name: 指定的字段名
:return: 找到的字段值未找到时返回 None
"""
if isinstance(obj, dict):
for key, value in obj.items():
if key == field_name:
return value
else:
result = search_field_in_json(value, field_name)
if result is not None:
return result
elif isinstance(obj, list):
for item in obj:
result = search_field_in_json(item, field_name)
if result is not None:
return result
else:
return None