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