From b68ba1ff80797ba28820fbd584241a984fb5031e Mon Sep 17 00:00:00 2001 From: CMHopeSunshine <277073121@qq.com> Date: Wed, 19 Oct 2022 10:36:18 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E4=B8=8E?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E4=BD=BF=E7=94=A8=E4=BA=86`Tortoise-orm`?= =?UTF-8?q?=E7=9A=84=E6=8F=92=E4=BB=B6=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LittlePaimon/database/__init__.py | 133 ++++++++++++------- LittlePaimon/manager/plugin_manager/model.py | 2 - LittlePaimon/plugins/Paimon_Bind/__init__.py | 2 +- LittlePaimon/utils/api.py | 7 +- 4 files changed, 92 insertions(+), 52 deletions(-) diff --git a/LittlePaimon/database/__init__.py b/LittlePaimon/database/__init__.py index 65624b8..88c6b50 100644 --- a/LittlePaimon/database/__init__.py +++ b/LittlePaimon/database/__init__.py @@ -1,54 +1,89 @@ +from pathlib import Path +from typing import List, Optional, Union + from tortoise import Tortoise from nonebot.log import logger from LittlePaimon.config import GENSHIN_DB_PATH, SUB_DB_PATH, GENSHIN_VOICE_DB_PATH, MANAGER_DB_PATH, LEARNING_CHAT_DB_PATH -DATABASE = { - "connections": { - "genshin": { - "engine": "tortoise.backends.sqlite", - "credentials": {"file_path": GENSHIN_DB_PATH}, - }, - "subscription": { - "engine": "tortoise.backends.sqlite", - "credentials": {"file_path": SUB_DB_PATH}, - }, - 'genshin_voice': { - "engine": "tortoise.backends.sqlite", - "credentials": {"file_path": GENSHIN_VOICE_DB_PATH}, - }, - 'manager': { - "engine": "tortoise.backends.sqlite", - "credentials": {"file_path": MANAGER_DB_PATH}, - }, - 'learning_chat': { - "engine": "tortoise.backends.sqlite", - "credentials": {"file_path": LEARNING_CHAT_DB_PATH}, - }, +# DATABASE = { +# "connections": { +# "genshin": { +# "engine": "tortoise.backends.sqlite", +# "credentials": {"file_path": GENSHIN_DB_PATH}, +# }, +# "subscription": { +# "engine": "tortoise.backends.sqlite", +# "credentials": {"file_path": SUB_DB_PATH}, +# }, +# 'genshin_voice': { +# "engine": "tortoise.backends.sqlite", +# "credentials": {"file_path": GENSHIN_VOICE_DB_PATH}, +# }, +# 'manager': { +# "engine": "tortoise.backends.sqlite", +# "credentials": {"file_path": MANAGER_DB_PATH}, +# }, +# 'learning_chat': { +# "engine": "tortoise.backends.sqlite", +# "credentials": {"file_path": LEARNING_CHAT_DB_PATH}, +# }, +# }, +# "apps": { +# "genshin": { +# "models": ['LittlePaimon.database.models.player_info', 'LittlePaimon.database.models.abyss_info', 'LittlePaimon.database.models.character', 'LittlePaimon.database.models.cookie'], +# "default_connection": "genshin", +# }, +# "subscription": { +# "models": ['LittlePaimon.database.models.subscription'], +# "default_connection": "subscription", +# }, +# "genshin_voice": { +# "models": ['LittlePaimon.database.models.genshin_voice'], +# "default_connection": "genshin_voice", +# }, +# "manager": { +# "models": ['LittlePaimon.database.models.manager'], +# "default_connection": "manager", +# }, +# "learning_chat": { +# "models": ['LittlePaimon.database.models.learning_chat'], +# "default_connection": "learning_chat", +# } +# }, +# } +DATABASE = [ + { + 'db_url': f'sqlite://{GENSHIN_DB_PATH}', + 'models': ['LittlePaimon.database.models.player_info', 'LittlePaimon.database.models.abyss_info', 'LittlePaimon.database.models.character', 'LittlePaimon.database.models.cookie'], }, - "apps": { - "genshin": { - "models": ['LittlePaimon.database.models.player_info', 'LittlePaimon.database.models.abyss_info', 'LittlePaimon.database.models.character', 'LittlePaimon.database.models.cookie'], - "default_connection": "genshin", - }, - "subscription": { - "models": ['LittlePaimon.database.models.subscription'], - "default_connection": "subscription", - }, - "genshin_voice": { - "models": ['LittlePaimon.database.models.genshin_voice'], - "default_connection": "genshin_voice", - }, - "manager": { - "models": ['LittlePaimon.database.models.manager'], - "default_connection": "manager", - }, - "learning_chat": { - "models": ['LittlePaimon.database.models.learning_chat'], - "default_connection": "learning_chat", - } + { + 'db_url': f'sqlite://{SUB_DB_PATH}', + 'models': ['LittlePaimon.database.models.subscription'], }, -} + { + 'db_url': f'sqlite://{GENSHIN_VOICE_DB_PATH}', + 'models': ['LittlePaimon.database.models.genshin_voice'], + }, + { + 'db_url': f'sqlite://{MANAGER_DB_PATH}', + 'models': ['LittlePaimon.database.models.manager'], + }, + { + 'db_url': f'sqlite://{LEARNING_CHAT_DB_PATH}', + 'models': ['LittlePaimon.database.models.learning_chat'], + }, +] + + +def register_database(db_path: Optional[Union[str, Path]], models: List[Union[str, Path]]): + """ + 注册数据库 + """ + DATABASE.append({ + 'db_url': f'sqlite://{db_path}', + 'models': models, + }) async def connect(): @@ -56,11 +91,15 @@ async def connect(): 建立数据库连接 """ try: - await Tortoise.init(DATABASE) - await Tortoise.generate_schemas() + for db in DATABASE: + await Tortoise.init( + db_url=db['db_url'], + modules={'models': db['models']}, + ) + await Tortoise.generate_schemas() logger.opt(colors=True).success("[数据库]连接成功") except Exception as e: - logger.opt(colors=True).warning("[数据库]连接失败:{e}") + logger.opt(colors=True).warning(f"[数据库]连接失败:{e}") raise e diff --git a/LittlePaimon/manager/plugin_manager/model.py b/LittlePaimon/manager/plugin_manager/model.py index bff7a9c..865bb51 100644 --- a/LittlePaimon/manager/plugin_manager/model.py +++ b/LittlePaimon/manager/plugin_manager/model.py @@ -56,8 +56,6 @@ class Config(BaseModel): ssbq_end: int = Field(6, alias='实时便签停止检查结束时间') ssbq_check: int = Field(16, alias='实时便签检查间隔') - AI_voice_cooldown: int = Field(10, alias='原神语音合成冷却') - ys_auto_update: int = Field(24, alias='ys自动更新小时') ysa_auto_update: int = Field(24, alias='ysa自动更新小时') ysd_auto_update: int = Field(6, alias='ysd自动更新小时') diff --git a/LittlePaimon/plugins/Paimon_Bind/__init__.py b/LittlePaimon/plugins/Paimon_Bind/__init__.py index 595857a..1038998 100644 --- a/LittlePaimon/plugins/Paimon_Bind/__init__.py +++ b/LittlePaimon/plugins/Paimon_Bind/__init__.py @@ -196,7 +196,7 @@ async def _(event: MessageEvent): @pck.handle() async def _(event: MessageEvent, msg: Message = CommandArg()): if msg := msg.extract_plain_text().strip(): - if await get_bind_game_info(msg): + if await get_bind_game_info(msg, True): ck = await PublicCookie.create(cookie=msg) logger.info('原神Cookie', f'{ck.id}号公共cookie', None, '添加成功', True) await pck.finish(f'成功添加{ck.id}号公共cookie', at_sender=True) diff --git a/LittlePaimon/utils/api.py b/LittlePaimon/utils/api.py index f7a7684..3bc8c67 100644 --- a/LittlePaimon/utils/api.py +++ b/LittlePaimon/utils/api.py @@ -213,14 +213,15 @@ async def get_cookie(user_id: str, uid: str, check: bool = True, own: bool = Fal return None, '' -async def get_bind_game_info(cookie) -> Optional[dict]: +async def get_bind_game_info(cookie: str, use_for_public: bool = False) -> Optional[dict]: """ 通过cookie,获取米游社绑定的原神游戏信息 :param cookie: cookie + :param use_for_public: 是否用于公共cookie :return: 原神信息 """ if mys_id := re.search(r'(account_id|ltuid|stuid|login_uid)=(\d*)', cookie): - mys_id = mys_id.group(2) + mys_id = mys_id[2] data = (await aiorequests.get(url=GAME_RECORD_API, headers=mihoyo_headers(cookie, f'uid={mys_id}'), params={ @@ -231,6 +232,8 @@ async def get_bind_game_info(cookie) -> Optional[dict]: if game_data['game_id'] == 2: game_data['mys_id'] = mys_id return game_data + if use_for_public: + return {'game_biz': 'hk4e_cn', 'mys_id': mys_id} return None