BF_BOT/src/plugins/bf_bot/__init__.py

116 lines
4.1 KiB
Python
Raw Normal View History

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="战地341520426",
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()