mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-15 17:20:01 +08:00
Update word_bank_plus
This commit is contained in:
+31
-15
@@ -5,6 +5,7 @@ from pathlib import Path
|
||||
from configs.path_config import DATA_PATH
|
||||
import re
|
||||
import random
|
||||
from configs.config import Config
|
||||
|
||||
|
||||
class WordBank(db.Model):
|
||||
@@ -83,7 +84,7 @@ class WordBank(db.Model):
|
||||
for x, y in format_:
|
||||
_str += f"{x}<_s>{y}<format>"
|
||||
return await cls._problem_answer_handle(
|
||||
user_id, group_id, problem, "update", answer=answer,index=index, format_=_str
|
||||
user_id, group_id, problem, "update", answer=answer, index=index, format_=_str
|
||||
)
|
||||
|
||||
@classmethod
|
||||
@@ -113,7 +114,8 @@ class WordBank(db.Model):
|
||||
q = await cls.query.where(
|
||||
(cls.group_id == group_id) & (cls.problem == problem)
|
||||
).gino.all()
|
||||
return [x.answer for x in q] if q else None
|
||||
|
||||
return [(x.answer, x.format) for x in q] if q else None
|
||||
|
||||
@classmethod
|
||||
async def get_group_all_problem(cls, group_id: int) -> List[str]:
|
||||
@@ -154,9 +156,28 @@ class WordBank(db.Model):
|
||||
return x
|
||||
return None
|
||||
else:
|
||||
q = await cls.query.where(
|
||||
(cls.group_id == group_id) & (cls.problem == problem)
|
||||
).gino.all()
|
||||
if problem:
|
||||
FUZZY = Config.get_config("word_bank", "WORD_BANK_FUZZY")
|
||||
KEY = Config.get_config("word_bank", "WORD_BANK_KEY")
|
||||
if KEY and FUZZY:
|
||||
q_fuzzy = await cls.query.where(
|
||||
(cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all()
|
||||
q_key = await cls.query.where(cls.group_id == group_id).gino.all()
|
||||
q_key = [x for x in q_key if str(x.problem) in (problem)]
|
||||
q = q_fuzzy + q_key
|
||||
elif FUZZY:
|
||||
q = await cls.query.where(
|
||||
(cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all()
|
||||
elif KEY:
|
||||
q = await cls.query.where(cls.group_id == group_id).gino.all()
|
||||
q = [x for x in q if str(x.problem) in (problem)]
|
||||
else:
|
||||
q = await cls.query.where(
|
||||
(cls.group_id == group_id) & (cls.problem == problem)
|
||||
).gino.all()
|
||||
else:
|
||||
return None
|
||||
|
||||
return random.choice(q) if q else None
|
||||
|
||||
@classmethod
|
||||
@@ -209,10 +230,6 @@ class WordBank(db.Model):
|
||||
if q:
|
||||
path = DATA_PATH / "word_bank" / f"{group_id}"
|
||||
if index is not None:
|
||||
_q = [x.problem for x in q]
|
||||
_q.sort()
|
||||
prob = _q[index]
|
||||
index = [x.problem for x in q].index(prob)
|
||||
q = [q[index]]
|
||||
answer = "\n".join([x.answer for x in q])
|
||||
for x in q:
|
||||
@@ -225,22 +242,19 @@ class WordBank(db.Model):
|
||||
if _path.exists():
|
||||
_path.unlink()
|
||||
await cls.delete.where(
|
||||
(cls.problem == problem)
|
||||
(cls.update_time == x.update_time)
|
||||
& (cls.problem == problem)
|
||||
& (cls.answer == x.answer)
|
||||
& (cls.group_id == group_id)
|
||||
).gino.status()
|
||||
return answer
|
||||
elif type_ == "update":
|
||||
new_format =format_
|
||||
new_format = format_
|
||||
new_answer = answer
|
||||
q = await q.with_for_update().gino.all()
|
||||
if q:
|
||||
path = DATA_PATH / "word_bank" / f"{group_id}"
|
||||
if index is not None:
|
||||
_q = [x.problem for x in q]
|
||||
_q.sort()
|
||||
prob = _q[index]
|
||||
index = [x.problem for x in q].index(prob)
|
||||
q = [q[index]]
|
||||
else:
|
||||
q = [q[0]]
|
||||
@@ -259,6 +273,8 @@ class WordBank(db.Model):
|
||||
(cls.problem == problem)
|
||||
& (cls.answer == x.answer)
|
||||
& (cls.group_id == group_id)
|
||||
& (cls.group_id == group_id)
|
||||
& (cls.update_time == x.update_time)
|
||||
).gino.status()
|
||||
return True
|
||||
elif type_ == "get":
|
||||
|
||||
Reference in New Issue
Block a user