加入权限判断
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user