diff --git a/plugins/beautyleg/main.py b/plugins/beautyleg/main.py index 0f27265..55d4a5a 100644 --- a/plugins/beautyleg/main.py +++ b/plugins/beautyleg/main.py @@ -7,6 +7,7 @@ from pathlib import Path from base.plugin_common.message_plugin_interface import MessagePluginInterface from base.plugin_common.plugin_interface import PluginStatus from utils.decorator.plugin_decorators import plugin_stats_decorator +from utils.decorator.rate_limit_decorator import group_feature_rate_limit from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager from utils.decorator.points_decorator import plugin_points_cost from wechat_ipad import WechatAPIClient @@ -105,6 +106,7 @@ class BeautyLegPlugin(MessagePluginInterface): @plugin_stats_decorator(plugin_name="美腿图片") @plugin_points_cost(2, "美腿图片消耗积分", FEATURE_KEY) + @group_feature_rate_limit(max_per_minute=1, feature_key=FEATURE_KEY) async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]: """处理消息""" content = str(message.get("content", "")).strip() diff --git a/plugins/dify/main.py b/plugins/dify/main.py index 26ecbb8..a245488 100644 --- a/plugins/dify/main.py +++ b/plugins/dify/main.py @@ -12,6 +12,7 @@ from pathlib import Path from base.plugin_common.message_plugin_interface import MessagePluginInterface from base.plugin_common.plugin_interface import PluginStatus from utils.decorator.plugin_decorators import plugin_stats_decorator +from utils.decorator.rate_limit_decorator import group_feature_rate_limit from utils.markdown_to_image import convert_md_str_to_image from utils.revoke.message_auto_revoke import MessageAutoRevoke from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager @@ -135,6 +136,7 @@ class DifyPlugin(MessagePluginInterface): @plugin_stats_decorator(plugin_name="Dify聊天") @plugin_points_cost(2, "AI聊天消耗积分", FEATURE_KEY) + @group_feature_rate_limit(max_per_minute=1, feature_key=FEATURE_KEY) async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]: """处理消息""" content = str(message.get("content", "")).strip() diff --git a/plugins/guess_song/main.py b/plugins/guess_song/main.py index ca353d5..09ac38f 100644 --- a/plugins/guess_song/main.py +++ b/plugins/guess_song/main.py @@ -11,6 +11,7 @@ from typing import Dict, Any, List, Optional, Tuple from base.plugin_common.message_plugin_interface import MessagePluginInterface from base.plugin_common.plugin_interface import PluginStatus from utils.decorator.plugin_decorators import plugin_stats_decorator +from utils.decorator.rate_limit_decorator import group_feature_rate_limit from utils.revoke.message_auto_revoke import MessageAutoRevoke from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager from utils.decorator.points_decorator import plugin_points_cost, points_reward_decorator @@ -184,6 +185,7 @@ class GuessSongPlugin(MessagePluginInterface): return command in self._commands @plugin_stats_decorator(plugin_name="猜歌名游戏") + @group_feature_rate_limit(max_per_minute=1, feature_key=FEATURE_KEY) async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]: """处理消息""" content = str(message.get("content", "")).strip() diff --git a/plugins/video/main.py b/plugins/video/main.py index a898199..2e7d632 100644 --- a/plugins/video/main.py +++ b/plugins/video/main.py @@ -12,6 +12,7 @@ import cv2 from base.plugin_common.message_plugin_interface import MessagePluginInterface from base.plugin_common.plugin_interface import PluginStatus from utils.decorator.plugin_decorators import plugin_stats_decorator +from utils.decorator.rate_limit_decorator import group_feature_rate_limit from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager from utils.decorator.points_decorator import plugin_points_cost from wechat_ipad import WechatAPIClient @@ -116,6 +117,7 @@ class VideoPlugin(MessagePluginInterface): @plugin_stats_decorator(plugin_name="视频插件") @plugin_points_cost(5, "视频插件消耗积分", FEATURE_KEY) + @group_feature_rate_limit(max_per_minute=3, feature_key=FEATURE_KEY) async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]: """处理消息""" content = str(message.get("content", "")).strip() diff --git a/plugins/video_man/main.py b/plugins/video_man/main.py index e99741f..54ca8f4 100644 --- a/plugins/video_man/main.py +++ b/plugins/video_man/main.py @@ -14,6 +14,7 @@ from base.plugin_common.message_plugin_interface import MessagePluginInterface from base.plugin_common.plugin_interface import PluginStatus from utils.decorator.plugin_decorators import plugin_stats_decorator from utils.decorator.points_decorator import plugin_points_cost +from utils.decorator.rate_limit_decorator import group_feature_rate_limit from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager from wechat_ipad import WechatAPIClient @@ -108,6 +109,7 @@ class VideoManPlugin(MessagePluginInterface): @plugin_stats_decorator(plugin_name="猛男视频") @plugin_points_cost(2, "猛男视频消耗积分", FEATURE_KEY) + @group_feature_rate_limit(max_per_minute=3, feature_key=FEATURE_KEY) async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]: """处理消息""" content = str(message.get("content", "")).strip()