diff options
Diffstat (limited to 'ATRI/plugins/key-repo/__init__.py')
-rw-r--r-- | ATRI/plugins/key-repo/__init__.py | 280 |
1 files changed, 147 insertions, 133 deletions
diff --git a/ATRI/plugins/key-repo/__init__.py b/ATRI/plugins/key-repo/__init__.py index 4b2241c..dc606b0 100644 --- a/ATRI/plugins/key-repo/__init__.py +++ b/ATRI/plugins/key-repo/__init__.py @@ -1,171 +1,185 @@ -import os -import json -import time -from random import choice -from pathlib import Path +import string +from datetime import datetime +from random import choice, sample -from nonebot.typing import T_State -from nonebot.adapters.cqhttp import Bot, MessageEvent +from nonebot.adapters.cqhttp import Bot, MessageEvent, GroupMessageEvent -from ATRI.config import nonebot_config +from ATRI.config import Config from ATRI.service import Service as sv +from ATRI.utils.request import get_bytes from ATRI.rule import is_block, is_in_dormant, is_in_service, to_bot - -# 此功能未完善 +from .data_source import ( + add_history, + add_key_temp, + load_key_data, + add_key, + load_key_history, + load_key_temp_data, + del_key_temp +) -KEYREPO_DIV = Path('.') / 'ATRI' / 'data' / 'database' / 'KeyRepo' -os.makedirs(KEYREPO_DIV, exist_ok=True) +# 此功能暂未完善:未添加关键词删除 +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# !屎山注意!屎山注意!屎山注意!屎山注意! +# !请自备降压药!请自备降压药! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -__plugin_name__ = "KeyRepo" keyrepo = sv.on_message(rule=is_block() & is_in_dormant() - & is_in_service(__plugin_name__) + & is_in_service('keyrepo') & to_bot()) @keyrepo.handle() async def _keyrepo(bot: Bot, event: MessageEvent) -> None: msg = str(event.get_message()) - - file_name = "data.json" - path = KEYREPO_DIV / file_name - try: - data = json.loads(path.read_bytes()) - except: - with open(path, 'w') as r: - r.write(json.dumps({})) - data = {} + data = load_key_data() for key in data.keys(): if key in msg: await keyrepo.finish(choice(data[key])) +__doc__ = """ +关键词申请/审核 +权限组:所有人 +用法: + /train add (key) (repo) + 对于维护者: + /train list + /train info (key) + /train r (code) (0,1) +补充: + key: 关键词 + repo: 回复 + 0,1: 对应布尔值False/True + code: 唯一识别码 +示例: + /train add hso 好涩哦 +""" + train = sv.on_command( - name="调教", cmd="/train", + docs=__doc__, rule=is_block() ) [email protected]("key", prompt="哦哦哦要开始学习了!请告诉咱知识点") -async def _train(bot: Bot, event: MessageEvent, state: T_State) -> None: - if "[CQ" in state["key"]: - await train.reject("仅支持纯文本呢...") - [email protected]("repo", prompt="咱该如何回答呢?") -async def _trainR(bot: Bot, event: MessageEvent, state: T_State) -> None: - if "[CQ" in state["repo"]: - await train.reject("仅支持纯文本呢...") - - if state["key"] == "-d": - file_name = "review.json" - path = KEYREPO_DIV / file_name - try: - data = json.loads(path.read_bytes()) - except: - data = {} - - key = state["repo"] - if key not in data: - await train.finish("未发现该待审核的知识点呢...") - else: +async def _train(bot: Bot, event: GroupMessageEvent) -> None: + user = event.user_id + group = event.group_id + + msg = str(event.message).split(' ') + _type = msg[0] + code = "".join(sample(string.ascii_letters + string.digits, 10)) + + if _type == "add": + key = msg[1] + args = msg[2] + if user in Config.BotSelfConfig.superusers: + add_key(key, args) msg = ( - f"Key: {key}\n" - f"Repo: {data[key]['repo']}\n" - "已经从咱的审核列表移除!" + "好欸学到了新的知识!\n" + f"关键词:{key}\n" + f"回复:{args}" ) - del data[key] - with open(path, 'w') as r: - r.write(json.dumps(data)) - await train.finish(msg) - elif state["key"] == "-i": - file_name = "review.json" - path = KEYREPO_DIV / file_name - try: - data = json.loads(path.read_bytes()) - except: - data = {} - if state["repo"] not in data: - await train.finish("未发现该知识点呢") - key = data[state["repo"]] - - msg = ( - f"用户: {key['user']}\n" - f"知识点: {state['repo']}" - f"回复: {key['repo']}" - f"时间: {key['time']}" - "/train -r 知识点 y/n" - ) - await train.finish(msg) - elif state["key"] == "-ls": - file_name = "review.json" - path = KEYREPO_DIV / file_name - try: - data = json.loads(path.read_bytes()) - except: - data = {} - keys = ",".join(data.keys()) - msg = f"目前等待审核的有如下:\n{keys}" - await train.finish(msg) - elif state["key"] == "-r": - file_name = "review.json" - path = KEYREPO_DIV / file_name - try: - data = json.loads(path.read_bytes()) - except: - data = {} - - - key = state["key"] - repo = state["repo"] - user = event.get_user_id() - if user not in nonebot_config["superusers"]: - file_name = "review.json" - path = KEYREPO_DIV / file_name - try: - data = json.loads(path.read_bytes()) - except: - data = {} - - if key in data: - msg = "欸欸欸,该词还在等待咱的审核,请先等先来的审核完再提交吧..." + data = { + "user": user, + "group": group, + "time": str(datetime.now()), + "pass": True, + "key": key, + "repo": args, + "feature": code + } + add_history(data) await train.finish(msg) else: - data[key] = { + data = { "user": user, - "repo": repo, - "time": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + "group": group, + "time": str(datetime.now()), + "pass": False, + "key": key, + "repo": args, + "feature": code } - with open(path, 'r') as r: - r.write(json.dumps(data, indent=4)) - + add_key_temp(data) msg = ( - "欸欸欸这不错欸!不过,还是先等待咱审核审核," - "如想撤销本次学习,请发送 /train -d 知识点" + "感谢你的提交w,所提交的关键词将由维护者进行审核\n" + f"识别码:{code},你可以使用/train info 识别码\n" + "以查询是否通过" ) await train.finish(msg) - - else: - file_name = "data.json" - path = KEYREPO_DIV / file_name - try: - data = json.loads(path.read_bytes()) - except: - data = {} - - if key in data: - repo_list: list = data[key] - repo_list.append(repo) - data[key] = repo_list - msg = f"哦哦哦,{key}原来还有这样的回复,学到了~!" - await bot.send(event, msg) + elif _type == "list": + data = load_key_temp_data() + node = [] + for i in data: + dic = { + "type": "node", + "data": { + "name": "idk", + "uin": i['user'], + "content": f"Key: {i['key']}\nRepo: {i['repo']}\nTime: {i['time']}" + } + } + node.append(dic) + if not node: + node = [{ + "type": "node", + "data": { + "name": "null", + "uin": str(user), + "content": "这里什么也没有呢..." + } + }] + await bot.send_group_forward_msg(group_id=group, messages=node) + elif _type == "info": + key = msg[1] + data = load_key_history() + for i in data: + if i['key'] == key: + msg = ( + f"{key} 审核信息:\n" + f"是否通过:{i['pass']}" + f"结果: K: {i['key']} | R: {i['repo']}\n" + f"来自:{i['user']}@[群:{i['group']}]\n" + f"申请时间:{i['time']}" + ) + await train.finish(msg) + else: + await train.finish('未找到相关信息...') + elif _type == "r": + key = msg[1] + args = int(msg[2]) + data = load_key_temp_data() + if user in Config.BotSelfConfig.superusers: + if args not in [0, 1]: + await train.finish('请检查输入...') + else: + for i in data: + if bool(args): + if i['key'] == key: + msg = ( + "好欸学到了新的知识!\n" + f"关键词:{i['key']}\n" + f"回复:{i['repo']}" + ) + add_key(i['key'], i['repo']) + add_history(i) + await train.finish(msg) + else: + await train.finish('未找到相关信息...') + else: + add_history(i, False) + if del_key_temp(i): + await train.finish('已标记为不通过') + else: + await train.finish('未找到相关信息') else: - data[key] = [repo] - msg = "好欸,咱学到了新的知识点!" - await bot.send(event, msg) - - with open(path, 'w') as r: - r.write(json.dumps(data)) + await train.finish('不行哦~你的权限使得你没法这样做!') + else: + await train.finish('请检查输入...') |