github.com/872409/go-netease-im@v1.0.2-0.20201109080841-fdb3e13691c5/history.go (about)

     1  package netease
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"strconv"
     7  
     8  	jsoniter "github.com/json-iterator/go"
     9  )
    10  
    11  const (
    12  	queryMessagePoint = neteaseBaseURL + "/history/querySessionMsg.action"
    13  )
    14  
    15  // HistoryMessage .
    16  type HistoryMessage struct {
    17  	From string      `json:"from"`
    18  	ID   int64       `json:"msgid"`
    19  	Time int64       `json:"sendtime"`
    20  	Type int         `json:"type"`
    21  	Body interface{} `json:"body"`
    22  }
    23  
    24  // QueryMessage 查询存储在网易云通信服务器中的单人聊天历史消息,只能查询在保存时间范围内的消息
    25  /*
    26  *1.跟据时间段查询点对点消息,每次最多返回100条;
    27  *2.不提供分页支持,第三方需要跟据时间段来查询。
    28  * @param fromID	发送者accid
    29  * @param toID	接收者accid
    30  * @param beginTime	开始时间,ms
    31  * @param endTime	截止时间,ms
    32  * @param limit		本次查询的消息条数上限(最多100条),小于等于0,或者大于100,会提示参数错误
    33  * @param reverse	1按时间正序排列,2按时间降序排列。其它返回参数414错误.默认是按降序排列
    34  * @param tp	查询指定的多个消息类型,类型之间用","分割,不设置该参数则查询全部类型消息格式 示例: 0,1,2,3 类型支持: 1:图片,2:语音,3:视频,4:地理位置,5:通知,6:文件,10:提示,11:Robot,100:自定义
    35   */
    36  func (c *ImClient) QueryMessage(fromID, toID, beginTime, endTime string, limit, reverse int, tp string) ([]HistoryMessage, error) {
    37  	param := map[string]string{"from": fromID}
    38  
    39  	param["to"] = toID
    40  	param["begintime"] = beginTime
    41  	param["endtime"] = endTime
    42  	param["limit"] = strconv.Itoa(limit)
    43  
    44  	if reverse != 0 {
    45  		param["reverse"] = strconv.Itoa(reverse)
    46  	}
    47  
    48  	if len(tp) > 0 {
    49  		param["type"] = tp
    50  	}
    51  
    52  	client := c.client.R()
    53  	c.setCommonHead(client)
    54  	client.SetFormData(param)
    55  
    56  	resp, err := client.Post(queryMessagePoint)
    57  
    58  	var jsonRes map[string]*json.RawMessage
    59  	err = jsoniter.Unmarshal(resp.Body(), &jsonRes)
    60  	if err != nil {
    61  		return nil, err
    62  	}
    63  
    64  	var code int
    65  	err = json.Unmarshal(*jsonRes["code"], &code)
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  
    70  	if code != 200 {
    71  		return nil, errors.New(string(resp.Body()))
    72  	}
    73  
    74  	var msgs []HistoryMessage
    75  	err = jsoniter.Unmarshal(*jsonRes["msgs"], &msgs)
    76  	if err != nil {
    77  		return nil, err
    78  	}
    79  
    80  	return msgs, nil
    81  }