diff options
| author | Kyomotoi <0w0@imki.moe> | 2022-11-04 08:35:04 +0800 | 
|---|---|---|
| committer | Kyomotoi <0w0@imki.moe> | 2022-11-04 08:35:04 +0800 | 
| commit | e4bee2d66d8e9bedae368307a04cc0764c3f3303 (patch) | |
| tree | 7bbeccb34af3aa7246fb428f97ba345a4105418e | |
| parent | d81747db96cb7e849a62bd3622356ce471161462 (diff) | |
| download | ATRI-e4bee2d66d8e9bedae368307a04cc0764c3f3303.tar.gz ATRI-e4bee2d66d8e9bedae368307a04cc0764c3f3303.tar.bz2 ATRI-e4bee2d66d8e9bedae368307a04cc0764c3f3303.zip | |
🎨 跟随底层的更改
| -rw-r--r-- | ATRI/service.py | 40 | 
1 files changed, 28 insertions, 12 deletions
| diff --git a/ATRI/service.py b/ATRI/service.py index 0fec819..6562482 100644 --- a/ATRI/service.py +++ b/ATRI/service.py @@ -6,7 +6,6 @@ from pydantic import BaseModel  from typing import List, Set, Tuple, Type, Union, Optional  from nonebot.matcher import Matcher -from nonebot.permission import Permission  from nonebot.dependencies import Dependent  from nonebot.typing import (      T_State, @@ -18,6 +17,7 @@ from nonebot.rule import Rule, command, keyword, regex  from nonebot.adapters import Bot, Event  from nonebot.adapters.onebot.v11 import PrivateMessageEvent, GroupMessageEvent +from ATRI.permission import MASTER, Permission  from ATRI.exceptions import ReadFileError, WriteFileError @@ -28,6 +28,7 @@ SERVICES_DIR.mkdir(parents=True, exist_ok=True)  class ServiceInfo(BaseModel):      service: str      docs: str +    permission: list      cmd_list: dict      enabled: bool      only_admin: bool @@ -48,6 +49,7 @@ class Service:      {          "service": "Service name",          "docs": "Main helps and commands", +        "permission": ["Master", ...]          "cmd_list": {              "/cmd0": {                  "type": "Command type", @@ -70,7 +72,7 @@ class Service:              return          self.service = service -        self._only_admin = False +        self._only_master = False          self._rule = is_in_service(service)          self._permission = None          self._handlers = None @@ -79,6 +81,9 @@ class Service:          self._state = None          self._main_cmd = (str(),) +        self._path = Path(".") / "data" / "plugins" / self.service +        self._path.mkdir(parents=True, exist_ok=True) +      def document(self, context: str) -> "Service":          """为服务添加说明""" @@ -86,9 +91,11 @@ class Service:          return self      def only_admin(self, _is: bool) -> "Service": -        """标记服务仅管理员可用""" +        """标记服务仅主人可用""" -        self._only_admin = _is +        self._only_master = _is +        self._permission = MASTER +                  return self      def rule(self, rule: Optional[Union[Rule, T_RuleChecker]]) -> "Service": @@ -101,6 +108,11 @@ class Service:          """为服务添加权限判定"""          self._permission = perm + +        data = self.load_service(self.service) +        if perm not in data["permission"]: +            data["permission"].append(perm.name)  # type: ignore +        self.save_service(data, self.service)          return self      def handlers(self, hand: Optional[List[T_Handler]]) -> "Service": @@ -133,14 +145,18 @@ class Service:          self._main_cmd = (cmd,)          return self +    def get_path(self) -> Path: +        return self._path +      def __generate_service_config(self, service: str, docs: str = str()) -> None:          path = SERVICES_DIR / f"{service}.json"          data = ServiceInfo(              service=service,              docs=docs, +            permission=list(),              cmd_list=dict(),              enabled=True, -            only_admin=self._only_admin, +            only_admin=self._only_master,              disable_user=list(),              disable_group=list(),          ) @@ -361,7 +377,7 @@ class ServiceTools:              w.write(json.dumps(service_data, indent=4))      @staticmethod -    def load_service(service: str) -> dict: +    def load_service(service: str) -> ServiceInfo:          path = SERVICES_DIR / f"{service}.json"          if not path.is_file():              raise ReadFileError( @@ -372,15 +388,15 @@ class ServiceTools:          with open(path, "r", encoding="utf-8") as r:              data = json.loads(r.read()) -        return data +        return ServiceInfo.parse_file(path)      @classmethod      def auth_service(cls, service, user_id: str = str(), group_id: str = str()) -> bool:          data = cls.load_service(service) -        auth_global = data.get("enabled", True) -        auth_user = data.get("disable_user", list()) -        auth_group = data.get("disable_group", list()) +        auth_global = data.enabled +        auth_user = data.disable_user +        auth_group = data.disable_group          if user_id:              if user_id in auth_user: @@ -394,8 +410,8 @@ class ServiceTools:      @classmethod      def service_controller(cls, service: str, is_enabled: bool):          data = cls.load_service(service) -        data["enabled"] = is_enabled -        cls.save_service(data, service) +        data.enabled = is_enabled +        cls.save_service(data.dict(), service)  def is_in_service(service: str) -> Rule: | 
