From cf78facbad18ca6a06ada334f292820f3e6b0672 Mon Sep 17 00:00:00 2001 From: liuwei Date: Thu, 20 Mar 2025 14:26:52 +0800 Subject: [PATCH] =?UTF-8?q?feature=EF=BC=9A1.=E5=8A=A0=E7=BE=A4=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8F=92=E4=BB=B6=E5=8C=96=EF=BC=9B2.=E6=88=90?= =?UTF-8?q?=E5=91=98=E5=8F=98=E6=9B=B4=E4=B8=8D=E7=9B=91=E5=90=AC=E6=B6=88?= =?UTF-8?q?=E6=81=AF=EF=BC=8C=E4=BD=BF=E7=94=A8=E5=AE=9A=E6=97=B6=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E7=AD=96=E7=95=A5=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/group_add/main.py | 111 ++++++++++++++++++++++++++------------ 1 file changed, 76 insertions(+), 35 deletions(-) diff --git a/plugins/group_add/main.py b/plugins/group_add/main.py index 5821996..6617989 100644 --- a/plugins/group_add/main.py +++ b/plugins/group_add/main.py @@ -1,9 +1,9 @@ import logging import re 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.plugin_interface import PluginStatus @@ -13,20 +13,40 @@ from robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager 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): super().__init__() - self.name = "群成员加入欢迎" - self.description = "当有新成员加入群聊时,自动发送欢迎消息" - self.version = "1.0.0" - self.author = "Trae AI" - self.wcf = None self.gbm = None - self.LOG = logging.getLogger(f"Plugin.{self.name}") + self.LOG = None self.enable = True def initialize(self, context: Dict[str, Any]) -> bool: """初始化插件""" + self.LOG = logging.getLogger(f"Plugin.{self.name}") self.LOG.info(f"正在初始化 {self.name} 插件...") # 保存上下文对象 @@ -45,55 +65,76 @@ class GroupAddPlugin(MessagePluginInterface): plugin_config = self._config.get("GroupAdd", {}) 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 - 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: 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 # 检查群权限 - 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 # 使用正则表达式提取双引号中的内容,判断是否为加入群聊消息 - match = re.search(r'"(.*?)"', msg.content) + match = re.search(r'"(.*?)".*?加入群聊', content) if not match: 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') # 提取昵称并发送欢迎消息 nickname = match.group(1) welcome_message = f"🎉 欢迎 【{nickname}】 加入群聊👋 \n 🕒 {now_time} 🕒 !" - self.wcf.send_text(welcome_message, msg.roomid) - self.LOG.info(f"已发送欢迎消息给新成员 {nickname} 在群 {msg.roomid}") - return True - - @property - def commands(self) -> List[str]: - """插件支持的命令列表""" - return [] + # 发送欢迎消息 + wcf.send_text(welcome_message, roomid) + + self.LOG.info(f"已发送欢迎消息给新成员 {nickname} 在群 {roomid}") + return True, f"已欢迎 {nickname}" def get_help(self) -> str: """获取插件帮助信息""" - 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 \ No newline at end of file + return """群成员加入欢迎插件: + 功能:当有新成员加入群聊时,自动发送欢迎消息。 + 无需手动触发,系统自动运行。 + 可在群管理中启用或禁用此功能。"""