Skip to content
zsh edited this page Feb 27, 2024 · 8 revisions

所有消息的基类

com.meteor.wechatbc.impl.model.message 包中,所有具体的消息类均继承自 Message 类。

该基类定义了消息的基本结构和共有属性,包括消息 ID、发送者、接收者、消息类型等关键信息,如下所示:

@Data
@ToString
public class Message {
    // 消息id
    @JSONField(name = "MsgId")
    private Long msgId;
    // 消息来源
    @JSONField(name = "FromUserName")
    private String fromUserName;
    // 消息目的地
    @JSONField(name = "ToUserName")
    private String toUserName;

    @JSONField(name = "MsgType")
    private Integer msgType;

    @JSONField(name = "Content")
    private String content;

    @JSONField(name = "Status")
    private Integer status;

    @JSONField(name = "ImgStatus")
    private Integer imgStatus;

    @JSONField(name = "CreateTime")
    private Long createTime;

    @JSONField(name = "VoiceLength")
    private Integer voiceLength;

    @JSONField(name = "PlayLength")
    private Integer playLength;

    @JSONField(name = "FileName")
    private String fileName;

    @JSONField(name = "FileSize")
    private String fileSize;

    @JSONField(name = "MediaId")
    private String mediaId;

    @JSONField(name = "Url")
    private String url;

    @JSONField(name = "AppMsgType")
    private Integer appMsgType;

    @JSONField(name = "StatusNotifyCode")
    private Integer statusNotifyCode;

    @JSONField(name = "StatusNotifyUserName")
    private String statusNotifyUserName;

    @JSONField(name = "RecommendInfo")
    private RecommendInfo recommendInfo;

    @JSONField(name = "ForwardFlag")
    private Integer forwardFlag;

    @JSONField(name = "AppInfo")
    private AppInfo appInfo;

    @JSONField(name = "HasProductId")
    private Integer hasProductId;

    @JSONField(name = "Ticket")
    private String ticket;

    @JSONField(name = "ImgHeight")
    private Integer imgHeight;

    @JSONField(name = "ImgWidth")
    private Integer imgWidth;

    @JSONField(name = "SubMsgType")
    private Integer subMsgType;

    @JSONField(name = "NewMsgId")
    private Long newMsgId;

    @JSONField(name = "OriContent")
    private String oriContent;

    @JSONField(name = "EncryFileName")
    private String encryFileName;
}

取得消息的发送者

在处理消息时,区分“消息发送者”与“消息来源”是非常重要的。

例如,在群聊中,消息的发送者是具体的用户,而消息来源是该群聊。

因此,当您需要根据用户进行操作时,请确保使用正确的属性获取用户信息,如下所示

/**
取得消息的发送者username
**/
public String getSenderUserName();

消息类型

本项目封装了不同类型的消息,以便于优雅地进行调用和处理。

您可以通过 Message#getMsgType() 方法获取消息的具体类型,该方法返回一个 MsgType 枚举值,定义如下:

public enum MsgType {
    TextMsg("1"), //文本消息
    ImgEmoteMsg("47"), // 图片表情
    ImageMsg("3"),// 图片消息
    VideoMsg("43"); // 视频消息
}

得到MsgType后,你可以将他们转换为更具体的消息对象

TextMessage 文字消息

文本消息是最基本的消息类型,没有额外的封装

/**
 * 文字消息
 */
public class TextMessage extends Message {
}

ImageMessage 图片消息

你可以调用以下方法取得图片信息

    /**
     * 图片二进制流转换为BufferedImage
     */
    public BufferedImage convertHexToBufferedImage();

    /**
     * 将图片保存至磁盘
     * @param file
     */
    public File saveImage(File file,String type);

VideoMessage 视频消息

    // 获取视频二进制响应
    public byte[] getBytes();

    /**
     * 将视频保存至磁盘
     * @param file
     */
    public File saveFile(File file);

RevokeMessage 撤回消息

    /**
     * 获取撤回的原始消息
     */
    public Message getOldMessage() {
        return oldMessage;
    }
Clone this wiki locally