From be2747e4d4b820ca0f1f988d3b77a628da26fe7b Mon Sep 17 00:00:00 2001
From: Kyomotoi <kyomotoiowo@gmail.com>
Date: Thu, 8 Jul 2021 22:09:00 +0800
Subject: =?UTF-8?q?=F0=9F=94=96=E2=99=BB=EF=B8=8F=F0=9F=90=9B=F0=9F=94=A7?=
 =?UTF-8?q?=F0=9F=94=A5=F0=9F=93=9D=20=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?=
 =?UTF-8?q?=EF=BC=9AYHN-001-A03?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

🔖 更新版本至:YHN-001-A03
✨ 新增插件:
    - 涩图
    - 闲聊(文爱
♻️ 重构:
    - Service
    - 所有插件
🐛 修复部分小bug
🔧 暂时移除部分设置
🔥 删除:
    - 插件:nsfw、wife。日后加回
    - 插件 essential 中部分内容
📝 更新README
---
 ATRI/plugins/help/__init__.py    |  48 +++++++++++++++++
 ATRI/plugins/help/data_source.py | 112 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 160 insertions(+)
 create mode 100644 ATRI/plugins/help/__init__.py
 create mode 100644 ATRI/plugins/help/data_source.py

(limited to 'ATRI/plugins/help')

diff --git a/ATRI/plugins/help/__init__.py b/ATRI/plugins/help/__init__.py
new file mode 100644
index 0000000..1d9af19
--- /dev/null
+++ b/ATRI/plugins/help/__init__.py
@@ -0,0 +1,48 @@
+from nonebot.typing import T_State
+from nonebot.adapters.cqhttp import Bot, MessageEvent
+
+from ATRI.rule import to_bot
+from .data_source import Helper
+
+
+main_help = Helper().on_command("菜单", "获取食用bot的方法", rule=to_bot(), aliases={"/help", "menu"})
+
+@main_help.handle()
+async def _main_help(bot: Bot, event: MessageEvent):
+    repo = Helper().menu()
+    await main_help.finish(repo)
+
+
+about_me = Helper().on_command("关于", "获取关于bot的信息", rule=to_bot(), aliases={"about"})
+
+@about_me.handle()
+async def _about_me(bot: Bot, event: MessageEvent):
+    repo = Helper().about()
+    await about_me.finish(repo)
+
+
+service_list = Helper().on_command("服务列表", "查看所有可用服务", rule=to_bot(), aliases={"功能列表"})
+
+@service_list.handle()
+async def _service_list(bot: Bot, event: MessageEvent):
+    repo = Helper().service_list()
+    await service_list.finish(repo)
+
+
+service_info = Helper().on_command("帮助", "获取服务详细帮助")
+
+@service_info.handle()
+async def _ready_service_info(bot: Bot, event: MessageEvent, state: T_State):
+    msg = str(event.message).split(" ")
+    service = msg[0]
+    try:
+        cmd = msg[1]
+    except BaseException:
+        cmd = str()
+    
+    if not cmd:
+        repo = Helper().service_info(service)
+        await service_info.finish(repo)
+    
+    repo = Helper().cmd_info(service, cmd)
+    await service_info.finish(repo)
diff --git a/ATRI/plugins/help/data_source.py b/ATRI/plugins/help/data_source.py
new file mode 100644
index 0000000..930f4bb
--- /dev/null
+++ b/ATRI/plugins/help/data_source.py
@@ -0,0 +1,112 @@
+import os
+
+from ATRI import __version__
+from ATRI.service import Service, SERVICES_DIR, ServiceTools
+from ATRI.config import BotSelfConfig
+from ATRI.exceptions import ReadFileError
+
+
+SERVICE_INFO_FORMAT = """
+服务名:{service}
+说明:{docs}
+可用命令:\n{cmd_list}
+是否全局启用:{enabled}
+Tip: 帮助 [服务] [命令] 以查看对应命令详细信息
+""".strip()
+
+
+COMMAND_INFO_FORMAT = """
+命令:{cmd}
+类型:{cmd_type}
+说明:{docs}
+更多触发方式:{aliases}
+""".strip()
+
+
+class Helper(Service):
+    
+    def __init__(self):
+        Service.__init__(self, "帮助", "bot的食用指南~")
+    
+    @staticmethod
+    def menu() -> str:
+        return (
+            "哦呀?~需要帮助?\n"
+            "关于 -查看bot基本信息\n"
+            "服务列表 -以查看所有可用服务\n"
+            "帮助 [服务] -以查看对应服务帮助\n"
+            "Tip: 均需要at触发。菜单 打开此页面"
+        )
+    
+    @staticmethod
+    def about() -> str:
+        temp_list = list()
+        for i in BotSelfConfig.nickname:
+            temp_list.append(i)
+        nickname = "、".join(map(str, temp_list))
+        return (
+            "唔...是来认识咱的么\n"
+            f"可以称呼咱:{nickname}\n"
+            f"咱的型号是:{__version__}\n"
+            "想进一步了解:\n"
+            "https://github.com/Kyomotoi/ATRI"
+        )
+    
+    @staticmethod
+    def service_list() -> str:
+        files = os.listdir(SERVICES_DIR)
+        temp_list = list()
+        for i in files:
+            service = i.replace(".json", "")
+            temp_list.append(service)
+        
+        msg0 = "咱搭载了以下服务~\n"
+        services = " | ".join(map(str, temp_list))
+        msg0 = msg0 + services
+        repo = msg0 + "\n帮助 [服务] -以查看对应服务帮助"
+        return repo
+    
+    @staticmethod
+    def service_info(service: str) -> str:
+        try:
+            data = ServiceTools().load_service(service)
+        except ReadFileError:
+            return "请检查是否输入错误呢..."
+        
+        service_name = data.get("service", "error")
+        service_docs = data.get("docs", "error")
+        service_enabled = data.get("enabled", True)
+        
+        _service_cmd_list = list(data.get("cmd_list", {"error"}))
+        service_cmd_list = "\n".join(map(str, _service_cmd_list))
+        
+        repo = SERVICE_INFO_FORMAT.format(
+            service=service_name,
+            docs=service_docs,
+            cmd_list=service_cmd_list,
+            enabled=service_enabled
+        )
+        return repo
+    
+    @staticmethod
+    def cmd_info(service: str, cmd: str) -> str:
+        try:
+            data = ServiceTools().load_service(service)
+        except ReadFileError:
+            return "请检查是否输入错误..."
+        
+        cmd_list: dict = data["cmd_list"]
+        cmd_info = cmd_list.get(cmd, dict())
+        if not cmd_info:
+            return "请检查命令是否输入错误..."
+        cmd_type = cmd_info.get("type", "ignore")
+        docs = cmd_info.get("docs", "ignore")
+        aliases = cmd_info.get("aliases", "ignore")
+        
+        repo = COMMAND_INFO_FORMAT.format(
+            cmd=cmd,
+            cmd_type=cmd_type,
+            docs=docs,
+            aliases=aliases
+        )
+        return repo
-- 
cgit v1.2.3