mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-08 21:30:01 +08:00
@@ -28,13 +28,13 @@ class WordBankBuilder:
|
|||||||
"""
|
"""
|
||||||
self._data["answer"] = answer
|
self._data["answer"] = answer
|
||||||
|
|
||||||
async def save(self):
|
async def save(self,search_type):
|
||||||
user_id = self._data["user_id"]
|
user_id = self._data["user_id"]
|
||||||
group_id = self._data["group_id"]
|
group_id = self._data["group_id"]
|
||||||
problem = self._data["problem"]
|
problem = self._data["problem"]
|
||||||
answer = self._data["answer"]
|
answer = self._data["answer"]
|
||||||
placeholder = self._data.get("placeholder")
|
placeholder = self._data.get("placeholder")
|
||||||
await WordBank.add_problem_answer(user_id, group_id, problem, answer, placeholder)
|
return await WordBank.add_problem_answer(user_id, group_id, search_type,problem, answer, placeholder)
|
||||||
|
|
||||||
async def update(self, index):
|
async def update(self, index):
|
||||||
user_id = self._data["user_id"]
|
user_id = self._data["user_id"]
|
||||||
|
|||||||
+33
-23
@@ -25,6 +25,7 @@ class WordBank(db.Model):
|
|||||||
cls,
|
cls,
|
||||||
user_id: int,
|
user_id: int,
|
||||||
group_id: Optional[int],
|
group_id: Optional[int],
|
||||||
|
search_type: [int],
|
||||||
problem: str,
|
problem: str,
|
||||||
answer: str,
|
answer: str,
|
||||||
format_: Optional[List[Tuple[int, Union[int, str]]]],
|
format_: Optional[List[Tuple[int, Union[int, str]]]],
|
||||||
@@ -33,6 +34,7 @@ class WordBank(db.Model):
|
|||||||
添加或新增一个问答
|
添加或新增一个问答
|
||||||
:param user_id: 用户id
|
:param user_id: 用户id
|
||||||
:param group_id: 群号
|
:param group_id: 群号
|
||||||
|
:search_type: 问题类型,
|
||||||
:param problem: 问题
|
:param problem: 问题
|
||||||
:param answer: 回答
|
:param answer: 回答
|
||||||
:param format_: 格式化数据
|
:param format_: 格式化数据
|
||||||
@@ -43,7 +45,7 @@ class WordBank(db.Model):
|
|||||||
for x, y in format_:
|
for x, y in format_:
|
||||||
_str += f"{x}<_s>{y}<format>"
|
_str += f"{x}<_s>{y}<format>"
|
||||||
return await cls._problem_answer_handle(
|
return await cls._problem_answer_handle(
|
||||||
user_id, group_id, problem, "add", answer=answer, format_=_str
|
user_id, group_id, problem, "add", search_type=search_type, answer=answer, format_=_str
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -159,22 +161,25 @@ class WordBank(db.Model):
|
|||||||
if problem:
|
if problem:
|
||||||
FUZZY = Config.get_config("word_bank", "WORD_BANK_FUZZY")
|
FUZZY = Config.get_config("word_bank", "WORD_BANK_FUZZY")
|
||||||
KEY = Config.get_config("word_bank", "WORD_BANK_KEY")
|
KEY = Config.get_config("word_bank", "WORD_BANK_KEY")
|
||||||
|
q = await cls.query.where(
|
||||||
|
(cls.group_id == group_id) & (cls.problem == problem)
|
||||||
|
).gino.all()
|
||||||
if KEY and FUZZY:
|
if KEY and FUZZY:
|
||||||
q_fuzzy = await cls.query.where(
|
q_fuzzy = await cls.query.where(
|
||||||
(cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all()
|
(cls.group_id == group_id) & (cls.search_type == 2) & (
|
||||||
q_key = await cls.query.where(cls.group_id == group_id).gino.all()
|
cls.problem.contains(f'{problem}'))).gino.all()
|
||||||
|
q_key = await cls.query.where((cls.group_id == group_id) & (cls.search_type == 1)).gino.all()
|
||||||
q_key = [x for x in q_key if str(x.problem) in (problem)]
|
q_key = [x for x in q_key if str(x.problem) in (problem)]
|
||||||
q = q_fuzzy + q_key
|
q += q_fuzzy + q_key
|
||||||
elif FUZZY:
|
elif FUZZY:
|
||||||
q = await cls.query.where(
|
q_fuzzy = await cls.query.where(
|
||||||
(cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all()
|
(cls.group_id == group_id) & (cls.search_type == 2) & (
|
||||||
|
cls.problem.contains(f'{problem}'))).gino.all()
|
||||||
|
q += q_fuzzy
|
||||||
elif KEY:
|
elif KEY:
|
||||||
q = await cls.query.where(cls.group_id == group_id).gino.all()
|
q_key = await cls.query.where((cls.group_id == group_id) & (cls.search_type == 1)).gino.all()
|
||||||
q = [x for x in q if str(x.problem) in (problem)]
|
q_key = [x for x in q_key if str(x.problem) in (problem)]
|
||||||
else:
|
q += q_key
|
||||||
q = await cls.query.where(
|
|
||||||
(cls.group_id == group_id) & (cls.problem == problem)
|
|
||||||
).gino.all()
|
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -188,6 +193,7 @@ class WordBank(db.Model):
|
|||||||
problem: str,
|
problem: str,
|
||||||
type_: str,
|
type_: str,
|
||||||
*,
|
*,
|
||||||
|
search_type: [int] = 0,
|
||||||
answer: Optional[str] = None,
|
answer: Optional[str] = None,
|
||||||
index: Optional[int] = None,
|
index: Optional[int] = None,
|
||||||
format_: Optional[str] = None,
|
format_: Optional[str] = None,
|
||||||
@@ -213,17 +219,21 @@ class WordBank(db.Model):
|
|||||||
else:
|
else:
|
||||||
q = cls.query.where((cls.user_qq == user_id) & (cls.problem == problem))
|
q = cls.query.where((cls.user_qq == user_id) & (cls.problem == problem))
|
||||||
if type_ == "add":
|
if type_ == "add":
|
||||||
q = await q.where(cls.answer == answer).gino.all()
|
q = await q.where((cls.answer == answer) & (cls.search_type == search_type)).gino.all()
|
||||||
if not q or ".jpg" in format_:
|
try:
|
||||||
await cls.create(
|
if not q or ".jpg" in format_:
|
||||||
user_qq=user_id,
|
await cls.create(
|
||||||
group_id=group_id,
|
user_qq=user_id,
|
||||||
problem=problem,
|
group_id=group_id,
|
||||||
answer=answer,
|
search_type=search_type,
|
||||||
format=format_,
|
problem=problem,
|
||||||
create_time=datetime.now().replace(microsecond=0),
|
answer=answer,
|
||||||
update_time=datetime.now().replace(microsecond=0),
|
format=format_,
|
||||||
)
|
create_time=datetime.now().replace(microsecond=0),
|
||||||
|
update_time=datetime.now().replace(microsecond=0),
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
return False
|
||||||
return True
|
return True
|
||||||
elif type_ == "delete":
|
elif type_ == "delete":
|
||||||
q = await q.with_for_update().gino.all()
|
q = await q.with_for_update().gino.all()
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from services.log import logger
|
|||||||
from configs.path_config import DATA_PATH
|
from configs.path_config import DATA_PATH
|
||||||
from utils.http_utils import AsyncHttpx
|
from utils.http_utils import AsyncHttpx
|
||||||
from ._data_source import WordBankBuilder
|
from ._data_source import WordBankBuilder
|
||||||
from configs.config import Config
|
|
||||||
from utils.message_builder import image
|
from utils.message_builder import image
|
||||||
from utils.image_utils import text2image
|
from utils.image_utils import text2image
|
||||||
from .message_handle import get_one_answer
|
from .message_handle import get_one_answer
|
||||||
@@ -27,7 +26,7 @@ usage:
|
|||||||
对指定问题的随机回答,对相同问题可以设置多个不同回答
|
对指定问题的随机回答,对相同问题可以设置多个不同回答
|
||||||
删除词条后每个词条的id可能会变化,请查看后再删除
|
删除词条后每个词条的id可能会变化,请查看后再删除
|
||||||
指令:
|
指令:
|
||||||
添加词条问...答...:添加问答词条,可重复添加相同问题的不同回答
|
添加词条 ?[模糊/关键字]...答...:添加问答词条,可重复添加相同问题的不同回答
|
||||||
删除词条 [问题/下标] ?[下标]:删除指定词条指定或全部回答
|
删除词条 [问题/下标] ?[下标]:删除指定词条指定或全部回答
|
||||||
修改词条 [问题/下标] ?[下标/新回答] [新回答]:修改指定词条指定回答默认修改为第一条
|
修改词条 [问题/下标] ?[下标/新回答] [新回答]:修改指定词条指定回答默认修改为第一条
|
||||||
查看词条 ?[问题/下标]:查看全部词条或对应词条回答
|
查看词条 ?[问题/下标]:查看全部词条或对应词条回答
|
||||||
@@ -44,12 +43,12 @@ usage:
|
|||||||
""".strip()
|
""".strip()
|
||||||
__plugin_des__ = "自定义词条内容随机回复"
|
__plugin_des__ = "自定义词条内容随机回复"
|
||||||
__plugin_cmd__ = [
|
__plugin_cmd__ = [
|
||||||
"添加词条问...答..",
|
"添加词条 ?[模糊/关键字]问...答..",
|
||||||
"删除词条 [问题/下标] ?[下标]",
|
"删除词条 [问题/下标] ?[下标]",
|
||||||
"修改词条 [问题/下标] ?[下标/新回答] [新回答]",
|
"修改词条 [问题/下标] ?[下标/新回答] [新回答]",
|
||||||
"查看词条 ?[问题/下标]",
|
"查看词条 ?[问题/下标]",
|
||||||
]
|
]
|
||||||
__plugin_version__ = 0.1
|
__plugin_version__ = 0.2
|
||||||
__plugin_author__ = "HibiKier"
|
__plugin_author__ = "HibiKier"
|
||||||
__plugin_settings__ = {
|
__plugin_settings__ = {
|
||||||
"admin_level": Config.get_config("word_bank", "WORD_BANK_LEVEL [LEVEL]"),
|
"admin_level": Config.get_config("word_bank", "WORD_BANK_LEVEL [LEVEL]"),
|
||||||
@@ -71,7 +70,7 @@ show_word = on_command("显示词条", aliases={"查看词条"}, priority=5, blo
|
|||||||
@add_word.handle()
|
@add_word.handle()
|
||||||
async def _(bot: Bot, event: GroupMessageEvent, state: T_State, arg: Message = CommandArg()):
|
async def _(bot: Bot, event: GroupMessageEvent, state: T_State, arg: Message = CommandArg()):
|
||||||
msg = str(arg)
|
msg = str(arg)
|
||||||
r = re.search(r"^问(.+)\s?答([\s\S]*)", msg)
|
r = re.search(r"问(.+)\s?答([\s\S]*)", msg)
|
||||||
if not r:
|
if not r:
|
||||||
await add_word.finish("未检测到词条问题...")
|
await add_word.finish("未检测到词条问题...")
|
||||||
problem = r.group(1).strip()
|
problem = r.group(1).strip()
|
||||||
@@ -87,10 +86,17 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State, arg: Message = C
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
_problem = problem
|
_problem = problem
|
||||||
|
search_type = 0
|
||||||
|
if re.search("^关键字(.*)", msg):
|
||||||
|
search_type = 1
|
||||||
|
elif re.search("^模糊(.*)", msg):
|
||||||
|
search_type = 2
|
||||||
_builder = await get__builder(event, _problem, answer, idx)
|
_builder = await get__builder(event, _problem, answer, idx)
|
||||||
await _builder.save()
|
if await _builder.save(search_type):
|
||||||
logger.info(f"已保存词条 问:{problem} 答:{msg}")
|
logger.info(f"已保存词条 问:{problem} 答:{msg}")
|
||||||
await add_word.send(f"已保存词条:{problem}")
|
await add_word.send(f"已保存词条:{problem}")
|
||||||
|
else:
|
||||||
|
await delete_word.send("保存失败,可能是回答重复")
|
||||||
|
|
||||||
|
|
||||||
@delete_word.handle()
|
@delete_word.handle()
|
||||||
|
|||||||
Reference in New Issue
Block a user