mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-02-09 07:48:52 +08:00
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
# encoding:utf-8
|
|
|
|
"""
|
|
wechat channel message
|
|
"""
|
|
|
|
from bridge.context import ContextType
|
|
from channel.chat_message import ChatMessage
|
|
from common.log import logger
|
|
from wcferry import WxMsg
|
|
|
|
|
|
class WechatfMessage(ChatMessage):
|
|
"""
|
|
微信消息封装类
|
|
"""
|
|
|
|
def __init__(self, channel, wcf_msg: WxMsg, is_group=False):
|
|
"""
|
|
初始化消息对象
|
|
:param wcf_msg: wcferry消息对象
|
|
:param is_group: 是否是群消息
|
|
"""
|
|
super().__init__(wcf_msg)
|
|
self.msg_id = wcf_msg.id
|
|
self.create_time = wcf_msg.ts # 使用消息时间戳
|
|
self.is_group = is_group or wcf_msg._is_group
|
|
self.wxid = channel.wxid
|
|
self.name = channel.name
|
|
|
|
# 解析消息类型
|
|
if wcf_msg.is_text():
|
|
self.ctype = ContextType.TEXT
|
|
self.content = wcf_msg.content
|
|
else:
|
|
raise NotImplementedError(f"Unsupported message type: {wcf_msg.type}")
|
|
|
|
# 设置发送者和接收者信息
|
|
self.from_user_id = self.wxid if wcf_msg.sender == self.wxid else wcf_msg.sender
|
|
self.from_user_nickname = self.name if wcf_msg.sender == self.wxid else channel.contact_cache.get_name_by_wxid(wcf_msg.sender)
|
|
self.to_user_id = self.wxid
|
|
self.to_user_nickname = self.name
|
|
self.other_user_id = wcf_msg.sender
|
|
self.other_user_nickname = channel.contact_cache.get_name_by_wxid(wcf_msg.sender)
|
|
|
|
# 群消息特殊处理
|
|
if self.is_group:
|
|
self.other_user_id = wcf_msg.roomid
|
|
self.other_user_nickname = channel.contact_cache.get_name_by_wxid(wcf_msg.roomid)
|
|
self.actual_user_id = wcf_msg.sender
|
|
self.actual_user_nickname = channel.wcf.get_alias_in_chatroom(wcf_msg.sender, wcf_msg.roomid)
|
|
if not self.actual_user_nickname: # 群聊获取不到企微号成员昵称,这里尝试从联系人缓存去获取
|
|
self.actual_user_nickname = channel.contact_cache.get_name_by_wxid(wcf_msg.sender)
|
|
self.room_id = wcf_msg.roomid
|
|
self.is_at = wcf_msg.is_at(self.wxid) # 是否被@当前登录用户
|
|
|
|
# 判断是否是自己发送的消息
|
|
self.my_msg = wcf_msg.from_self()
|