refactor(bf-bot): 插件重构为 handlers/services/utils 分层,资源归入 res/
- 旧平铺模块(data/data_utils/database_op/image_builder*/get_bf6_data/ gametools_bf6/bf6_data/img_utils)拆分为 handlers(绑定/查询)、 services(fetchers/processing/query)、utils(渲染/参数)分层; 新增 repository.py / config.py / paths.py - 字体/图片/模板资源迁入 res/,新增 BF2042 卡面素材(bg/object_icon 等) - browser_ext/:BF2042 扩展捕获桥(WS 直连兜底通道)源码入库 - 新增 hexi/web/src/plugins/bf_bot 前端管理页 - 新增 tests:test_bf_bot_helpers / repository / tracker_api Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
1 parent
614e1d7e00
commit
a31aab00e8
752 files changed
+6241
-2506
No files matched your search
@@ -0,0 +1,116 @@
|
||||
"""绑定编排:/bfbind、/unbind、/update_bind 的业务流程。
|
||||
|
||||
只做数据操作与文案产出(返回给用户的字符串),不直接发消息。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import sqlite3
|
||||
|
||||
from nonebot import logger
|
||||
|
||||
from ..repository import UserManager
|
||||
from .fetchers.gametools import (
|
||||
get_player_info_by_ea_id,
|
||||
get_player_info_by_name,
|
||||
player_display_name,
|
||||
)
|
||||
|
||||
_PLATFORM = "pc"
|
||||
|
||||
|
||||
async def bind(qq_id: str, player_name: str) -> str:
|
||||
"""绑定 QQ ↔ EAID;已绑/被他人占用/查无此人都给出对应提示。"""
|
||||
manager = UserManager()
|
||||
user_record = manager.get_user_by_qq(qq_id)
|
||||
if user_record:
|
||||
info = await get_player_info_by_ea_id(
|
||||
user_record["ea_player_id"], user_record["ea_user_id"], _PLATFORM
|
||||
)
|
||||
name = player_display_name(info, user_record["ea_player_name"])
|
||||
return f"您已经将账号绑定到: {name},如果你需要更改绑定请发送 修改绑定 EAID "
|
||||
|
||||
player_name = (player_name or "").strip()
|
||||
if not player_name:
|
||||
return "请提供要绑定的 EAID,例如:绑定 YourEAID"
|
||||
|
||||
user_info = await get_player_info_by_name(player_name, _PLATFORM)
|
||||
if "errors" in user_info:
|
||||
return "未找到玩家,请检查是否拼写正确"
|
||||
player_id = user_info["personaId"]
|
||||
user_id = user_info["userId"]
|
||||
player_name = player_display_name(user_info, player_name)
|
||||
logger.info(f"QQ号:{qq_id},EA双ID:{player_id}-{user_id}")
|
||||
|
||||
# 检测ea账号是否被绑定至其他qq(EA 三字段 UNIQUE,靠这里预检兜住)
|
||||
bind_record = manager.get_user_by_ea_id(user_id)
|
||||
if bind_record:
|
||||
return (
|
||||
f"您的EA账号 {bind_record['ea_player_name']} 已经绑定到: "
|
||||
f"{bind_record['qq_id']},请您确认绑定的EAID"
|
||||
)
|
||||
|
||||
try:
|
||||
record = manager.add_user(qq_id, player_name, player_id, user_id, "[]", "[]")
|
||||
except sqlite3.IntegrityError as err:
|
||||
logger.warning(f"绑定撞 UNIQUE 约束:{err}")
|
||||
return "该 EA 账号已被绑定,请确认绑定的 EAID"
|
||||
logger.info(f"插入数据返回结果:{record}")
|
||||
if record > 0:
|
||||
return f"您已经成功绑定至: {player_name}"
|
||||
return "绑定失败,请稍后再试"
|
||||
|
||||
|
||||
async def unbind(qq_id: str) -> str:
|
||||
manager = UserManager()
|
||||
user_record = manager.get_user_by_qq(qq_id)
|
||||
if not user_record:
|
||||
return "未查询到绑定记录"
|
||||
info = await get_player_info_by_ea_id(
|
||||
user_record["ea_player_id"], user_record["ea_user_id"], _PLATFORM
|
||||
)
|
||||
name = player_display_name(info, user_record["ea_player_name"])
|
||||
rows = manager.delete_user_by_qq(qq_id)
|
||||
if rows > 0:
|
||||
return f"您已经与: {name} 成功解除绑定,如果你需要重新绑定请发送 修改绑定 EAID "
|
||||
return "解绑失败,请稍后再试"
|
||||
|
||||
|
||||
async def update_bind(qq_id: str, player_name: str) -> str:
|
||||
manager = UserManager()
|
||||
user_record = manager.get_user_by_qq(qq_id)
|
||||
if not user_record:
|
||||
return (
|
||||
f"未查询到绑定记录: {player_name},如果需要绑定,"
|
||||
f"请@机器人并发送 绑定 {player_name} "
|
||||
)
|
||||
|
||||
player_name = (player_name or "").strip()
|
||||
if not player_name:
|
||||
return "请提供要换绑的 EAID,例如:修改绑定 YourEAID"
|
||||
|
||||
user_info = await get_player_info_by_name(player_name, _PLATFORM)
|
||||
if "errors" in user_info:
|
||||
return "未找到玩家,请检查是否拼写正确"
|
||||
player_id = user_info["personaId"]
|
||||
user_id = user_info["userId"]
|
||||
player_name = player_display_name(user_info, player_name)
|
||||
logger.info(f"QQ号:{qq_id},EA双ID:{player_id}-{user_id}")
|
||||
|
||||
# 与 bind 相同的占用预检;绑给同一个 QQ 时视为无操作继续
|
||||
bind_record = manager.get_user_by_ea_id(user_id)
|
||||
if bind_record and str(bind_record["qq_id"]) != str(qq_id):
|
||||
return (
|
||||
f"您的EA账号 {bind_record['ea_player_name']} 已经绑定到: "
|
||||
f"{bind_record['qq_id']},请您确认绑定的EAID"
|
||||
)
|
||||
|
||||
try:
|
||||
record = manager.update_user(qq_id, player_name, player_id, user_id, "[]", "[]")
|
||||
except sqlite3.IntegrityError as err:
|
||||
logger.warning(f"换绑撞 UNIQUE 约束:{err}")
|
||||
return "该 EA 账号已被绑定,请确认绑定的 EAID"
|
||||
logger.info(f"修改数据返回结果:{record}")
|
||||
if record > 0:
|
||||
return f"您已经成功从:{user_record['ea_player_name']}修改绑定至: {player_name}"
|
||||
return "修改绑定失败,请稍后再试"
|
||||
Reference in new issue
Block a user