2025-10-28 12:16:00 +08:00
|
|
|
|
import time
|
2025-10-28 09:30:54 +08:00
|
|
|
|
|
|
|
|
|
|
from nonebot import on_command, require
|
|
|
|
|
|
from nonebot.adapters import Message
|
|
|
|
|
|
from nonebot.matcher import Matcher
|
|
|
|
|
|
from nonebot.params import CommandArg
|
|
|
|
|
|
from nonebot.plugin import PluginMetadata
|
|
|
|
|
|
from nonebot.rule import to_me
|
|
|
|
|
|
from nonebot.log import logger
|
|
|
|
|
|
import json
|
|
|
|
|
|
|
|
|
|
|
|
require("nonebot_plugin_alconna")
|
|
|
|
|
|
from nonebot_plugin_alconna import UniMessage
|
|
|
|
|
|
from .data import *
|
|
|
|
|
|
from .data_utils import *
|
|
|
|
|
|
from .image_builder import *
|
|
|
|
|
|
from .text_utils import *
|
|
|
|
|
|
|
|
|
|
|
|
__plugin_meta__ = PluginMetadata(
|
|
|
|
|
|
name="BF查询",
|
|
|
|
|
|
description="战地3,4,1,5,2042,6",
|
|
|
|
|
|
usage="",
|
|
|
|
|
|
extra={
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
query = on_command("bft", rule=to_me(), aliases={"bf3", "bf4", "bfv", "bf1", "bf2042", "bf6"}, block=True)
|
|
|
|
|
|
bind = on_command("bind", rule=to_me(), aliases={"绑定"}, block=True)
|
|
|
|
|
|
|
|
|
|
|
|
bf_dict = {
|
|
|
|
|
|
"bf3": "战地3",
|
|
|
|
|
|
"bf4": "战地4",
|
|
|
|
|
|
"bf1": "战地1",
|
|
|
|
|
|
"bfv": "战地5",
|
|
|
|
|
|
"bf2042": "战地2042",
|
|
|
|
|
|
"bf6": "战地6",
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@query.handle()
|
|
|
|
|
|
async def handle_function(matcher: Matcher, msg: Message = CommandArg()):
|
|
|
|
|
|
cmd = matcher.state["_prefix"]["command"][0]
|
|
|
|
|
|
game = cmd
|
|
|
|
|
|
content = msg.extract_plain_text()
|
|
|
|
|
|
play_stat = ""
|
|
|
|
|
|
if cmd == "bf3":
|
|
|
|
|
|
play_stat = await get_data_bf3(content, "pc")
|
|
|
|
|
|
elif cmd == "bf4":
|
|
|
|
|
|
play_stat = await get_data_bf4(content, "pc")
|
|
|
|
|
|
elif cmd == "bf1":
|
|
|
|
|
|
play_stat = await get_data_bf1(content, "pc")
|
|
|
|
|
|
elif cmd == "bfv":
|
|
|
|
|
|
play_stat = await get_data_bfv(content, "pc")
|
|
|
|
|
|
elif cmd == "bf2042":
|
|
|
|
|
|
play_stat = await get_data_bfv(content, "pc")
|
|
|
|
|
|
elif cmd == "bf6":
|
|
|
|
|
|
flag, play_stat = await get_data_bf6(content, 0)
|
|
|
|
|
|
if flag == 0:
|
|
|
|
|
|
msg = '检测到多个同名用户\n' + '\n'.join(
|
|
|
|
|
|
f'用户名:{info["name"]}-等级:{info["rank"]}-UID:{info["uid"]}' for info in play_stat)
|
|
|
|
|
|
await UniMessage.text(msg).finish()
|
|
|
|
|
|
elif flag == 2:
|
|
|
|
|
|
msg = "未找到该玩家名"
|
|
|
|
|
|
await UniMessage.text(msg).finish()
|
|
|
|
|
|
else:
|
|
|
|
|
|
await UniMessage.text("指令异常").finish()
|
|
|
|
|
|
if "errors" in play_stat:
|
|
|
|
|
|
logger.warning(play_stat['errors'][0])
|
|
|
|
|
|
msg = play_stat['errors'][0]
|
|
|
|
|
|
else:
|
|
|
|
|
|
if cmd == "bf6":
|
|
|
|
|
|
img = build_bf6_simple_card(play_stat)
|
|
|
|
|
|
else:
|
|
|
|
|
|
weapon, vehicle = await get_best_weapon_and_best_vehicle(play_stat)
|
|
|
|
|
|
player = play_stat['userName']
|
|
|
|
|
|
pid = play_stat['userId']
|
|
|
|
|
|
kd = play_stat['killDeath']
|
|
|
|
|
|
kpm = play_stat['killsPerMinute']
|
|
|
|
|
|
spm = play_stat['scorePerMinute']
|
|
|
|
|
|
acc = play_stat['accuracy']
|
|
|
|
|
|
# 战地3 特化
|
|
|
|
|
|
if cmd == 'bf3':
|
|
|
|
|
|
head_shots = play_stat['headShots']
|
|
|
|
|
|
else:
|
|
|
|
|
|
head_shots = play_stat['headshots']
|
|
|
|
|
|
|
|
|
|
|
|
rank = play_stat['rank']
|
|
|
|
|
|
time_play = convert_to_hours(play_stat['timePlayed'])
|
|
|
|
|
|
kills = int(play_stat['kills'])
|
|
|
|
|
|
kill_assists = int(play_stat['killAssists'])
|
|
|
|
|
|
revives = int(play_stat['revives'])
|
|
|
|
|
|
wins = int(play_stat['wins'])
|
|
|
|
|
|
loses = int(play_stat['loses'])
|
|
|
|
|
|
best_weapon = weapon
|
|
|
|
|
|
best_vehicle = vehicle
|
|
|
|
|
|
best_class = play_stat['bestClass']
|
|
|
|
|
|
longest_head_shot = play_stat['longestHeadShot']
|
|
|
|
|
|
highest_ill_streak = play_stat['highestKillStreak']
|
|
|
|
|
|
|
|
|
|
|
|
# await stats_calculator(play_stat)
|
|
|
|
|
|
|
|
|
|
|
|
stat_data, level_designation = await stats_calculator(play_stat, cmd)
|
|
|
|
|
|
destroyed = await get_vehicle_destroyed(play_stat["vehicles"])
|
|
|
|
|
|
img = await build_stats_card(game, player, pid, kd, kpm, spm, acc, head_shots, rank, time_play, kills,
|
|
|
|
|
|
kill_assists, revives, wins, loses, destroyed, best_weapon, best_vehicle,
|
|
|
|
|
|
best_class,
|
|
|
|
|
|
longest_head_shot, highest_ill_streak, stat_data, level_designation)
|
|
|
|
|
|
await UniMessage.image(raw=img.getvalue()).finish()
|
|
|
|
|
|
await UniMessage.text(f"\n玩家【{content}】的【{bf_dict[cmd]}】数据\n{msg}").send()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@bind.handle()
|
|
|
|
|
|
async def bind_user(matcher: Matcher, msg: Message = CommandArg()):
|
|
|
|
|
|
matcher.state.get()
|