1
0
forked from bot/app

fix: 插件列表显示错误问题

This commit is contained in:
2024-03-21 14:52:02 +08:00
parent 933979ceaa
commit 2711d8844b
18 changed files with 179 additions and 84 deletions

View File

@ -88,12 +88,11 @@ class Database(BaseORMAdapter):
}
DEFAULT_TYPE = {
'TEXT': '',
'INTEGER': 0,
'REAL': 0.0
'TEXT' : '',
'INTEGER': 0,
'REAL' : 0.0
}
FOREIGNID = 'FOREIGNID'
JSON = 'JSON'
ID = '$ID'
@ -115,6 +114,7 @@ class Database(BaseORMAdapter):
Returns:
"""
table_name = ''
for model in args:
model: type(LiteModel)
# 检测并创建表若模型未定义id字段则使用自增主键有定义的话使用id字段且id有可能为字符串
@ -161,6 +161,7 @@ class Database(BaseORMAdapter):
self.cursor.execute(f'ALTER TABLE {table_name} DROP COLUMN {field}')
self.conn.commit()
nonebot.logger.success(f'Table {table_name} migrated successfully')
def save(self, *models: LiteModel) -> int | tuple:
"""存储数据检查id字段如果有id字段则更新没有则插入
@ -171,9 +172,12 @@ class Database(BaseORMAdapter):
Returns:
id: 数据id如果有多个数据则返回id元组
"""
ids = []
for model in models:
table_name = model.__class__.__name__
if not self._detect_for_table(table_name):
raise ValueError(f'{table_name}不存在,请先迁移')
key_list = []
value_list = []
# 处理外键,添加前缀'$IDFieldName'
@ -227,6 +231,17 @@ class Database(BaseORMAdapter):
return json.dumps(return_data)
def _detect_for_table(self, table_name: str) -> bool:
"""在进行增删查改前检测表是否存在
Args:
table_name: 表名
Returns:
"""
return self.cursor.execute(f'SELECT * FROM sqlite_master WHERE type = "table" AND name = ?', (table_name,)).fetchone()
def first(self, model: type(LiteModel), conditions, *args, default: Any = None) -> LiteModel | None:
"""查询第一条数据
@ -239,6 +254,10 @@ class Database(BaseORMAdapter):
Returns: 数据
"""
table_name = model.__name__
if not self._detect_for_table(table_name):
return default
self.cursor.execute(f'SELECT * FROM {table_name} WHERE {conditions}', args)
if row_data := self.cursor.fetchone():
data = dict(row_data)
@ -258,7 +277,8 @@ class Database(BaseORMAdapter):
"""
table_name = model.__name__
# 检测表是否存在否则返回None
if not self._detect_for_table(table_name):
return default
if conditions:
self.cursor.execute(f'SELECT * FROM {table_name} WHERE {conditions}', args)
@ -281,27 +301,13 @@ class Database(BaseORMAdapter):
"""
table_name = model.__name__
if not self._detect_for_table(table_name):
return
nonebot.logger.debug(f'DELETE FROM {table_name} WHERE {conditions}')
self.cursor.execute(f'DELETE FROM {table_name} WHERE {conditions}', args)
self.conn.commit()
def update(self, model: type(LiteModel), conditions: str, *args, operation: str):
"""更新数据
Args:
model: 模型
conditions: 查询条件
*args: 参数化查询条件参数
operation: 更新操作
Returns:
"""
table_name = model.__name__
nonebot.logger.debug(f'UPDATE {table_name} SET {operation} WHERE {conditions}')
self.cursor.execute(f'UPDATE {table_name} SET {operation} WHERE {conditions}', args)
self.conn.commit()
def convert_to_dict(self, data: dict) -> dict:
"""将json字符串转换为字典
@ -318,7 +324,7 @@ class Database(BaseORMAdapter):
for k, v in d.items():
if k.startswith(self.FOREIGNID):
new_d[k.replace(self.FOREIGNID, '')] = load(
dict(self.cursor.execute(f'SELECT * FROM {v.split(":",2)[1]} WHERE id = ?', (v.split(":",2)[2],)).fetchone()))
dict(self.cursor.execute(f'SELECT * FROM {v.split(":", 2)[1]} WHERE id = ?', (v.split(":", 2)[2],)).fetchone()))
elif k.startswith(self.JSON):
new_d[k.replace(self.JSON, '')] = load(json.loads(v))
else:
@ -327,11 +333,11 @@ class Database(BaseORMAdapter):
new_d = []
for i, v in enumerate(d):
if isinstance(v, str) and v.startswith(self.ID):
new_d.append(load(dict(self.cursor.execute(f'SELECT * FROM {v.split(":",2)[1]} WHERE id = ?', (v.split(":",2)[2],)).fetchone())))
new_d.append(load(dict(self.cursor.execute(f'SELECT * FROM {v.split(":", 2)[1]} WHERE id = ?', (v.split(":", 2)[2],)).fetchone())))
elif isinstance(v, BaseIterable):
new_d.append(load(v))
else:
new_d = d
return new_d
return load(data)
return load(data)

View File

@ -14,4 +14,10 @@ class User(LiteModel):
lang: str = "en"
user_db.auto_migrate(User)
class InstalledPlugin(LiteModel):
module_name: str
def auto_migrate():
user_db.auto_migrate(User)
plugin_db.auto_migrate(InstalledPlugin)

View File

@ -9,6 +9,7 @@ from typing_extensions import Any
import nonebot
from src.utils.config import config
from src.utils.data_manager import User, user_db
_default_lang_code = "en"
@ -133,7 +134,10 @@ def get_user_lang(user_id: str) -> Language:
"""
获取用户的语言代码
"""
user = user_db.first(User, "user_id = ?", user_id, default=User(user_id=user_id, username="Unknown", lang="en"))
user = user_db.first(User, "user_id = ?", user_id, default=User(
user_id=user_id,
username="Unknown",
lang=config.get("default_language", get_system_lang_code())))
return Language(user.lang)

7
src/utils/permission.py Normal file
View File

@ -0,0 +1,7 @@
from nonebot.adapters.onebot import v11
from src.utils.typing import T_GroupMessageEvent, T_MessageEvent
GROUP_ADMIN = v11.GROUP_ADMIN
GROUP_OWNER = v11.GROUP_OWNER