fix(task): bug修复

This commit is contained in:
WinterChimes 2025-06-29 20:26:00 +08:00
parent 3e698a6ae7
commit 5c0fe2b37a
5 changed files with 25 additions and 22 deletions

View File

@ -1,5 +1,6 @@
import os
import sqlite3
import threading
from logging import getLogger
from typing import Any, cast, Dict, List, Optional
from kotonebot.kaa import resources as res
@ -7,17 +8,30 @@ from kotonebot.kaa import resources as res
_db: sqlite3.Connection | None = None
_db_path = cast(str, res.__path__)[0] + '/game.db'
_db_dict = {}
logger = getLogger(__name__)
def _dict_factory(cursor, row):
"""将查询结果转换为字典格式"""
return {col[0]: row[idx] for idx, col in enumerate(cursor.description)}
def _ensure_db() -> sqlite3.Connection:
"""确保数据库连接已建立"""
global _db
if not _db:
_db = sqlite3.connect(_db_path)
_db.row_factory = _dict_factory
return _db
"""
确保数据库连接已建立
培育过程是新开线程不同线程的connection不能使用
# TODO 培育结束需要关闭connection
"""
global _db_dict
thread_id = threading.current_thread().ident
if thread_id not in _db_dict:
_db_dict[thread_id] = sqlite3.connect(_db_path)
_db_dict[thread_id].row_factory = _dict_factory
logger.info("Database connection established for thread: %s", thread_id)
return _db_dict[thread_id]
def select_many(query: str, *args) -> List[Dict[str, Any]]:
"""执行查询并返回多行结果,每行为字典格式"""

View File

@ -8,8 +8,6 @@ from kotonebot.kaa.db.constants import ExamEffectType
class SingleDeckConfig(ConfigBaseModel):
# 角色流派。目前只考虑ExamEffectType温存目前分全力温存和强气温存所以没有温存设置。
archetype: ExamEffectType
# 当可选卡不在设置中是否优先选择其中的一次性卡false会直接进行刷新
select_once_card_before_refresh: bool = True
# 核心卡,在商店页面会购买
core_cards: list[str] = []
# 高优先度卡

View File

@ -15,11 +15,9 @@ class GlobalIdolSetting:
self.need_update: bool = True
self.idol_archetype: ExamEffectType = ExamEffectType.good_impression
self.card_deck: dict = {}
self.select_once_card_before_refresh = True
def new_play(self):
self.need_update = True
self.select_once_card_before_refresh = True
self.card_deck.clear()
logger.info("New game, wait for update")
@ -53,7 +51,6 @@ class GlobalIdolSetting:
self.card_deck.update({card: CardPriority.medium for card in card_deck_config.medium_priority_cards})
self.card_deck.update({card: CardPriority.high for card in card_deck_config.high_priority_cards})
self.card_deck.update({card: CardPriority.core for card in card_deck_config.core_cards})
self.select_once_card_before_refresh = card_deck_config.select_once_card_before_refresh
def get_card_priority(self, card_id: str) -> CardPriority:
"""

View File

@ -2,7 +2,6 @@
"pre_built_deck": [
{
"archetype": "ProduceExamEffectType_ExamParameterBuff",
"select_once_card_before_refresh": false,
"core_cards": [
"p_card-01-act-3_049",
"p_card-01-men-3_006",
@ -46,7 +45,6 @@
},
{
"archetype": "ProduceExamEffectType_ExamLessonBuff",
"select_once_card_before_refresh": false,
"core_cards": [
"p_card-01-act-3_049",
"p_card-01-men-3_006",
@ -90,7 +88,6 @@
},
{
"archetype": "ProduceExamEffectType_ExamReview",
"select_once_card_before_refresh": false,
"core_cards": [
"p_card-02-act-3_050",
"p_card-02-men-3_002",
@ -132,7 +129,6 @@
},
{
"archetype": "ProduceExamEffectType_ExamCardPlayAggressive",
"select_once_card_before_refresh": false,
"core_cards": [
"p_card-02-men-3_002",
"p_card-02-men-3_040",
@ -169,7 +165,6 @@
},
{
"archetype": "ProduceExamEffectType_ExamConcentration",
"select_once_card_before_refresh": false,
"core_cards": [
"p_card-03-men-3_058",
"p_card-03-men-3_061"
@ -208,7 +203,6 @@
},
{
"archetype": "ProduceExamEffectType_ExamFullPower",
"select_once_card_before_refresh": false,
"core_cards": [
"p_card-03-men-2_075",
"p_card-03-men-3_058"

View File

@ -40,7 +40,7 @@ def select_skill_card():
skill_card_elements = extract_cards(img)
if skill_card_elements:
cards = [ActualCard.create_by(skill_card_element) for skill_card_element in skill_card_elements]
cards = sorted(cards, reverse=True)
cards = sorted(cards)
target_card = cards[0]
select_suggest = False
@ -49,7 +49,7 @@ def select_skill_card():
if try_refresh_skill_card(target_card.skill_card_element.rect):
it.wait()
continue
# 如果没刷新次数,尝试选取除外卡
# 如果没刷新次数,尝试选取除外卡,没有除外卡才选择推荐卡
if once_cards := [card for card in cards if card.lost()]:
target_card = once_cards[0]
else:
@ -57,10 +57,10 @@ def select_skill_card():
if select_suggest:
# 既没有刷新,也没有除外卡,选择推荐卡
card_rect = find_recommended_card_rect([card.skill_card_element.rect for card in cards])
logger.info(f"select recommended card")
logger.info(f"Select recommended card")
device.click(card_rect)
else:
logger.info(f"select {target_card.skill_card_element.skill_card.name}")
logger.info(f"Select {target_card.skill_card_element.skill_card.name}")
device.click(target_card.skill_card_element.rect)
it.wait()