mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
补全注释SCRIPT中的sql语句
This commit is contained in:
parent
bdcdf9a9a2
commit
198386e500
@ -331,6 +331,11 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能
|
|||||||
|
|
||||||
## 更新
|
## 更新
|
||||||
|
|
||||||
|
### 2023/3/28
|
||||||
|
|
||||||
|
* 补全注释`SCRIPT`中的sql语句
|
||||||
|
* 罕见物品更新时会收录所有包含该物品的箱子,可以通过`更新皮肤ALL1 -S`强制更新所有罕见物品所属箱子
|
||||||
|
|
||||||
### 2023/3/27
|
### 2023/3/27
|
||||||
|
|
||||||
* 优化开箱更新
|
* 优化开箱更新
|
||||||
|
|||||||
@ -58,91 +58,6 @@ async def update_city():
|
|||||||
logger.error(f"自动城市列表未知错误", e=e)
|
logger.error(f"自动城市列表未知错误", e=e)
|
||||||
|
|
||||||
|
|
||||||
# @driver.on_startup
|
|
||||||
# async def _():
|
|
||||||
# """
|
|
||||||
# 数据库表结构变换
|
|
||||||
# """
|
|
||||||
# _flag = []
|
|
||||||
# sql_str = [
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE group_info ADD group_flag Integer NOT NULL DEFAULT 0;",
|
|
||||||
# "group_info",
|
|
||||||
# ), # group_info表添加一个group_flag
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE bag_users rename belonging_group To group_id;",
|
|
||||||
# "bag_users",
|
|
||||||
# ), # 将 bag_users 的 belonging_group 改为 group_id
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE group_info_users rename belonging_group To group_id;",
|
|
||||||
# "group_info_users",
|
|
||||||
# ),
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE sign_group_users rename belonging_group To group_id;",
|
|
||||||
# "sign_group_users",
|
|
||||||
# ),
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE open_cases_users rename belonging_group To group_id;",
|
|
||||||
# "open_cases_users",
|
|
||||||
# ),
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE bag_users ADD property json NOT NULL DEFAULT '{}';",
|
|
||||||
# "bag_users",
|
|
||||||
# ), # bag_users 新增字段 property 替代 props
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE genshin ADD auto_sign_time timestamp with time zone;",
|
|
||||||
# "genshin",
|
|
||||||
# ), # 新增原神自动签到字段
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE genshin ADD resin_remind boolean DEFAULT False;",
|
|
||||||
# "genshin",
|
|
||||||
# ), # 新增原神自动签到字段
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE genshin ADD resin_recovery_time timestamp with time zone;",
|
|
||||||
# "genshin",
|
|
||||||
# ), # 新增原神自动签到字段
|
|
||||||
# ("ALTER TABLE genshin ADD bind_group Integer;", "genshin"), # 新增原神群号绑定字段
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE genshin ADD login_ticket VARCHAR(255) DEFAULT '';",
|
|
||||||
# "genshin",
|
|
||||||
# ), # 新增米游社login_ticket绑定字段
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE genshin ADD stuid VARCHAR(255) DEFAULT '';",
|
|
||||||
# "genshin",
|
|
||||||
# ), # 新增米游社stuid绑定字段
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE genshin ADD stoken VARCHAR(255) DEFAULT '';",
|
|
||||||
# "genshin",
|
|
||||||
# ), # 新增米游社stoken绑定字段
|
|
||||||
# ("ALTER TABLE chat_history ADD plain_text Text;", "chat_history"), # 新增纯文本
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE goods_info ADD daily_limit Integer DEFAULT 0;",
|
|
||||||
# "goods_info",
|
|
||||||
# ), # 新增纯文本
|
|
||||||
# (
|
|
||||||
# "ALTER TABLE goods_info ADD daily_purchase_limit Json DEFAULT '{}';",
|
|
||||||
# "goods_info",
|
|
||||||
# ), # 新增纯文本
|
|
||||||
# ]
|
|
||||||
# for sql in sql_str + GDict.get("run_sql", []):
|
|
||||||
# try:
|
|
||||||
# if isinstance(sql, str):
|
|
||||||
# flag = f"{random.randint(1, 10000)}"
|
|
||||||
# else:
|
|
||||||
# flag = sql[1]
|
|
||||||
# sql = sql[0]
|
|
||||||
# query = db.text(sql)
|
|
||||||
# await db.first(query)
|
|
||||||
# logger.info(f"完成sql操作:{sql}")
|
|
||||||
# _flag.append(flag)
|
|
||||||
# except (DuplicateColumnError, UndefinedColumnError):
|
|
||||||
# pass
|
|
||||||
# except PostgresSyntaxError:
|
|
||||||
# logger.error(f"语法错误:执行sql失败:{sql}")
|
|
||||||
# bag_user 将文本转为字典格式
|
|
||||||
# await __database_script(_flag)
|
|
||||||
|
|
||||||
|
|
||||||
@driver.on_bot_connect
|
@driver.on_bot_connect
|
||||||
async def _(bot: Bot):
|
async def _(bot: Bot):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -10,11 +10,6 @@ from utils.utils import GDict, is_number
|
|||||||
|
|
||||||
icon_path = IMAGE_PATH / "shop_icon"
|
icon_path = IMAGE_PATH / "shop_icon"
|
||||||
|
|
||||||
|
|
||||||
GDict["run_sql"].append("ALTER TABLE goods_info ADD is_passive boolean DEFAULT False;")
|
|
||||||
GDict["run_sql"].append("ALTER TABLE goods_info ADD icon VARCHAR(255);")
|
|
||||||
|
|
||||||
|
|
||||||
# 创建商店界面
|
# 创建商店界面
|
||||||
async def create_shop_help() -> str:
|
async def create_shop_help() -> str:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -194,3 +194,12 @@ class GoodsInfo(Model):
|
|||||||
goods.daily_limit - goods.daily_purchase_limit[group_id][user_id],
|
goods.daily_limit - goods.daily_purchase_limit[group_id][user_id],
|
||||||
)
|
)
|
||||||
return False, 0
|
return False, 0
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _run_script(cls):
|
||||||
|
return [
|
||||||
|
"ALTER TABLE goods_info ADD daily_limit Integer DEFAULT 0;",
|
||||||
|
"ALTER TABLE goods_info ADD daily_purchase_limit Json DEFAULT '{}';",
|
||||||
|
"ALTER TABLE goods_info ADD is_passive boolean DEFAULT False;",
|
||||||
|
"ALTER TABLE goods_info ADD icon VARCHAR(255);",
|
||||||
|
]
|
||||||
|
|||||||
@ -22,3 +22,9 @@ class GroupInfo(Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
table = "group_info"
|
table = "group_info"
|
||||||
table_description = "群聊信息表"
|
table_description = "群聊信息表"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _run_script(cls):
|
||||||
|
return [
|
||||||
|
"ALTER TABLE group_info ADD group_flag Integer NOT NULL DEFAULT 0;" # group_info表添加一个group_flag
|
||||||
|
]
|
||||||
|
|||||||
@ -100,7 +100,7 @@ class Genshin(Model):
|
|||||||
"ALTER TABLE genshin ADD auto_sign_time timestamp with time zone;",
|
"ALTER TABLE genshin ADD auto_sign_time timestamp with time zone;",
|
||||||
"ALTER TABLE genshin ADD resin_remind boolean DEFAULT False;",
|
"ALTER TABLE genshin ADD resin_remind boolean DEFAULT False;",
|
||||||
"ALTER TABLE genshin ADD resin_recovery_time timestamp with time zone;",
|
"ALTER TABLE genshin ADD resin_recovery_time timestamp with time zone;",
|
||||||
"ALTER TABLE genshin ADD login_ticket VARCHAR(255) DEFAULT '';"
|
"ALTER TABLE genshin ADD login_ticket VARCHAR(255) DEFAULT '';",
|
||||||
"ALTER TABLE genshin ADD stuid VARCHAR(255) DEFAULT '';"
|
"ALTER TABLE genshin ADD stuid VARCHAR(255) DEFAULT '';",
|
||||||
"ALTER TABLE genshin ADD stoken VARCHAR(255) DEFAULT '';",
|
"ALTER TABLE genshin ADD stoken VARCHAR(255) DEFAULT '';",
|
||||||
]
|
]
|
||||||
|
|||||||
@ -58,8 +58,9 @@ usage:
|
|||||||
更新皮肤指令
|
更新皮肤指令
|
||||||
重置开箱: 重置今日开箱所有次数
|
重置开箱: 重置今日开箱所有次数
|
||||||
指令:
|
指令:
|
||||||
更新武器箱 ?[武器箱]
|
更新武器箱 ?[武器箱/ALL]
|
||||||
更新皮肤 ?[刀具名称]
|
更新皮肤 ?[名称/ALL1]
|
||||||
|
更新皮肤 ?[名称/ALL1] -S: (必定更新罕见皮肤所属箱子)
|
||||||
* 不指定武器箱时则全部更新 *
|
* 不指定武器箱时则全部更新 *
|
||||||
* 过多的爬取会导致账号API被封 *
|
* 过多的爬取会导致账号API被封 *
|
||||||
""".strip()
|
""".strip()
|
||||||
@ -202,6 +203,8 @@ async def _(
|
|||||||
@update_case.handle()
|
@update_case.handle()
|
||||||
async def _(event: MessageEvent, arg: Message = CommandArg(), cmd: str = OneCommand()):
|
async def _(event: MessageEvent, arg: Message = CommandArg(), cmd: str = OneCommand()):
|
||||||
msg = arg.extract_plain_text().strip()
|
msg = arg.extract_plain_text().strip()
|
||||||
|
is_update_case_name = "-S" in msg
|
||||||
|
msg = msg.replace("-S", "").strip()
|
||||||
if not msg:
|
if not msg:
|
||||||
case_list = []
|
case_list = []
|
||||||
skin_list = []
|
skin_list = []
|
||||||
@ -227,7 +230,7 @@ async def _(event: MessageEvent, arg: Message = CommandArg(), cmd: str = OneComm
|
|||||||
await update_case.send(f"即将更新所有{type_}, 请稍等")
|
await update_case.send(f"即将更新所有{type_}, 请稍等")
|
||||||
for i, case_name in enumerate(case_list):
|
for i, case_name in enumerate(case_list):
|
||||||
try:
|
try:
|
||||||
info = await update_skin_data(case_name)
|
info = await update_skin_data(case_name, is_update_case_name)
|
||||||
if "请先登录" in info:
|
if "请先登录" in info:
|
||||||
await update_case.finish(f"未登录, 已停止更新...")
|
await update_case.finish(f"未登录, 已停止更新...")
|
||||||
rand = random.randint(300, 500)
|
rand = random.randint(300, 500)
|
||||||
@ -245,7 +248,7 @@ async def _(event: MessageEvent, arg: Message = CommandArg(), cmd: str = OneComm
|
|||||||
else:
|
else:
|
||||||
await update_case.send(f"开始{cmd}: {msg}, 请稍等")
|
await update_case.send(f"开始{cmd}: {msg}, 请稍等")
|
||||||
try:
|
try:
|
||||||
await update_case.send(await update_skin_data(msg), at_sender=True)
|
await update_case.send(await update_skin_data(msg, is_update_case_name), at_sender=True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"{cmd}: {msg}", e=e)
|
logger.error(f"{cmd}: {msg}", e=e)
|
||||||
await update_case.send(f"成功{cmd}: {msg} 发生错误: {type(e)}: {e}")
|
await update_case.send(f"成功{cmd}: {msg} 发生错误: {type(e)}: {e}")
|
||||||
|
|||||||
@ -46,15 +46,16 @@ class CaseManager:
|
|||||||
@classmethod
|
@classmethod
|
||||||
async def reload(cls):
|
async def reload(cls):
|
||||||
cls.CURRENT_CASES = (
|
cls.CURRENT_CASES = (
|
||||||
await BuffSkin.annotate().distinct().values_list("case_name", flat=True) # type: ignore
|
await BuffSkin.filter(case_name__not="未知武器箱").annotate().distinct().values_list("case_name", flat=True) # type: ignore
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def update_skin_data(name: str) -> str:
|
async def update_skin_data(name: str, is_update_case_name: bool) -> str:
|
||||||
"""更新箱子内皮肤数据
|
"""更新箱子内皮肤数据
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
name (str): 箱子名称
|
name (str): 箱子名称
|
||||||
|
is_update_case_name (bool): 是否必定更新所属箱子
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
_type_: _description_
|
_type_: _description_
|
||||||
@ -70,15 +71,8 @@ async def update_skin_data(name: str) -> str:
|
|||||||
if not session:
|
if not session:
|
||||||
return "BUFF COOKIE为空捏!"
|
return "BUFF COOKIE为空捏!"
|
||||||
weapon2case = {}
|
weapon2case = {}
|
||||||
if type_ == UpdateType.CASE:
|
if type_ == UpdateType.WEAPON_TYPE:
|
||||||
db_skin_id_list = [
|
|
||||||
skin.skin_id for skin in await BuffSkin.filter(case_name=name).all()
|
|
||||||
]
|
|
||||||
else:
|
|
||||||
db_data = await BuffSkin.filter(name__contains=name).all()
|
db_data = await BuffSkin.filter(name__contains=name).all()
|
||||||
db_skin_id_list = [
|
|
||||||
skin.skin_id for skin in await BuffSkin.filter(name__contains=name).all()
|
|
||||||
]
|
|
||||||
weapon2case = {
|
weapon2case = {
|
||||||
item.name + item.skin_name: item.case_name
|
item.name + item.skin_name: item.case_name
|
||||||
for item in db_data
|
for item in db_data
|
||||||
@ -99,6 +93,7 @@ async def update_skin_data(name: str) -> str:
|
|||||||
log_list = []
|
log_list = []
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
exists_id_list = []
|
exists_id_list = []
|
||||||
|
new_weapon2case = {}
|
||||||
for skin in data_list:
|
for skin in data_list:
|
||||||
if skin.skin_id in exists_id_list:
|
if skin.skin_id in exists_id_list:
|
||||||
continue
|
continue
|
||||||
@ -114,10 +109,14 @@ async def update_skin_data(name: str) -> str:
|
|||||||
name_ = skin.name + skin.skin_name + skin.abrasion
|
name_ = skin.name + skin.skin_name + skin.abrasion
|
||||||
skin.create_time = now
|
skin.create_time = now
|
||||||
skin.update_time = now
|
skin.update_time = now
|
||||||
if not skin.case_name:
|
if UpdateType.WEAPON_TYPE and not skin.case_name:
|
||||||
|
if is_update_case_name:
|
||||||
|
case_name = new_weapon2case.get(key)
|
||||||
|
else:
|
||||||
case_name = weapon2case.get(key)
|
case_name = weapon2case.get(key)
|
||||||
if not case_name:
|
if not case_name:
|
||||||
case_name = await get_skin_case(skin.skin_id)
|
if case_list := await get_skin_case(skin.skin_id):
|
||||||
|
case_name = ",".join(case_list)
|
||||||
rand = random.randint(10, 20)
|
rand = random.randint(10, 20)
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"获取 {skin.name} | {skin.skin_name} 皮肤所属武器箱: {case_name}, 访问随机等待时间: {rand}",
|
f"获取 {skin.name} | {skin.skin_name} 皮肤所属武器箱: {case_name}, 访问随机等待时间: {rand}",
|
||||||
@ -128,10 +127,11 @@ async def update_skin_data(name: str) -> str:
|
|||||||
case_name = "未知武器箱"
|
case_name = "未知武器箱"
|
||||||
else:
|
else:
|
||||||
weapon2case[key] = case_name
|
weapon2case[key] = case_name
|
||||||
|
new_weapon2case[key] = case_name
|
||||||
if skin.case_name == "反恐精英20周年":
|
if skin.case_name == "反恐精英20周年":
|
||||||
skin.case_name = "CS20"
|
skin.case_name = "CS20"
|
||||||
skin.case_name = case_name
|
skin.case_name = case_name
|
||||||
if skin.skin_id in db_skin_id_list:
|
if await BuffSkin.exists(skin_id=skin.skin_id):
|
||||||
update_list.append(skin)
|
update_list.append(skin)
|
||||||
else:
|
else:
|
||||||
create_list.append(skin)
|
create_list.append(skin)
|
||||||
@ -154,7 +154,8 @@ async def update_skin_data(name: str) -> str:
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
name_ = skin.name + "-" + skin.skin_name + "-" + skin.abrasion
|
name_ = skin.name + "-" + skin.skin_name + "-" + skin.abrasion
|
||||||
file_path = BASE_PATH / cn2py(skin.case_name) / f"{cn2py(name_)}.jpg"
|
for c_name_ in skin.case_name.split(","):
|
||||||
|
file_path = BASE_PATH / cn2py(c_name_) / f"{cn2py(name_)}.jpg"
|
||||||
if not file_path.exists():
|
if not file_path.exists():
|
||||||
logger.debug(f"下载皮肤 {name} 图片: {skin.img_url}...", "开箱更新")
|
logger.debug(f"下载皮肤 {name} 图片: {skin.img_url}...", "开箱更新")
|
||||||
await AsyncHttpx.download_file(skin.img_url, file_path)
|
await AsyncHttpx.download_file(skin.img_url, file_path)
|
||||||
@ -178,7 +179,7 @@ async def update_skin_data(name: str) -> str:
|
|||||||
if skin.skin_name not in skin_name_list:
|
if skin.skin_name not in skin_name_list:
|
||||||
skin_name_list.append(skin.skin_name)
|
skin_name_list.append(skin.skin_name)
|
||||||
db_data = await BuffSkin.filter(
|
db_data = await BuffSkin.filter(
|
||||||
case_name=name,
|
case_name__contains=name,
|
||||||
skin_name__in=skin_name_list,
|
skin_name__in=skin_name_list,
|
||||||
name__in=name_list,
|
name__in=name_list,
|
||||||
abrasion__in=abrasion_list,
|
abrasion__in=abrasion_list,
|
||||||
@ -498,7 +499,7 @@ def get_bk_image_size(
|
|||||||
return new_size
|
return new_size
|
||||||
|
|
||||||
|
|
||||||
async def get_skin_case(id_: str) -> Optional[str]:
|
async def get_skin_case(id_: str) -> Optional[List[str]]:
|
||||||
"""获取皮肤所在箱子
|
"""获取皮肤所在箱子
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -517,14 +518,19 @@ async def get_skin_case(id_: str) -> Optional[str]:
|
|||||||
)
|
)
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
text = response.text
|
text = response.text
|
||||||
if r := re.search('<meta name="description".*,(.*)武器箱.*?>', text):
|
if r := re.search('<meta name="description"(.*?)>', text):
|
||||||
return (
|
case_list = []
|
||||||
r.group(1)
|
for s in r.group(1).split(","):
|
||||||
.replace("”", "")
|
if "武器箱" in s:
|
||||||
|
case_list.append(
|
||||||
|
s.replace("”", "")
|
||||||
.replace("“", "")
|
.replace("“", "")
|
||||||
|
.replace('"', "")
|
||||||
|
.replace("'", "")
|
||||||
.replace("武器箱", "")
|
.replace("武器箱", "")
|
||||||
.replace(" ", "")
|
.replace(" ", "")
|
||||||
)
|
)
|
||||||
|
return case_list
|
||||||
else:
|
else:
|
||||||
logger.debug(f"访问皮肤所属武器箱异常 url: {url} code: {response.status_code}")
|
logger.debug(f"访问皮肤所属武器箱异常 url: {url} code: {response.status_code}")
|
||||||
return None
|
return None
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
from nonebot.utils import is_coroutine_callable
|
||||||
from tortoise import Tortoise, fields
|
from tortoise import Tortoise, fields
|
||||||
from tortoise.connection import connections
|
from tortoise.connection import connections
|
||||||
from tortoise.models import Model as Model_
|
from tortoise.models import Model as Model_
|
||||||
@ -57,8 +58,13 @@ async def init():
|
|||||||
sql_list = []
|
sql_list = []
|
||||||
for module, func in SCRIPT_METHOD:
|
for module, func in SCRIPT_METHOD:
|
||||||
try:
|
try:
|
||||||
if sql := await func():
|
if is_coroutine_callable(func):
|
||||||
|
sql = await func()
|
||||||
|
else:
|
||||||
|
sql = func()
|
||||||
|
if sql:
|
||||||
sql_list += sql
|
sql_list += sql
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"{module} 执行SCRIPT_METHOD方法出错...", e=e)
|
logger.debug(f"{module} 执行SCRIPT_METHOD方法出错...", e=e)
|
||||||
for sql in sql_list:
|
for sql in sql_list:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user