测试auth动态化
This commit is contained in:
@@ -284,7 +284,7 @@ class GameTaskPlugin(MessagePluginInterface):
|
|||||||
sender
|
sender
|
||||||
)
|
)
|
||||||
|
|
||||||
@points_reward_decorator(calculate_game_points, "game", "百科答题奖励", Feature.TASK_GAME)
|
@points_reward_decorator(calculate_game_points, "game", "百科答题奖励", FEATURE_KEY)
|
||||||
async def _handle_submit_answer(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
async def _handle_submit_answer(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
||||||
"""处理提交答案请求"""
|
"""处理提交答案请求"""
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ class GuessSongPlugin(MessagePluginInterface):
|
|||||||
await bot.send_text_message(session_id, f"❌开始猜歌游戏出错,请稍后重试", sender)
|
await bot.send_text_message(session_id, f"❌开始猜歌游戏出错,请稍后重试", sender)
|
||||||
return False, f"处理出错: {e}"
|
return False, f"处理出错: {e}"
|
||||||
|
|
||||||
@points_reward_decorator(5, "game", "猜歌名游戏", Feature.GUESS_MUSIC)
|
@points_reward_decorator(5, "game", "猜歌名游戏", FEATURE_KEY)
|
||||||
async def _check_answer(self, message: Dict[str, Any]) -> Tuple[bool, str]:
|
async def _check_answer(self, message: Dict[str, Any]) -> Tuple[bool, str]:
|
||||||
"""检查答案"""
|
"""检查答案"""
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ class JDTokenPlugin(MessagePluginInterface):
|
|||||||
|
|
||||||
# 功能权限常量
|
# 功能权限常量
|
||||||
FEATURE_KEY = "JD_TOKEN"
|
FEATURE_KEY = "JD_TOKEN"
|
||||||
FEATURE_DESCRIPTION = "🔑 京东签到Token设置 [设置京东]"
|
FEATURE_DESCRIPTION = "JD_京豆token设置 [设置京东 pt_key=xxx;pt_pin=xxx; 备注名称]"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
|
|||||||
@@ -1,26 +1,29 @@
|
|||||||
|
import os
|
||||||
|
import random
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from loguru import logger
|
|
||||||
import pytz
|
|
||||||
from typing import Dict, Any, List, Optional, Tuple
|
from typing import Dict, Any, List, Optional, Tuple
|
||||||
|
|
||||||
from db.connection import DBConnectionManager
|
import pytz
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
from base.plugin_common.message_plugin_interface import MessagePluginInterface
|
from base.plugin_common.message_plugin_interface import MessagePluginInterface
|
||||||
from base.plugin_common.plugin_interface import PluginStatus
|
from base.plugin_common.plugin_interface import PluginStatus
|
||||||
from utils.decorator.plugin_decorators import plugin_stats_decorator
|
from db.connection import DBConnectionManager
|
||||||
from utils.revoke.message_auto_revoke import MessageAutoRevoke
|
|
||||||
from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager
|
|
||||||
from db.sign_in import SignInDB
|
from db.sign_in import SignInDB
|
||||||
from db.sign_in_redis import SignInRedisDB
|
from db.sign_in_redis import SignInRedisDB
|
||||||
import random
|
from utils.decorator.plugin_decorators import plugin_stats_decorator
|
||||||
import os
|
|
||||||
|
|
||||||
from utils.decorator.points_decorator import points_reward_decorator
|
from utils.decorator.points_decorator import points_reward_decorator
|
||||||
|
from utils.revoke.message_auto_revoke import MessageAutoRevoke
|
||||||
|
from utils.robot_cmd.robot_command import PermissionStatus, GroupBotManager
|
||||||
from wechat_ipad import WechatAPIClient
|
from wechat_ipad import WechatAPIClient
|
||||||
|
|
||||||
|
|
||||||
class MessageSignPlugin(MessagePluginInterface):
|
class MessageSignPlugin(MessagePluginInterface):
|
||||||
"""签到插件"""
|
"""签到插件"""
|
||||||
|
|
||||||
|
# 功能权限常量
|
||||||
|
FEATURE_KEY = "SIGN_IN"
|
||||||
|
FEATURE_DESCRIPTION = "✅ 签到功能 [签到, 每日签到, qd, Qd, QD, 上班, 牛马]"
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
return "签到系统"
|
return "签到系统"
|
||||||
@@ -207,7 +210,7 @@ class MessageSignPlugin(MessagePluginInterface):
|
|||||||
self.bot = message.get("bot")
|
self.bot = message.get("bot")
|
||||||
|
|
||||||
# 检查权限
|
# 检查权限
|
||||||
if roomid and gbm.get_group_permission(roomid, Feature.SIGNIN) == PermissionStatus.DISABLED:
|
if roomid and gbm.get_group_permission(roomid, self.feature) == PermissionStatus.DISABLED:
|
||||||
return False, "没有权限"
|
return False, "没有权限"
|
||||||
|
|
||||||
# 处理补签命令
|
# 处理补签命令
|
||||||
@@ -221,7 +224,7 @@ class MessageSignPlugin(MessagePluginInterface):
|
|||||||
return False, "不支持的命令"
|
return False, "不支持的命令"
|
||||||
|
|
||||||
# 添加签到处理方法,应用积分奖励装饰器
|
# 添加签到处理方法,应用积分奖励装饰器
|
||||||
@points_reward_decorator(calculate_sign_in_points, "checkin", "每日签到奖励", Feature.SIGNIN)
|
@points_reward_decorator(calculate_sign_in_points, "checkin", "每日签到奖励", FEATURE_KEY)
|
||||||
async def _handle_sign_in(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
async def _handle_sign_in(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
||||||
"""处理签到请求"""
|
"""处理签到请求"""
|
||||||
sender = message.get("sender")
|
sender = message.get("sender")
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ from wechat_ipad.models.appmsg_xml import MUSIC_XML
|
|||||||
class MusicPlugin(MessagePluginInterface):
|
class MusicPlugin(MessagePluginInterface):
|
||||||
"""音乐点播插件"""
|
"""音乐点播插件"""
|
||||||
|
|
||||||
|
# 功能权限常量
|
||||||
|
FEATURE_KEY = "MUSIC"
|
||||||
|
FEATURE_DESCRIPTION = "🎵 点歌功能 [点歌, 音乐, 音乐点播, 点播音乐, 音乐点歌]"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
return "音乐点播"
|
return "音乐点播"
|
||||||
@@ -45,6 +49,7 @@ class MusicPlugin(MessagePluginInterface):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
self.feature = self.register_feature()
|
||||||
|
|
||||||
def initialize(self, context: Dict[str, Any]) -> bool:
|
def initialize(self, context: Dict[str, Any]) -> bool:
|
||||||
"""初始化插件"""
|
"""初始化插件"""
|
||||||
@@ -84,7 +89,7 @@ class MusicPlugin(MessagePluginInterface):
|
|||||||
return command in self._commands
|
return command in self._commands
|
||||||
|
|
||||||
@plugin_stats_decorator(plugin_name="音乐点播")
|
@plugin_stats_decorator(plugin_name="音乐点播")
|
||||||
@plugin_points_cost(2, "音乐点播消耗积分", Feature.MUSIC)
|
@plugin_points_cost(2, "音乐点播消耗积分", FEATURE_KEY)
|
||||||
async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
||||||
"""处理消息"""
|
"""处理消息"""
|
||||||
content = str(message.get("content", "")).strip()
|
content = str(message.get("content", "")).strip()
|
||||||
@@ -102,7 +107,7 @@ class MusicPlugin(MessagePluginInterface):
|
|||||||
return False, "命令格式错误"
|
return False, "命令格式错误"
|
||||||
|
|
||||||
# 检查权限
|
# 检查权限
|
||||||
if roomid and gbm.get_group_permission(roomid, Feature.MUSIC) == PermissionStatus.DISABLED:
|
if roomid and gbm.get_group_permission(roomid, self.feature) == PermissionStatus.DISABLED:
|
||||||
return False, "没有权限"
|
return False, "没有权限"
|
||||||
|
|
||||||
# 提取歌曲名
|
# 提取歌曲名
|
||||||
|
|||||||
@@ -13,18 +13,6 @@ from db.connection import DBConnectionManager
|
|||||||
class StatsCollectorPlugin(PluginInterface):
|
class StatsCollectorPlugin(PluginInterface):
|
||||||
"""统计收集插件"""
|
"""统计收集插件"""
|
||||||
|
|
||||||
# 功能权限常量
|
|
||||||
FEATURE_KEY = "STATS_COLLECTOR"
|
|
||||||
FEATURE_DESCRIPTION = "📊 指令记录功能 [自动记录指令使用情况]"
|
|
||||||
|
|
||||||
@property
|
|
||||||
def feature_key(self) -> Optional[str]:
|
|
||||||
return self.FEATURE_KEY
|
|
||||||
|
|
||||||
@property
|
|
||||||
def feature_description(self) -> Optional[str]:
|
|
||||||
return self.FEATURE_DESCRIPTION
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
return "指令记录"
|
return "指令记录"
|
||||||
@@ -63,7 +51,6 @@ class StatsCollectorPlugin(PluginInterface):
|
|||||||
self.db_manager = DBConnectionManager.get_instance()
|
self.db_manager = DBConnectionManager.get_instance()
|
||||||
self.stats_db = StatsDBOperator(self.db_manager)
|
self.stats_db = StatsDBOperator(self.db_manager)
|
||||||
# 注册功能权限
|
# 注册功能权限
|
||||||
self.feature = self.register_feature()
|
|
||||||
|
|
||||||
def initialize(self, config: Dict[str, Any]) -> bool:
|
def initialize(self, config: Dict[str, Any]) -> bool:
|
||||||
"""初始化插件"""
|
"""初始化插件"""
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ class VideoPlugin(MessagePluginInterface):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.bot: WechatAPIClient = None
|
self.bot: WechatAPIClient = None
|
||||||
|
self.feature = self.register_feature()
|
||||||
# 使用Path对象处理路径,自动适应不同操作系统
|
# 使用Path对象处理路径,自动适应不同操作系统
|
||||||
self.download_dir = str(Path(Path(__file__).parent, "down_load_dir"))
|
self.download_dir = str(Path(Path(__file__).parent, "down_load_dir"))
|
||||||
|
|
||||||
@@ -112,7 +113,7 @@ class VideoPlugin(MessagePluginInterface):
|
|||||||
return command in self._commands
|
return command in self._commands
|
||||||
|
|
||||||
@plugin_stats_decorator(plugin_name="视频插件")
|
@plugin_stats_decorator(plugin_name="视频插件")
|
||||||
@plugin_points_cost(2, "视频插件消耗积分", Feature.VIDEO)
|
@plugin_points_cost(2, "视频插件消耗积分", FEATURE_KEY)
|
||||||
async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
async def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
||||||
"""处理消息"""
|
"""处理消息"""
|
||||||
content = str(message.get("content", "")).strip()
|
content = str(message.get("content", "")).strip()
|
||||||
@@ -123,7 +124,7 @@ class VideoPlugin(MessagePluginInterface):
|
|||||||
self.bot: WechatAPIClient = message.get("bot")
|
self.bot: WechatAPIClient = message.get("bot")
|
||||||
|
|
||||||
# 检查权限
|
# 检查权限
|
||||||
if roomid and gbm.get_group_permission(roomid, Feature.VIDEO) == PermissionStatus.DISABLED:
|
if roomid and gbm.get_group_permission(roomid, self.feature) == PermissionStatus.DISABLED:
|
||||||
return False, "没有权限"
|
return False, "没有权限"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from base.plugin_common.plugin_interface import PluginStatus
|
|||||||
from utils.decorator.plugin_decorators import plugin_stats_decorator
|
from utils.decorator.plugin_decorators import plugin_stats_decorator
|
||||||
from utils.decorator.points_decorator import plugin_points_cost
|
from utils.decorator.points_decorator import plugin_points_cost
|
||||||
from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager
|
from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager
|
||||||
from base.wechat_api.wechat_api_client import WechatAPIClient
|
from wechat_ipad import WechatAPIClient
|
||||||
|
|
||||||
|
|
||||||
class VideoManPlugin(MessagePluginInterface):
|
class VideoManPlugin(MessagePluginInterface):
|
||||||
@@ -21,7 +21,7 @@ class VideoManPlugin(MessagePluginInterface):
|
|||||||
|
|
||||||
# 功能权限常量
|
# 功能权限常量
|
||||||
FEATURE_KEY = "VIDEO_MAN"
|
FEATURE_KEY = "VIDEO_MAN"
|
||||||
FEATURE_DESCRIPTION = "💪 猛男视频功能 [猛男视频, 猛男, 来个猛男, 搞个猛男]"
|
FEATURE_DESCRIPTION = "💪 肌肉视频 [猛男, 肌肉, 帅哥]"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ from wechat_ipad import WechatAPIClient
|
|||||||
|
|
||||||
|
|
||||||
def points_reward_decorator(points_calculator: Union[int, Callable], source_type: str = "other",
|
def points_reward_decorator(points_calculator: Union[int, Callable], source_type: str = "other",
|
||||||
description: str = None, feature: Feature = None):
|
description: str = None, feature_key: str = None):
|
||||||
"""积分奖励装饰器
|
"""积分奖励装饰器
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
points_calculator: 积分数量或计算函数,如果是函数,接收(self, message, success, response)参数并返回积分数量
|
points_calculator: 积分数量或计算函数,如果是函数,接收(self, message, success, response)参数并返回积分数量
|
||||||
source_type: 积分来源类型 (checkin, game, other)
|
source_type: 积分来源类型 (checkin, game, other)
|
||||||
description: 积分奖励描述
|
description: 积分奖励描述
|
||||||
feature: 功能权限枚举
|
feature_key: 功能权限键名
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
装饰器函数
|
装饰器函数
|
||||||
@@ -34,8 +34,10 @@ def points_reward_decorator(points_calculator: Union[int, Callable], source_type
|
|||||||
|
|
||||||
bot: WechatAPIClient = message.get("bot")
|
bot: WechatAPIClient = message.get("bot")
|
||||||
revoke: MessageAutoRevoke = message.get("revoke")
|
revoke: MessageAutoRevoke = message.get("revoke")
|
||||||
if feature and roomid:
|
if feature_key and roomid:
|
||||||
if GroupBotManager.get_group_permission(roomid, feature) == PermissionStatus.DISABLED:
|
# 获取功能权限枚举
|
||||||
|
feature = getattr(Feature, feature_key, None)
|
||||||
|
if feature and GroupBotManager.get_group_permission(roomid, feature) == PermissionStatus.DISABLED:
|
||||||
return False, "没有权限"
|
return False, "没有权限"
|
||||||
|
|
||||||
# 调用原始异步方法
|
# 调用原始异步方法
|
||||||
@@ -106,8 +108,10 @@ def points_reward_decorator(points_calculator: Union[int, Callable], source_type
|
|||||||
# 检查权限
|
# 检查权限
|
||||||
roomid = message.get("roomid", "")
|
roomid = message.get("roomid", "")
|
||||||
|
|
||||||
if feature and roomid:
|
if feature_key and roomid:
|
||||||
if GroupBotManager.get_group_permission(roomid, feature) == PermissionStatus.DISABLED:
|
# 获取功能权限枚举
|
||||||
|
feature = getattr(Feature, feature_key, None)
|
||||||
|
if feature and GroupBotManager.get_group_permission(roomid, feature) == PermissionStatus.DISABLED:
|
||||||
return False, "没有权限"
|
return False, "没有权限"
|
||||||
|
|
||||||
# 调用原始同步方法
|
# 调用原始同步方法
|
||||||
|
|||||||
@@ -27,6 +27,29 @@ class PermissionStatus(Enum):
|
|||||||
class Feature(Enum):
|
class Feature(Enum):
|
||||||
"""功能权限枚举,带序号"""
|
"""功能权限枚举,带序号"""
|
||||||
ROBOT = 1, "🔧 群机器人 [总开关]"
|
ROBOT = 1, "🔧 群机器人 [总开关]"
|
||||||
|
# DAILY_NEWS = 2, "📰 每日新闻自动播报 [每日8:30定时发送]"
|
||||||
|
# DAILY_SUMMARY = 3, "🕤 每日群发言总结 [每日9:30定时发送]"
|
||||||
|
# AI_CAPABILITY = 4, "🤖 AI对话 [ai, 聊天, AI] 用法:ai 如何写一个机器人?"
|
||||||
|
# SUMMARY_CAPABILITY = 5, "📝 群总结能力 [#总结]"
|
||||||
|
# PDF_CAPABILITY = 6, "📄 sehuatang PDF能力 [无]"
|
||||||
|
# EPIC = 7, "📊 EPIC自动播报 [每周五自动发送]" # 新增的功能
|
||||||
|
# PIC = 8, "🖼️ 图来能力 [图来, 秀人]"
|
||||||
|
# TASK_GAME = 9, "📚 百科答题 [/t, /s, /a 任务ID 答案]"
|
||||||
|
# MUSIC = 10, "🎵 点歌功能 [点歌, 音乐, 音乐点播, 点播音乐, 音乐点歌]"
|
||||||
|
# SIGNIN = 11, "✅ 签到功能 [签到, 每日签到, qd, Qd, QD, 上班, 牛马]"
|
||||||
|
# POINT_TRADE = 12, "🎁 积分赠送 [积分赠送 1 @XX, 积分排行, 打劫 @XX, 保释 @XX]"
|
||||||
|
# BEAUTY_LEG = 13, "🦵 腿来能力 [美腿, 腿来]"
|
||||||
|
# VIDEO = 14, "🎥 黑丝视频 [黑丝视频, 黑丝, 来个黑丝, 搞个黑丝]"
|
||||||
|
# VIDEO_MAN = 15, "💪 肌肉视频 [猛男, 肌肉, 帅哥]"
|
||||||
|
# # GROUP_ADD = 16, "加群提醒"
|
||||||
|
# DOUYIN_PARSER = 17, "🎥 抖音链接转视频"
|
||||||
|
# GROUP_MEMBER_CHANGE = 18, "👥 群成员变更提醒 [自动触发]"
|
||||||
|
# # KID_PHOTO_EXTRACT = 19, "儿童照片提取转发功能" # 小朋友照片提取功能
|
||||||
|
# NEWS = 20, "🌍 全球政治经济新闻"
|
||||||
|
# WEATHER = 21, "🌤️ 天气查询 [上海天气, 天气上海]"
|
||||||
|
# JD_TOKEN = 22, "🔑 JD_京豆token设置 [设置京东 pt_key=xxx;pt_pin=xxx; 备注名称]"
|
||||||
|
# AI_AUTO = 23, "💬 仿真对话"
|
||||||
|
# GUESS_MUSIC = 24, "🎤 猜歌名游戏 [猜歌名 - 开始 | 猜歌名 歌手名 - 指定歌手 | 猜歌名 歌名 - 提交答案]"
|
||||||
|
|
||||||
def __new__(cls, value, description):
|
def __new__(cls, value, description):
|
||||||
obj = object.__new__(cls)
|
obj = object.__new__(cls)
|
||||||
|
|||||||
Reference in New Issue
Block a user