diff --git a/message_util.py b/message_util.py index 6bf569d..06f65a3 100644 --- a/message_util.py +++ b/message_util.py @@ -3,9 +3,7 @@ import logging import os.path import random import time -from typing import Optional -from gewechat_client import GewechatClient from gewechat.client import gewe_client from utils.wechat.contact_manager import ContactManager diff --git a/robot.py b/robot.py index e91f4a6..b2483cb 100644 --- a/robot.py +++ b/robot.py @@ -11,6 +11,7 @@ from base.func_news import News from configuration import Config from gewechat.call_back_message.message import WxMessage, MessageType from gewechat.client import gewe_client +from gewechat.response.model.group.chatroom_info import ChatroomInfo from gewechat.response.model.personal.profile import Profile from utils.json_converter import json_to_object from utils.wechat.message_to_db import MessageStorage @@ -162,6 +163,15 @@ class Robot(Job): GroupBotManager.set_group_permission(msg.roomid, Feature.ROBOT, PermissionStatus.ENABLED) # 更新联系人信息 # 群第一次加入机器人管理,自动添加并开启机器人功能,需要进行群成员信息初始化。请完成写入数据库,并更新联系人信息 + try: + chatroom_info = self.client.get_chatroom_info(self.app_id, msg.roomid) + resp_obj = json_to_object(chatroom_info) + infos = resp_obj.data + self.contacts_db.save_chatroom_info(infos) + self.LOG.info(f"添加新的群信息到数据库成功:{infos}") + except Exception as e: + self.LOG.error(f"chatroom_info save error: {e}") + return except Exception as e: self.LOG.error(f"加入新群,自动添加并开启机器人功能 error: {e}") @@ -180,83 +190,83 @@ class Robot(Job): for info in infos: self.LOG.info(f"已添加新用户信息到数据库: {wxid}") # 更新缓存 - self.allContacts[wxid] = info.get("nickName", "wxid") + self.allContacts[wxid] = info.get("nickName", "nickName") self.contact_manager.set_contacts(self.allContacts) self.LOG.info(f"已维护新用户信息到缓存: {wxid}") self.contacts_db.save_chatroom_member_detail(msg.roomid, infos) except Exception as e: self.LOG.error(f"添加新用户信息到数据库失败: {e}") - - # 发布消息接收事件 - self.event_system.publish(EventType.MESSAGE_RECEIVED, {"message": msg}) - - # 标记插件是否处理了消息 - plugin_processed = False - - # 尝试使用插件处理消息 - if self.process_plugin_message(msg): - plugin_processed = True - - # 群聊消息处理 - 无论插件是否处理过,都执行数据存储 - if msg.from_group(): - # 调用统计逻辑进行聊天数据统计: - try: - self.message_storage.process_message(msg) - except Exception as e: - self.LOG.error(f"process_message error: {e}") - - # 聊天记录入库动作: - try: - self.message_storage.archive_message(msg) - # 单独处理图片消息 - if msg.msg_type == 3: # 图片消息类型 - self.message_storage.process_image(msg) - except Exception as e: - self.LOG.error(f"archive_message error: {e}") - - # 如果插件已处理消息,则不再执行后续的业务逻辑 - if plugin_processed: - return - - # 记录在群里发的最新消息,可以通过撤回指令撤回 - try: - if msg.from_self(): - rsp = self.gbm.handle_command(msg.roomid, msg.content) - # 不在群里发送,防止被骚扰 - if rsp is not None: - self.message_util.send_text(rsp, msg.roomid, msg.sender) - return - except Exception as e: - self.LOG.error(f"revoke_receive_message error: {e}") - - return # 处理完群聊信息,后面就不需要处理了 - - # 如果插件已处理消息,则不再执行后续的业务逻辑 - if plugin_processed: - return - - elif msg.msg_type == MessageType.TEXT: # 文本消息 - # 让配置加载更灵活,自己可以更新配置。也可以利用定时任务更新。 - if msg.from_self(): - if msg.content.clean_content == "^更新$": - self.config.reload() - self.gbm.load_local_cache() - self.LOG.info("已更新") - if msg.content.clean_content == "今日百度新闻": - self.news_baidu_report() - if msg.content.clean_content == "TO_DB": - self.message_count_to_db() - if msg.content.clean_content == "PDF": - self.generate_sehuatang_pdf() - if msg.content.raw_content.startswith("清除群-"): - self.gbm.handle_command(msg.roomid, msg.content.clean_content) - else: - self.toChitchat(msg) # 闲聊 + # + # # 发布消息接收事件 + # self.event_system.publish(EventType.MESSAGE_RECEIVED, {"message": msg}) + # + # # 标记插件是否处理了消息 + # plugin_processed = False + # + # # 尝试使用插件处理消息 + # if self.process_plugin_message(msg): + # plugin_processed = True + # + # # 群聊消息处理 - 无论插件是否处理过,都执行数据存储 + # if msg.from_group(): + # # 调用统计逻辑进行聊天数据统计: + # try: + # self.message_storage.process_message(msg) + # except Exception as e: + # self.LOG.error(f"process_message error: {e}") + # + # # 聊天记录入库动作: + # try: + # self.message_storage.archive_message(msg) + # # 单独处理图片消息 + # if msg.msg_type == 3: # 图片消息类型 + # self.message_storage.process_image(msg) + # except Exception as e: + # self.LOG.error(f"archive_message error: {e}") + # + # # 如果插件已处理消息,则不再执行后续的业务逻辑 + # if plugin_processed: + # return + # + # # 记录在群里发的最新消息,可以通过撤回指令撤回 + # try: + # if msg.from_self(): + # rsp = self.gbm.handle_command(msg.roomid, msg.content) + # # 不在群里发送,防止被骚扰 + # if rsp is not None: + # self.message_util.send_text(rsp, msg.roomid, msg.sender) + # return + # except Exception as e: + # self.LOG.error(f"revoke_receive_message error: {e}") + # + # return # 处理完群聊信息,后面就不需要处理了 + # + # # 如果插件已处理消息,则不再执行后续的业务逻辑 + # if plugin_processed: + # return + # + # elif msg.msg_type == MessageType.TEXT: # 文本消息 + # # 让配置加载更灵活,自己可以更新配置。也可以利用定时任务更新。 + # if msg.from_self(): + # if msg.content.clean_content == "^更新$": + # self.config.reload() + # self.gbm.load_local_cache() + # self.LOG.info("已更新") + # if msg.content.clean_content == "今日百度新闻": + # self.news_baidu_report() + # if msg.content.clean_content == "TO_DB": + # self.message_count_to_db() + # if msg.content.clean_content == "PDF": + # self.generate_sehuatang_pdf() + # if msg.content.raw_content.startswith("清除群-"): + # self.gbm.handle_command(msg.roomid, msg.content.clean_content) + # else: + # self.toChitchat(msg) # 闲聊 def onMsg(self, msg: WxMessage) -> int: try: self.LOG.info(msg) # 打印信息 - # self.processMsg(msg) + self.processMsg(msg) except Exception as e: self.LOG.error(e)