加入权限判断

This commit is contained in:
liuwei
2025-04-09 14:49:27 +08:00
parent df51dc268e
commit 4d434dcb57
10 changed files with 27 additions and 14 deletions

View File

@@ -42,8 +42,9 @@ class BeautyLegPlugin(MessagePluginInterface):
def __init__(self):
super().__init__()
# 修改图片目录路径指向 resource/beauty_leg
self.image_folder = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
"beautyleg", "download_dir")
"resource", "beauty_leg")
def initialize(self, context: Dict[str, Any]) -> bool:
"""初始化插件"""
@@ -91,7 +92,7 @@ class BeautyLegPlugin(MessagePluginInterface):
return command in self._commands
@plugin_stats_decorator(plugin_name="美腿图片")
@plugin_points_cost(1, "美腿图片消耗积分")
@plugin_points_cost(1, "美腿图片消耗积分", Feature.BEAUTY_LEG)
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
content = str(message.get("content", "")).strip()

View File

@@ -104,7 +104,7 @@ class DifyPlugin(MessagePluginInterface):
return command in self._commands
@plugin_stats_decorator(plugin_name="Dify聊天")
@plugin_points_cost(2, "AI聊天消耗积分")
@plugin_points_cost(2, "AI聊天消耗积分",Feature.AI_CAPABILITY)
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
content = str(message.get("content", "")).strip()

View File

@@ -249,7 +249,7 @@ class GameTaskPlugin(MessagePluginInterface):
sender
)
@points_reward_decorator(calculate_game_points, "game", "百科答题奖励")
@points_reward_decorator(calculate_game_points, "game", "百科答题奖励", Feature.TASK_GAME)
def _handle_submit_answer(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理提交答案请求"""
try:

View File

@@ -180,7 +180,7 @@ class MessageSignPlugin(MessagePluginInterface):
# 修改process_message方法使用装饰器
@plugin_stats_decorator(plugin_name="签到系统")
@points_reward_decorator(calculate_sign_in_points, "checkin", "每日签到奖励")
@points_reward_decorator(calculate_sign_in_points, "checkin", "每日签到奖励",Feature.SIGNIN)
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
content = str(message.get("content", "")).strip()

View File

@@ -74,7 +74,7 @@ class MessageSummaryPlugin(MessagePluginInterface):
return True
@plugin_stats_decorator(plugin_name="群聊总结")
@plugin_points_cost(10, "群聊总结消耗积分")
@plugin_points_cost(10, "群聊总结消耗积分",Feature.SUMMARY_CAPABILITY)
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
try:

View File

@@ -82,7 +82,7 @@ class MusicPlugin(MessagePluginInterface):
return command in self._commands
@plugin_stats_decorator(plugin_name="音乐点播")
@plugin_points_cost(1, "音乐点播消耗积分")
@plugin_points_cost(1, "音乐点播消耗积分", Feature.MUSIC)
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
content = str(message.get("content", "")).strip()

View File

@@ -89,7 +89,7 @@ class VideoPlugin(MessagePluginInterface):
return command in self._commands
@plugin_stats_decorator(plugin_name="视频插件")
@plugin_points_cost(1, "视频插件消耗积分")
@plugin_points_cost(1, "视频插件消耗积分", Feature.VIDEO)
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
content = str(message.get("content", "")).strip()

View File

@@ -90,7 +90,7 @@ class VideoManPlugin(MessagePluginInterface):
return command in self._commands
@plugin_stats_decorator(plugin_name="猛男视频")
@plugin_points_cost(1, "猛男视频消耗积分")
@plugin_points_cost(1, "猛男视频消耗积分", Feature.VIDEO_MAN)
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
content = str(message.get("content", "")).strip()

View File

@@ -88,7 +88,7 @@ class XiurenImagePlugin(MessagePluginInterface):
return command in self._commands
@plugin_stats_decorator(plugin_name="秀人图片")
@plugin_points_cost(1, "秀人图片消耗积分")
@plugin_points_cost(1, "秀人图片消耗积分", Feature.PIC)
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
content = str(message.get("content", "")).strip()

View File

@@ -10,13 +10,14 @@ from db.points_db import PointsDBOperator, PointSource
def points_reward_decorator(points_calculator: Union[int, Callable], source_type: str = "other",
description: str = None):
description: str = None, feature: Feature = None):
"""积分奖励装饰器
Args:
points_calculator: 积分数量或计算函数,如果是函数,接收(self, message, success, response)参数并返回积分数量
source_type: 积分来源类型 (checkin, game, other)
description: 积分奖励描述
feature: 功能权限枚举
Returns:
装饰器函数
@@ -25,6 +26,12 @@ def points_reward_decorator(points_calculator: Union[int, Callable], source_type
def decorator(func: Callable) -> Callable:
@functools.wraps(func)
def wrapper(self, message: Dict[str, Any]) -> Tuple[bool, str]:
# 检查权限
roomid = message.get("roomid", "")
if feature and roomid and hasattr(self, 'gbm'):
if self.gbm.get_group_permission(roomid, feature) == PermissionStatus.DISABLED:
return False, "没有权限"
# 调用原始方法
success, response = func(self, message)
@@ -85,16 +92,16 @@ def points_reward_decorator(points_calculator: Union[int, Callable], source_type
return success, response
return wrapper
return decorator
def plugin_points_cost(points: int, description: str = None):
def plugin_points_cost(points: int, description: str = None, feature: Feature = None):
"""插件积分消费装饰器
Args:
points: 消费积分数量
description: 积分消费描述
feature: 功能权限枚举
Returns:
装饰器函数
@@ -104,6 +111,12 @@ def plugin_points_cost(points: int, description: str = None):
@functools.wraps(func)
def wrapper(self, message: Dict[str, Any]) -> Tuple[bool, str]:
try:
# 检查权限
roomid = message.get("roomid", "")
if feature and roomid and hasattr(self, 'gbm'):
if self.gbm.get_group_permission(roomid, feature) == PermissionStatus.DISABLED:
return False, "没有权限"
# 获取消息信息
sender = message.get("sender", "")
roomid = message.get("roomid", "")
@@ -160,5 +173,4 @@ def plugin_points_cost(points: int, description: str = None):
return func(self, message)
return wrapper
return decorator