108 lines
3.5 KiB
Python
108 lines
3.5 KiB
Python
![]() |
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
|