This commit is contained in:
aaron 2025-03-30 13:48:18 +08:00
parent bfff5ada51
commit fc862d00c3
2 changed files with 38 additions and 6 deletions

View File

@ -205,8 +205,11 @@ class WecomClient:
# 获取群聊信息
chat_info = await self.get_external_chat_info(chat_id)
if not chat_info:
logger.warning(f"无法获取群聊信息: {chat_id}")
return False
logger.info(f"获取到群聊信息: {chat_info}")
# 保存群聊信息
chat_db = db.query(WecomExternalChatDB).filter(WecomExternalChatDB.chat_id == chat_id).first()
if not chat_db:
@ -236,13 +239,16 @@ class WecomClient:
# 获取外部联系人详情
user_info = None
if member_type == "EXTERNAL":
try:
user_info = await self.get_external_contact_info(user_id)
except Exception as e:
logger.warning(f"获取外部联系人信息失败: {user_id}, 错误: {str(e)}")
member_create = WecomExternalChatMemberCreate(
chat_id=chat_id,
user_id=user_id,
type=member_type,
name=user_info.get("name") if user_info else None,
name=user_info.get("name") if user_info else member.get("name", "未知"),
unionid=user_info.get("unionid") if user_info else None
)
member_db = WecomExternalChatMemberDB(**member_create.model_dump())
@ -280,23 +286,47 @@ class WecomClient:
).first()
if not member_db:
# 判断是内部成员还是外部联系人
# 尝试获取群聊成员信息来确定成员类型
member_type = "EXTERNAL" # 默认为外部联系人
member_name = None
user_info = None
# 获取外部联系人详情
# 获取群聊详情,查找成员类型
try:
chat_info = await self.get_external_chat_info(chat_id)
if chat_info and "member_list" in chat_info:
for member in chat_info["member_list"]:
if member.get("userid") == join_user_id:
member_type = member.get("type", "EXTERNAL")
member_name = member.get("name")
logger.info(f"从群聊详情中确定成员类型: {member_type}, 成员: {join_user_id}")
break
except Exception as e:
logger.warning(f"获取群聊详情失败: {str(e)}")
# 如果确定是外部联系人,尝试获取详情
if member_type == "EXTERNAL":
try:
user_info = await self.get_external_contact_info(join_user_id)
if user_info:
member_name = user_info.get("name")
logger.info(f"获取到外部联系人详情: {member_name}")
except Exception as e:
logger.warning(f"获取外部联系人信息失败,可能是内部成员: {str(e)}")
# 如果获取失败但在群聊详情中找到了,则使用群聊详情中的信息
member_create = WecomExternalChatMemberCreate(
chat_id=chat_id,
user_id=join_user_id,
type=member_type,
name=user_info.get("name") if user_info else None,
name=member_name,
unionid=user_info.get("unionid") if user_info else None
)
member_db = WecomExternalChatMemberDB(**member_create.model_dump())
db.add(member_db)
db.commit()
# 更新群成员数量
if chat_db:
chat_db.member_count = chat_db.member_count + 1
@ -349,6 +379,8 @@ class WecomClient:
return False
except Exception as e:
logger.error(f"处理群聊变更事件异常: {str(e)}")
import traceback
logger.error(traceback.format_exc())
if 'db' in locals():
db.close()
return False

Binary file not shown.