feature:1.加群功能插件化;2.成员变更不监听消息,使用定时检查策略;

This commit is contained in:
liuwei
2025-03-20 14:26:52 +08:00
parent a7d0d400f9
commit cf78facbad

View File

@@ -1,9 +1,9 @@
import logging import logging
import re import re
from datetime import datetime from datetime import datetime
from typing import Dict, Any, List, Optional from typing import Dict, Any, List, Optional, Tuple
from wcferry import WxMsg from wcferry import Wcf, WxMsg
from plugin_common.message_plugin_interface import MessagePluginInterface from plugin_common.message_plugin_interface import MessagePluginInterface
from plugin_common.plugin_interface import PluginStatus from plugin_common.plugin_interface import PluginStatus
@@ -13,20 +13,40 @@ from robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager
class GroupAddPlugin(MessagePluginInterface): class GroupAddPlugin(MessagePluginInterface):
"""群成员加入欢迎插件""" """群成员加入欢迎插件"""
@property
def name(self) -> str:
return "群成员加入欢迎"
@property
def version(self) -> str:
return "1.0.0"
@property
def description(self) -> str:
return "当有新成员加入群聊时,自动发送欢迎消息"
@property
def author(self) -> str:
return "Trae AI"
@property
def command_prefix(self) -> Optional[str]:
return None # 不需要命令前缀,因为只处理系统消息
@property
def commands(self) -> List[str]:
return [] # 不支持命令
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.name = "群成员加入欢迎"
self.description = "当有新成员加入群聊时,自动发送欢迎消息"
self.version = "1.0.0"
self.author = "Trae AI"
self.wcf = None self.wcf = None
self.gbm = None self.gbm = None
self.LOG = logging.getLogger(f"Plugin.{self.name}") self.LOG = None
self.enable = True self.enable = True
def initialize(self, context: Dict[str, Any]) -> bool: def initialize(self, context: Dict[str, Any]) -> bool:
"""初始化插件""" """初始化插件"""
self.LOG = logging.getLogger(f"Plugin.{self.name}")
self.LOG.info(f"正在初始化 {self.name} 插件...") self.LOG.info(f"正在初始化 {self.name} 插件...")
# 保存上下文对象 # 保存上下文对象
@@ -45,55 +65,76 @@ class GroupAddPlugin(MessagePluginInterface):
plugin_config = self._config.get("GroupAdd", {}) plugin_config = self._config.get("GroupAdd", {})
self.enable = plugin_config.get("enable", True) self.enable = plugin_config.get("enable", True)
self.LOG.info(f"{self.name} 插件初始化完成,启用状态: {self.enable}") self.LOG.info(f"[{self.name}] 插件初始化完成,启用状态: {self.enable}")
return True return True
def on_receive_message(self, msg: WxMsg) -> bool: def start(self) -> bool:
"""处理接收到的消息""" """启动插件"""
self.LOG.info(f"[{self.name}] 插件已启动")
self.status = PluginStatus.RUNNING
return True
def stop(self) -> bool:
"""停止插件"""
self.LOG.info(f"[{self.name}] 插件已停止")
self.status = PluginStatus.STOPPED
return True
def can_process(self, message: Dict[str, Any]) -> bool:
"""检查是否可以处理该消息"""
if not self.enable: if not self.enable:
return False return False
# 获取消息类型和群ID
msg_type = message.get("type")
roomid = message.get("roomid", "")
content = message.get("content", "")
# 只处理群系统消息 # 只处理群系统消息
if msg.type != 10000 or not msg.from_group(): if msg_type != 10000 or not roomid:
return False return False
# 检查群权限 # 检查群权限
if self.gbm.get_group_permission(msg.roomid, Feature.GROUP_ADD) == PermissionStatus.DISABLED: gbm = message.get("gbm")
if gbm and gbm.get_group_permission(roomid, Feature.GROUP_ADD) == PermissionStatus.DISABLED:
return False return False
# 使用正则表达式提取双引号中的内容,判断是否为加入群聊消息 # 使用正则表达式提取双引号中的内容,判断是否为加入群聊消息
match = re.search(r'"(.*?)"', msg.content) match = re.search(r'"(.*?)".*?加入群聊', content)
if not match: if not match:
return False return False
return True
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
"""处理消息"""
content = message.get("content", "")
roomid = message.get("roomid", "")
wcf: Wcf = message.get("wcf")
self.LOG.info(f"插件执行: {self.name}{content}")
# 提取昵称
match = re.search(r'"(.*?)"', content)
if not match:
return False, "无法提取昵称"
# 获取当前时间 # 获取当前时间
now_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') now_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 提取昵称并发送欢迎消息 # 提取昵称并发送欢迎消息
nickname = match.group(1) nickname = match.group(1)
welcome_message = f"🎉 欢迎 【{nickname}】 加入群聊👋 \n 🕒 {now_time} 🕒 " welcome_message = f"🎉 欢迎 【{nickname}】 加入群聊👋 \n 🕒 {now_time} 🕒 "
self.wcf.send_text(welcome_message, msg.roomid)
self.LOG.info(f"已发送欢迎消息给新成员 {nickname} 在群 {msg.roomid}") # 发送欢迎消息
return True wcf.send_text(welcome_message, roomid)
@property self.LOG.info(f"已发送欢迎消息给新成员 {nickname} 在群 {roomid}")
def commands(self) -> List[str]: return True, f"已欢迎 {nickname}"
"""插件支持的命令列表"""
return []
def get_help(self) -> str: def get_help(self) -> str:
"""获取插件帮助信息""" """获取插件帮助信息"""
return "群成员加入欢迎插件:当有新成员加入群聊时,自动发送欢迎消息。" return """群成员加入欢迎插件:
功能:当有新成员加入群聊时,自动发送欢迎消息。
def start(self) -> bool: 无需手动触发,系统自动运行。
"""启动插件""" 可在群管理中启用或禁用此功能。"""
self.enable = True
self.LOG.info(f"{self.name} 插件已启动")
return True
def stop(self) -> bool:
"""停止插件"""
self.enable = False
self.LOG.info(f"{self.name} 插件已停止")
return True