diff --git a/client/group_msg.go b/client/group_msg.go index 5ea8695e..cfb2af7d 100644 --- a/client/group_msg.go +++ b/client/group_msg.go @@ -14,6 +14,7 @@ import ( "google.golang.org/protobuf/proto" "math" "math/rand" + "strconv" "time" ) @@ -23,6 +24,7 @@ func init() { decoders["MessageSvc.PbGetGroupMsg"] = decodeGetGroupMsgResponse decoders["OidbSvc.0x8a7_0"] = decodeAtAllRemainResponse decoders["OidbSvc.0xeac_1"] = decodeEssenceMsgResponse + decoders["OidbSvc.0xeac_2"] = decodeEssenceMsgResponse } // SendGroupMessage 发送群消息 @@ -522,9 +524,9 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage { return g } -// SetEssenceMessage 设置群精华消息 +// SetEssenceMessage 设为群精华消息 func (c *QQClient) SetEssenceMessage(groupCode int64, msgId, msgInternalId int32) error { - r, err := c.sendAndWait(c.buildSetEssenceMsgPacket(groupCode, uint32(msgId), uint32(msgInternalId))) + r, err := c.sendAndWait(c.buildEssenceMsgOperatePacket(groupCode, uint32(msgId), uint32(msgInternalId), 1)) if err != nil { return errors.Wrap(err, "set essence msg network:") } @@ -535,18 +537,32 @@ func (c *QQClient) SetEssenceMessage(groupCode int64, msgId, msgInternalId int32 return nil } -func (c *QQClient) buildSetEssenceMsgPacket(groupCode int64, msgSeq, msgRand uint32) (uint16, []byte) { +// DeleteEssenceMessage 移出群精华消息 +func (c *QQClient) DeleteEssenceMessage(groupCode int64, msgId, msgInternalId int32) error { + r, err := c.sendAndWait(c.buildEssenceMsgOperatePacket(groupCode, uint32(msgId), uint32(msgInternalId), 2)) + if err != nil { + return errors.Wrap(err, "set essence msg network:") + } + rsp := r.(*oidb.EACRspBody) + if rsp.GetErrorCode() != 0 { + return errors.New(rsp.GetWording()) + } + return nil +} + +func (c *QQClient) buildEssenceMsgOperatePacket(groupCode int64, msgSeq, msgRand, opType uint32) (uint16, []byte) { seq := c.nextSeq() - payload := c.packOIDBPackageProto(3756, 1, &oidb.EACReqBody{ // serviceType 2 取消 + commandName := "OidbSvc.0xeac_" + strconv.FormatInt(int64(opType), 10) + payload := c.packOIDBPackageProto(3756, int32(opType), &oidb.EACReqBody{ // serviceType 2 取消 GroupCode: proto.Uint64(uint64(groupCode)), Seq: proto.Uint32(msgSeq), Random: proto.Uint32(msgRand), }) - packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0xeac_1", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) + packet := packets.BuildUniPacket(c.Uin, seq, commandName, 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) return seq, packet } -// OidbSvc.0xeac_1 +// OidbSvc.0xeac_1/2 func decodeEssenceMsgResponse(_ *QQClient, _ uint16, payload []byte) (interface{}, error) { pkg := oidb.OIDBSSOPkg{} rsp := &oidb.EACRspBody{}