feat: add a way to define custom permission filter.

This commit is contained in:
Alero
2025-02-12 03:05:51 +08:00
parent 3a99a60792
commit dd1995ae0b
4 changed files with 29 additions and 2 deletions
+2
View File
@@ -5,6 +5,7 @@ from astrbot.core.star.register import (
register_regex as regex,
register_platform_adapter_type as platform_adapter_type,
register_permission_type as permission_type,
register_custom_permission_type as custom_permission_type,
register_on_llm_request as on_llm_request,
register_on_llm_response as on_llm_response,
register_llm_tool as llm_tool,
@@ -28,6 +29,7 @@ __all__ = [
'PlatformAdapterTypeFilter',
'PlatformAdapterType',
'PermissionTypeFilter',
'register_custom_permission_type',
'PermissionType',
'on_llm_request',
'llm_tool',
+9 -1
View File
@@ -9,7 +9,15 @@ class PermissionType(enum.Flag):
ADMIN = enum.auto()
MEMBER = enum.auto()
class PermissionTypeFilter(HandlerFilter):
class BasePermissionTypeFilter(HandlerFilter):
def __init__(self, raise_error: bool = True):
self.raise_error = raise_error
def filter(self, event: AstrMessageEvent, cfg: AstrBotConfig) -> bool:
''' 一个用于重写的自定义Filter '''
raise NotImplementedError
class PermissionTypeFilter(BasePermissionTypeFilter):
def __init__(self, permission_type: PermissionType, raise_error: bool = True):
self.permission_type = permission_type
self.raise_error = raise_error
+2
View File
@@ -6,6 +6,7 @@ from .star_handler import (
register_platform_adapter_type,
register_regex,
register_permission_type,
register_custom_permission_type,
register_on_llm_request,
register_on_llm_response,
register_llm_tool,
@@ -21,6 +22,7 @@ __all__ = [
'register_platform_adapter_type',
'register_regex',
'register_permission_type',
'register_custom_permission_type',
'register_on_llm_request',
'register_on_llm_response',
'register_llm_tool',
+16 -1
View File
@@ -6,7 +6,7 @@ from ..filter.command import CommandFilter
from ..filter.command_group import CommandGroupFilter
from ..filter.event_message_type import EventMessageTypeFilter, EventMessageType
from ..filter.platform_adapter_type import PlatformAdapterTypeFilter, PlatformAdapterType
from ..filter.permission import PermissionTypeFilter, PermissionType
from ..filter.permission import PermissionTypeFilter, BasePermissionTypeFilter, PermissionType
from ..filter.regex import RegexFilter
from typing import Awaitable
from astrbot.core.provider.func_tool_manager import SUPPORTED_TYPES
@@ -156,6 +156,21 @@ def register_permission_type(permission_type: PermissionType, raise_error: bool
return decorator
def register_custom_permission_type(cunstom_permission_type_filter: BasePermissionTypeFilter, raise_error: bool = True):
'''注册一个自定义的 PermissionFilter
Args:
cunstom_permission_type_filter: 一个继承自HandlerFilter
raise_error: 如果没有权限,是否抛出错误到消息平台,并且停止事件传播。默认为 True
'''
def decorator(awaitable):
handler_md = get_handler_or_create(awaitable, EventType.AdapterMessageEvent)
handler_md.event_filters.append(cunstom_permission_type_filter())
return awaitable
return decorator
def register_on_llm_request(**kwargs):
'''当有 LLM 请求时的事件