mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 06:12:53 +08:00
旧词条提供图片迁移
This commit is contained in:
parent
3cbd899daa
commit
a36e8145a8
@ -279,6 +279,10 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能
|
|||||||
|
|
||||||
## 更新
|
## 更新
|
||||||
|
|
||||||
|
### 2022/9/4
|
||||||
|
|
||||||
|
* 旧词条提供图片迁移(需要重新获取old_model文件,并将数据库中user_qq为0的数据删除)
|
||||||
|
|
||||||
### 2022/9/3
|
### 2022/9/3
|
||||||
|
|
||||||
* 原神玩家查询增加须弥地区 [@pull/1053](https://github.com/HibiKier/zhenxun_bot/pull/1053)
|
* 原神玩家查询增加须弥地区 [@pull/1053](https://github.com/HibiKier/zhenxun_bot/pull/1053)
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import random
|
||||||
|
import time
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from nonebot.adapters.onebot.v11 import Message, MessageSegment
|
from nonebot.adapters.onebot.v11 import Message, MessageSegment
|
||||||
@ -189,6 +191,9 @@ async def _():
|
|||||||
logger.info('开始迁移词条 纯文本 数据')
|
logger.info('开始迁移词条 纯文本 数据')
|
||||||
try:
|
try:
|
||||||
word_list = await OldWordBank.get_all()
|
word_list = await OldWordBank.get_all()
|
||||||
|
new_answer_path = Path() / 'data' / 'word_bank' / 'answer'
|
||||||
|
new_problem_path = Path() / 'data' / 'word_bank' / 'problem'
|
||||||
|
new_answer_path.mkdir(exist_ok=True, parents=True)
|
||||||
for word in word_list:
|
for word in word_list:
|
||||||
problem: str = word.problem
|
problem: str = word.problem
|
||||||
user_id = word.user_qq
|
user_id = word.user_qq
|
||||||
@ -199,6 +204,25 @@ async def _():
|
|||||||
if '[CQ' not in problem and '[CQ' not in answer and '[_to_me' not in problem:
|
if '[CQ' not in problem and '[CQ' not in answer and '[_to_me' not in problem:
|
||||||
if not format_:
|
if not format_:
|
||||||
await WordBank.add_problem_answer(user_id, group_id, 1, 0, problem, answer)
|
await WordBank.add_problem_answer(user_id, group_id, 1, 0, problem, answer)
|
||||||
|
else:
|
||||||
|
placeholder = []
|
||||||
|
for m in format_.split('<format>'):
|
||||||
|
x = m.split('<_s>')
|
||||||
|
if x[0]:
|
||||||
|
idx, file_name = x[0], x[1]
|
||||||
|
if 'jpg' in file_name:
|
||||||
|
answer = answer.replace(f'[__placeholder_{idx}]', f'[image:placeholder_{idx}]')
|
||||||
|
file = Path() / 'data' / 'word_bank' / f'{group_id}' / file_name
|
||||||
|
rand = int(time.time()) + random.randint(1, 100000)
|
||||||
|
if file.exists():
|
||||||
|
new_file = new_answer_path / f'{group_id}' / f'{user_id}_{rand}.jpg'
|
||||||
|
new_file.parent.mkdir(exist_ok=True, parents=True)
|
||||||
|
with open(file, 'rb') as rb:
|
||||||
|
with open(new_file, 'wb') as wb:
|
||||||
|
wb.write(rb.read())
|
||||||
|
# file.rename(new_file)
|
||||||
|
placeholder.append(f'answer/{group_id}/{user_id}_{rand}.jpg')
|
||||||
|
await WordBank._move(user_id, group_id, problem, answer, ",".join(placeholder))
|
||||||
await WordBank.add_problem_answer(0, 0, 999, 0, '_[OK', '_[OK')
|
await WordBank.add_problem_answer(0, 0, 999, 0, '_[OK', '_[OK')
|
||||||
logger.info('词条 纯文本 数据迁移完成')
|
logger.info('词条 纯文本 数据迁移完成')
|
||||||
(Path() / 'plugins' / 'word_bank' / '_old_model.py').unlink()
|
(Path() / 'plugins' / 'word_bank' / '_old_model.py').unlink()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ class WordBank(db.Model):
|
|||||||
user_id: Optional[int],
|
user_id: Optional[int],
|
||||||
group_id: Optional[int],
|
group_id: Optional[int],
|
||||||
problem: str,
|
problem: str,
|
||||||
|
answer: Optional[str],
|
||||||
word_scope: Optional[int] = None,
|
word_scope: Optional[int] = None,
|
||||||
word_type: Optional[int] = None,
|
word_type: Optional[int] = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
@ -58,6 +59,7 @@ class WordBank(db.Model):
|
|||||||
:param user_id: 用户id
|
:param user_id: 用户id
|
||||||
:param group_id: 群号
|
:param group_id: 群号
|
||||||
:param problem: 问题
|
:param problem: 问题
|
||||||
|
:param answer: 回答
|
||||||
:param word_scope: 词条范围
|
:param word_scope: 词条范围
|
||||||
:param word_type: 词条类型
|
:param word_type: 词条类型
|
||||||
"""
|
"""
|
||||||
@ -66,6 +68,8 @@ class WordBank(db.Model):
|
|||||||
query = query.where(cls.user_qq == user_id)
|
query = query.where(cls.user_qq == user_id)
|
||||||
if group_id:
|
if group_id:
|
||||||
query = query.where(cls.group_id == group_id)
|
query = query.where(cls.group_id == group_id)
|
||||||
|
if answer:
|
||||||
|
query = query.where(cls.answer == answer)
|
||||||
if word_type:
|
if word_type:
|
||||||
query = query.where(cls.word_type == word_type)
|
query = query.where(cls.word_type == word_type)
|
||||||
if word_scope:
|
if word_scope:
|
||||||
@ -105,19 +109,20 @@ class WordBank(db.Model):
|
|||||||
problem = str(get_img_hash(_file))
|
problem = str(get_img_hash(_file))
|
||||||
image_path = f"problem/{group_id}/{user_id}_{int(time.time())}.jpg"
|
image_path = f"problem/{group_id}/{user_id}_{int(time.time())}.jpg"
|
||||||
answer, _list = await cls._answer2format(answer, user_id, group_id)
|
answer, _list = await cls._answer2format(answer, user_id, group_id)
|
||||||
await cls.create(
|
if not await cls.exists(user_id, group_id, problem, answer, word_scope, word_type):
|
||||||
user_qq=user_id,
|
await cls.create(
|
||||||
group_id=group_id,
|
user_qq=user_id,
|
||||||
word_scope=word_scope,
|
group_id=group_id,
|
||||||
word_type=word_type,
|
word_scope=word_scope,
|
||||||
status=True,
|
word_type=word_type,
|
||||||
problem=problem,
|
status=True,
|
||||||
answer=answer,
|
problem=problem,
|
||||||
image_path=image_path,
|
answer=answer,
|
||||||
placeholder=",".join(_list),
|
image_path=image_path,
|
||||||
create_time=datetime.now().replace(microsecond=0),
|
placeholder=",".join(_list),
|
||||||
update_time=datetime.now().replace(microsecond=0),
|
create_time=datetime.now().replace(microsecond=0),
|
||||||
)
|
update_time=datetime.now().replace(microsecond=0),
|
||||||
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def _answer2format(
|
async def _answer2format(
|
||||||
@ -479,3 +484,40 @@ class WordBank(db.Model):
|
|||||||
problem_list.append(problem)
|
problem_list.append(problem)
|
||||||
_tmp.append(q.problem)
|
_tmp.append(q.problem)
|
||||||
return problem_list
|
return problem_list
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def _move(
|
||||||
|
cls,
|
||||||
|
user_id: int,
|
||||||
|
group_id: Optional[int],
|
||||||
|
problem: Union[str, Message],
|
||||||
|
answer: Union[str, Message],
|
||||||
|
placeholder: str,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
说明:
|
||||||
|
旧词条图片移动方法
|
||||||
|
参数:
|
||||||
|
:param user_id: 用户id
|
||||||
|
:param group_id: 群号
|
||||||
|
:param problem: 问题
|
||||||
|
:param answer: 回答
|
||||||
|
:param placeholder: 占位符
|
||||||
|
"""
|
||||||
|
word_scope = 0
|
||||||
|
word_type = 0
|
||||||
|
# 对图片做额外处理
|
||||||
|
if not await cls.exists(user_id, group_id, problem, answer, word_scope, word_type):
|
||||||
|
await cls.create(
|
||||||
|
user_qq=user_id,
|
||||||
|
group_id=group_id,
|
||||||
|
word_scope=word_scope,
|
||||||
|
word_type=word_type,
|
||||||
|
status=True,
|
||||||
|
problem=problem,
|
||||||
|
answer=answer,
|
||||||
|
image_path=None,
|
||||||
|
placeholder=placeholder,
|
||||||
|
create_time=datetime.now().replace(microsecond=0),
|
||||||
|
update_time=datetime.now().replace(microsecond=0),
|
||||||
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user