update
This commit is contained in:
parent
bfff5ada51
commit
fc862d00c3
@ -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":
|
||||
user_info = await self.get_external_contact_info(user_id)
|
||||
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,22 +286,46 @@ class WecomClient:
|
||||
).first()
|
||||
|
||||
if not member_db:
|
||||
# 判断是内部成员还是外部联系人
|
||||
# 尝试获取群聊成员信息来确定成员类型
|
||||
member_type = "EXTERNAL" # 默认为外部联系人
|
||||
member_name = None
|
||||
user_info = None
|
||||
|
||||
# 获取外部联系人详情
|
||||
user_info = await self.get_external_contact_info(join_user_id)
|
||||
# 获取群聊详情,查找成员类型
|
||||
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:
|
||||
@ -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
|
||||
|
||||
BIN
jobs.sqlite
BIN
jobs.sqlite
Binary file not shown.
Loading…
Reference in New Issue
Block a user