# WXBOT-ZP **Repository Path**: yr_binary/WXBOT-ZP ## Basic Information - **Project Name**: WXBOT-ZP - **Description**: 微信机器人雏形demo - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2025-02-13 - **Last Updated**: 2025-02-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微信自动回复机器人项目![Stars](https://img.shields.io/badge/dynamic/json?label=stars&url=https://gitee.com/api/v5/repos/yr_binary/WXBOT-ZP/stargazers&query=$.length&color=brightgreen) 该项目是一个基于 `wcferry` 库构建的微信自动回复机器人,支持超级管理员管理白名单,允许用户根据消息内容触发不同的操作。机器人可以根据收到的消息内容进行自动回复,特别是针对超级管理员指令和普通用户的白名单管理。 ## 主要功能 1. **超级管理员功能**:支持通过超级管理员账号管理白名单,允许添加或删除群聊或个人白名单。 2. **自动回复**:根据接收到的指令和内容进行自动回复,例如普通消息的保存和白名单检查。 3. **数据库集成**:使用 `pymysql` 与 MySQL 数据库进行交互,保存用户消息和 GPT 消息,并管理白名单、超级管理员等数据。 ## 技术栈 - **Python**:主要编程语言。 - **wcferry**:用于与微信进行交互的库。 - **PyMySQL**:用于连接 MySQL 数据库。 - **多线程**:实现消息监听与处理的多线程设计。 ## 安装依赖 1. 安装 Python 依赖库: ```bash pip install wcferry pymysql ``` ## 配置数据库 在使用此机器人之前,需要在 MySQL 数据库中创建并配置必要的表。 ### 数据库结构 ```sql CREATE DATABASE wxbot; CREATE TABLE gp ( id INT AUTO_INCREMENT PRIMARY KEY, roomid VARCHAR(255), msg TEXT, gpt_msg TEXT ); CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, sender VARCHAR(255), msg TEXT, gpt_msg TEXT ); CREATE TABLE `allow` ( `id` INT NOT NULL AUTO_INCREMENT, `type` ENUM('user', 'room') NOT NULL, -- 'user' 表示用户,'room' 表示群聊 `identifier` VARCHAR(255) NOT NULL, -- 存储用户的 `sender` 或群聊的 `roomid` PRIMARY KEY (`id`), UNIQUE KEY `identifier_unique` (`type`, `identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 超级管理员表 CREATE TABLE `admin` ( `id` INT NOT NULL AUTO_INCREMENT, `wxid` VARCHAR(255) NOT NULL, -- 超级管理员的 wxid PRIMARY KEY (`id`), UNIQUE KEY `wxid_unique` (`wxid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 白名单表 CREATE TABLE `allow` ( `id` INT NOT NULL AUTO_INCREMENT, `type` ENUM('user', 'room') NOT NULL, -- 'user' 表示用户,'room' 表示群聊 `identifier` VARCHAR(255) NOT NULL, -- 存储用户的 `sender` 或群聊的 `roomid` PRIMARY KEY (`id`), UNIQUE KEY `identifier_unique` (`type`, `identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 配置表 CREATE TABLE `config` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, -- 配置名称 `value` VARCHAR(255) NOT NULL, -- 配置值 PRIMARY KEY (`id`), UNIQUE KEY `name_unique` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 插入初始数据 INSERT INTO `admin` (`wxid`) VALUES ('wxid_gwhmredzdf1w22'); -- 初始超级管理员 INSERT INTO `config` (`name`, `value`) VALUES ('gp_allow', 'true'); -- 默认群聊白名单开启 INSERT INTO `config` (`name`, `value`) VALUES ('user_allow', 'true'); -- 默认个人白名单开启 ``` ### 数据库字段说明 - **gp**:存储与 GPT 相关的消息。 - **users**:存储用户发送的消息及其相应的 GPT 回复。 - **allow**:存储白名单信息,支持群聊和个人白名单。 - **admin**:存储超级管理员的 `wxid`。 - **config**:存储配置项,例如是否开启群聊和个人白名单。 ## 运行说明 1. 配置数据库连接参数: 在代码中设置数据库连接信息,确保连接信息与实际数据库一致。 2. 启动微信消息监听: 运行程序后,机器人会开始监听并处理接收到的消息。可以根据收到的消息内容执行不同的操作,包括回复普通消息和管理白名单。 3. 管理白名单: - 超级管理员可以通过指令 `/add` 和 `/delete` 添加或删除群聊或个人白名单。 - 只有在白名单中的用户和群聊才能触发 GPT 消息生成或保存消息。 ## 核心代码解析 ### 1. 消息处理 ```python def processMsg(msg: WxMsg): print(f"收到消息: {msg.content}") msg_content = msg.content.strip() print(f"清理后的消息内容: {msg_content}") # 超级管理员指令处理 if msg_content.startswith("/"): if msg.sender == 'wxid_gwhmredzdf1w22': # 判断是否为超级管理员 if msg_content.startswith("/add"): if msg.roomid: # 添加群聊白名单 modify_whitelist(msg.sender, msg.roomid, add=True) else: # 添加个人白名单 modify_whitelist(msg.sender, None, add=True) elif msg_content.startswith("/delete"): if msg.roomid: # 删除群聊白名单 modify_whitelist(msg.sender, msg.roomid, add=False) else: # 删除个人白名单 modify_whitelist(msg.sender, None, add=False) else: # 处理普通消息 if is_allowed(msg.sender, msg.roomid): save_msg_to_db(msg.sender, msg.roomid, msg_content) ``` - **processMsg**:处理收到的消息。如果是超级管理员指令(以 `/` 开头),则根据指令进行白名单操作;如果是普通消息,则根据白名单检查是否允许操作,并将消息保存到数据库。 ### 2. 白名单管理 ```python def modify_whitelist(wxid, roomid, add=True): whitelist_type = 'room' if roomid else 'user' identifier = roomid if roomid else wxid action = "INSERT" if add else "DELETE" connection = connect_db() if connection: try: with connection.cursor() as cursor: if action == "INSERT": sql = f"INSERT INTO allow (type, identifier) VALUES (%s, %s)" cursor.execute(sql, (whitelist_type, identifier)) elif action == "DELETE": sql = f"DELETE FROM allow WHERE type = %s AND identifier = %s" cursor.execute(sql, (whitelist_type, identifier)) connection.commit() print(f"{'添加' if add else '删除'}白名单成功") except Exception as e: print(f"操作白名单时出错: {e}") finally: connection.close() else: print("无法连接到数据库,白名单操作失败") ``` - **modify_whitelist**:根据传入的微信 ID 或群聊 ID,添加或删除白名单项。 ### 3. 数据库连接 ```python def connect_db(): try: connection = pymysql.connect( host=db_config['host'], user=db_config['user'], password=db_config['password'], database=db_config['database'], charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) print("数据库连接成功") return connection except Exception as e: print(f"连接数据库失败: {e}") return None ``` - **connect_db**:连接 MySQL 数据库,确保数据库操作的正确性。 ## 贡献 欢迎提交 issues 或 pull requests,参与项目开发和改进。 ## License 本项目使用 MIT 许可证,详细内容请查看 [LICENSE](LICENSE) 文件。 --- 这是一个简单的微信自动回复机器人,支持超级管理员的白名单管理功能和普通用户的自动消息回复。你可以根据需要扩展功能,例如增加更多的指令或消息处理逻辑。