1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00

feat: PostTopicChannelFeed

This commit is contained in:
Mrs4s 2021-11-27 02:02:13 +08:00
parent 8b4b8269f3
commit 67bf336f22
No known key found for this signature in database
GPG Key ID: 3186E98FA19CE3A7
3 changed files with 990 additions and 0 deletions

View File

@ -5,6 +5,7 @@ import (
"github.com/Mrs4s/MiraiGo/topic"
"math/rand"
"sort"
"strconv"
"time"
"github.com/Mrs4s/MiraiGo/client/pb/qweb"
@ -589,6 +590,76 @@ func (s *GuildService) GetTopicChannelFeeds(guildId, channelId uint64) ([]*topic
return feeds, nil
}
func (s *GuildService) PostTopicChannelFeed(guildId, channelId uint64, feed *topic.Feed) error {
guild := s.FindGuild(guildId)
if guild == nil {
return errors.New("guild not found")
}
channelInfo := guild.FindChannel(channelId)
if channelInfo == nil {
return errors.New("channel not found")
}
if channelInfo.ChannelType != ChannelTypeTopic {
return errors.New("channel type error")
}
feed.Poster = &topic.FeedPoster{
TinyIdStr: strconv.FormatUint(s.TinyId, 10),
Nickname: s.Nickname,
}
feed.GuildId = guildId
feed.ChannelId = channelId
req, _ := proto.Marshal(&channel.StPublishFeedReq{
ExtInfo: &channel.StCommonExt{
MapInfo: []*channel.CommonEntry{
{
proto.String("clientkey"), proto.String("GuildMain" + utils.RandomStringRange(14, "0123456789")),
},
},
},
From: proto.Int32(0),
JsonFeed: proto.String(feed.ToSendingPayload(s.c.Uin)),
})
payload, _ := proto.Marshal(&qweb.QWebReq{
Seq: proto.Int64(s.c.nextQWebSeq()),
Qua: proto.String("V1_AND_SQ_8.8.50_2324_YYB_D"),
DeviceInfo: proto.String(s.c.getWebDeviceInfo()),
BusiBuff: req,
TraceId: proto.String(fmt.Sprintf("%v_%v_%v", s.c.Uin, time.Now().Format("0102150405"), rand.Int63())),
Extinfo: []*qweb.COMMEntry{
{
Key: proto.String("fc-appid"),
Value: proto.String("96"),
},
{
Key: proto.String("environment_id"),
Value: proto.String("production"),
},
{
Key: proto.String("tiny_id"),
Value: proto.String(fmt.Sprint(s.TinyId)),
},
},
})
seq := s.c.nextSeq()
packet := packets.BuildUniPacket(s.c.Uin, seq, "QChannelSvr.trpc.qchannel.commwriter.ComWriter.PublishFeed", 1, s.c.OutGoingPacketSessionId, []byte{}, s.c.sigInfo.d2Key, payload)
rsp, err := s.c.sendAndWaitDynamic(seq, packet)
if err != nil {
return errors.New("send packet error")
}
pkg := new(qweb.QWebRsp)
body := new(channel.StPublishFeedRsp)
if err = proto.Unmarshal(rsp, pkg); err != nil {
return errors.Wrap(err, "failed to unmarshal protobuf message")
}
if err = proto.Unmarshal(pkg.BusiBuff, body); err != nil {
return errors.Wrap(err, "failed to unmarshal protobuf message")
}
if body.Feed != nil && body.Feed.Id != nil {
return nil
}
return errors.New("post feed error")
}
/* need analysis
func (s *GuildService) fetchChannelListState(guildId uint64, channels []*ChannelInfo) {
seq := s.c.nextSeq()

View File

@ -0,0 +1,765 @@
// Code generated by protoc-gen-golite. DO NOT EDIT.
// source: pb/channel/GuildWriter.proto
package channel
type StAlterFeedReq struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Feed *StFeed `protobuf:"bytes,2,opt"`
BusiReqData []byte `protobuf:"bytes,3,opt"`
MBitmap *uint64 `protobuf:"varint,4,opt"`
From *int32 `protobuf:"varint,5,opt"`
Src *int32 `protobuf:"varint,6,opt"`
AlterFeedExtInfo []*CommonEntry `protobuf:"bytes,7,rep"`
JsonFeed *string `protobuf:"bytes,8,opt"`
ClientContent *StClientContent `protobuf:"bytes,9,opt"`
}
func (x *StAlterFeedReq) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StAlterFeedReq) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StAlterFeedReq) GetBusiReqData() []byte {
if x != nil {
return x.BusiReqData
}
return nil
}
func (x *StAlterFeedReq) GetMBitmap() uint64 {
if x != nil && x.MBitmap != nil {
return *x.MBitmap
}
return 0
}
func (x *StAlterFeedReq) GetFrom() int32 {
if x != nil && x.From != nil {
return *x.From
}
return 0
}
func (x *StAlterFeedReq) GetSrc() int32 {
if x != nil && x.Src != nil {
return *x.Src
}
return 0
}
func (x *StAlterFeedReq) GetAlterFeedExtInfo() []*CommonEntry {
if x != nil {
return x.AlterFeedExtInfo
}
return nil
}
func (x *StAlterFeedReq) GetJsonFeed() string {
if x != nil && x.JsonFeed != nil {
return *x.JsonFeed
}
return ""
}
func (x *StAlterFeedReq) GetClientContent() *StClientContent {
if x != nil {
return x.ClientContent
}
return nil
}
type StAlterFeedRsp struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Feed *StFeed `protobuf:"bytes,2,opt"`
BusiRspData []byte `protobuf:"bytes,3,opt"`
}
func (x *StAlterFeedRsp) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StAlterFeedRsp) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StAlterFeedRsp) GetBusiRspData() []byte {
if x != nil {
return x.BusiRspData
}
return nil
}
type StClientContent struct {
ClientImageContents []*StClientImageContent `protobuf:"bytes,1,rep"`
ClientVideoContents []*StClientVideoContent `protobuf:"bytes,2,rep"`
}
func (x *StClientContent) GetClientImageContents() []*StClientImageContent {
if x != nil {
return x.ClientImageContents
}
return nil
}
func (x *StClientContent) GetClientVideoContents() []*StClientVideoContent {
if x != nil {
return x.ClientVideoContents
}
return nil
}
type StClientImageContent struct {
TaskId *string `protobuf:"bytes,1,opt"`
PicId *string `protobuf:"bytes,2,opt"`
Url *string `protobuf:"bytes,3,opt"`
}
func (x *StClientImageContent) GetTaskId() string {
if x != nil && x.TaskId != nil {
return *x.TaskId
}
return ""
}
func (x *StClientImageContent) GetPicId() string {
if x != nil && x.PicId != nil {
return *x.PicId
}
return ""
}
func (x *StClientImageContent) GetUrl() string {
if x != nil && x.Url != nil {
return *x.Url
}
return ""
}
type StClientVideoContent struct {
TaskId *string `protobuf:"bytes,1,opt"`
VideoId *string `protobuf:"bytes,2,opt"`
VideoUrl *string `protobuf:"bytes,3,opt"`
CoverUrl *string `protobuf:"bytes,4,opt"`
}
func (x *StClientVideoContent) GetTaskId() string {
if x != nil && x.TaskId != nil {
return *x.TaskId
}
return ""
}
func (x *StClientVideoContent) GetVideoId() string {
if x != nil && x.VideoId != nil {
return *x.VideoId
}
return ""
}
func (x *StClientVideoContent) GetVideoUrl() string {
if x != nil && x.VideoUrl != nil {
return *x.VideoUrl
}
return ""
}
func (x *StClientVideoContent) GetCoverUrl() string {
if x != nil && x.CoverUrl != nil {
return *x.CoverUrl
}
return ""
}
type StDelFeedReq struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Feed *StFeed `protobuf:"bytes,2,opt"`
From *int32 `protobuf:"varint,3,opt"`
Src *int32 `protobuf:"varint,4,opt"`
}
func (x *StDelFeedReq) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StDelFeedReq) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StDelFeedReq) GetFrom() int32 {
if x != nil && x.From != nil {
return *x.From
}
return 0
}
func (x *StDelFeedReq) GetSrc() int32 {
if x != nil && x.Src != nil {
return *x.Src
}
return 0
}
type StDelFeedRsp struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
}
func (x *StDelFeedRsp) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
type StDoCommentReq struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
CommentType *uint32 `protobuf:"varint,2,opt"`
Comment *StComment `protobuf:"bytes,3,opt"`
Feed *StFeed `protobuf:"bytes,4,opt"`
From *int32 `protobuf:"varint,5,opt"`
BusiReqData []byte `protobuf:"bytes,6,opt"`
Src *int32 `protobuf:"varint,7,opt"`
}
func (x *StDoCommentReq) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StDoCommentReq) GetCommentType() uint32 {
if x != nil && x.CommentType != nil {
return *x.CommentType
}
return 0
}
func (x *StDoCommentReq) GetComment() *StComment {
if x != nil {
return x.Comment
}
return nil
}
func (x *StDoCommentReq) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StDoCommentReq) GetFrom() int32 {
if x != nil && x.From != nil {
return *x.From
}
return 0
}
func (x *StDoCommentReq) GetBusiReqData() []byte {
if x != nil {
return x.BusiReqData
}
return nil
}
func (x *StDoCommentReq) GetSrc() int32 {
if x != nil && x.Src != nil {
return *x.Src
}
return 0
}
type StDoCommentRsp struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Comment *StComment `protobuf:"bytes,2,opt"`
BusiRspData []byte `protobuf:"bytes,3,opt"`
}
func (x *StDoCommentRsp) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StDoCommentRsp) GetComment() *StComment {
if x != nil {
return x.Comment
}
return nil
}
func (x *StDoCommentRsp) GetBusiRspData() []byte {
if x != nil {
return x.BusiRspData
}
return nil
}
type StDoLikeReq struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
LikeType *uint32 `protobuf:"varint,2,opt"`
Like *StLike `protobuf:"bytes,3,opt"`
Feed *StFeed `protobuf:"bytes,4,opt"`
BusiReqData []byte `protobuf:"bytes,5,opt"`
Comment *StComment `protobuf:"bytes,6,opt"`
Reply *StReply `protobuf:"bytes,7,opt"`
From *int32 `protobuf:"varint,8,opt"`
Src *int32 `protobuf:"varint,9,opt"`
EmotionReaction *StEmotionReactionInfo `protobuf:"bytes,10,opt"`
}
func (x *StDoLikeReq) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StDoLikeReq) GetLikeType() uint32 {
if x != nil && x.LikeType != nil {
return *x.LikeType
}
return 0
}
func (x *StDoLikeReq) GetLike() *StLike {
if x != nil {
return x.Like
}
return nil
}
func (x *StDoLikeReq) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StDoLikeReq) GetBusiReqData() []byte {
if x != nil {
return x.BusiReqData
}
return nil
}
func (x *StDoLikeReq) GetComment() *StComment {
if x != nil {
return x.Comment
}
return nil
}
func (x *StDoLikeReq) GetReply() *StReply {
if x != nil {
return x.Reply
}
return nil
}
func (x *StDoLikeReq) GetFrom() int32 {
if x != nil && x.From != nil {
return *x.From
}
return 0
}
func (x *StDoLikeReq) GetSrc() int32 {
if x != nil && x.Src != nil {
return *x.Src
}
return 0
}
func (x *StDoLikeReq) GetEmotionReaction() *StEmotionReactionInfo {
if x != nil {
return x.EmotionReaction
}
return nil
}
type StDoLikeRsp struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Like *StLike `protobuf:"bytes,2,opt"`
BusiRspData []byte `protobuf:"bytes,3,opt"`
EmotionReaction *StEmotionReactionInfo `protobuf:"bytes,4,opt"`
}
func (x *StDoLikeRsp) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StDoLikeRsp) GetLike() *StLike {
if x != nil {
return x.Like
}
return nil
}
func (x *StDoLikeRsp) GetBusiRspData() []byte {
if x != nil {
return x.BusiRspData
}
return nil
}
func (x *StDoLikeRsp) GetEmotionReaction() *StEmotionReactionInfo {
if x != nil {
return x.EmotionReaction
}
return nil
}
type StDoReplyReq struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
ReplyType *uint32 `protobuf:"varint,2,opt"`
Reply *StReply `protobuf:"bytes,3,opt"`
Comment *StComment `protobuf:"bytes,4,opt"`
Feed *StFeed `protobuf:"bytes,5,opt"`
From *int32 `protobuf:"varint,6,opt"`
BusiReqData []byte `protobuf:"bytes,7,opt"`
Src *int32 `protobuf:"varint,8,opt"`
}
func (x *StDoReplyReq) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StDoReplyReq) GetReplyType() uint32 {
if x != nil && x.ReplyType != nil {
return *x.ReplyType
}
return 0
}
func (x *StDoReplyReq) GetReply() *StReply {
if x != nil {
return x.Reply
}
return nil
}
func (x *StDoReplyReq) GetComment() *StComment {
if x != nil {
return x.Comment
}
return nil
}
func (x *StDoReplyReq) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StDoReplyReq) GetFrom() int32 {
if x != nil && x.From != nil {
return *x.From
}
return 0
}
func (x *StDoReplyReq) GetBusiReqData() []byte {
if x != nil {
return x.BusiReqData
}
return nil
}
func (x *StDoReplyReq) GetSrc() int32 {
if x != nil && x.Src != nil {
return *x.Src
}
return 0
}
type StDoReplyRsp struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Reply *StReply `protobuf:"bytes,2,opt"`
BusiRspData []byte `protobuf:"bytes,3,opt"`
}
func (x *StDoReplyRsp) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StDoReplyRsp) GetReply() *StReply {
if x != nil {
return x.Reply
}
return nil
}
func (x *StDoReplyRsp) GetBusiRspData() []byte {
if x != nil {
return x.BusiRspData
}
return nil
}
type StDoSecurityReq struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Feed *StFeed `protobuf:"bytes,2,opt"`
Comment *StComment `protobuf:"bytes,3,opt"`
Reply *StReply `protobuf:"bytes,4,opt"`
Poster *StUser `protobuf:"bytes,5,opt"`
SecType *int32 `protobuf:"varint,6,opt"`
}
func (x *StDoSecurityReq) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StDoSecurityReq) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StDoSecurityReq) GetComment() *StComment {
if x != nil {
return x.Comment
}
return nil
}
func (x *StDoSecurityReq) GetReply() *StReply {
if x != nil {
return x.Reply
}
return nil
}
func (x *StDoSecurityReq) GetPoster() *StUser {
if x != nil {
return x.Poster
}
return nil
}
func (x *StDoSecurityReq) GetSecType() int32 {
if x != nil && x.SecType != nil {
return *x.SecType
}
return 0
}
type StDoSecurityRsp struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
}
func (x *StDoSecurityRsp) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
type StModifyFeedReq struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Feed *StFeed `protobuf:"bytes,2,opt"`
MBitmap *uint64 `protobuf:"varint,3,opt"`
From *int32 `protobuf:"varint,4,opt"`
Src *int32 `protobuf:"varint,5,opt"`
ModifyFeedExtInfo []*CommonEntry `protobuf:"bytes,6,rep"`
}
func (x *StModifyFeedReq) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StModifyFeedReq) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StModifyFeedReq) GetMBitmap() uint64 {
if x != nil && x.MBitmap != nil {
return *x.MBitmap
}
return 0
}
func (x *StModifyFeedReq) GetFrom() int32 {
if x != nil && x.From != nil {
return *x.From
}
return 0
}
func (x *StModifyFeedReq) GetSrc() int32 {
if x != nil && x.Src != nil {
return *x.Src
}
return 0
}
func (x *StModifyFeedReq) GetModifyFeedExtInfo() []*CommonEntry {
if x != nil {
return x.ModifyFeedExtInfo
}
return nil
}
type StModifyFeedRsp struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Feed *StFeed `protobuf:"bytes,2,opt"`
BusiRspData []byte `protobuf:"bytes,3,opt"`
}
func (x *StModifyFeedRsp) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StModifyFeedRsp) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StModifyFeedRsp) GetBusiRspData() []byte {
if x != nil {
return x.BusiRspData
}
return nil
}
type StPublishFeedReq struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Feed *StFeed `protobuf:"bytes,2,opt"`
BusiReqData []byte `protobuf:"bytes,3,opt"`
From *int32 `protobuf:"varint,4,opt"`
Src *int32 `protobuf:"varint,5,opt"`
StoreFeedExtInfo []*CommonEntry `protobuf:"bytes,6,rep"`
JsonFeed *string `protobuf:"bytes,7,opt"`
ClientContent *StClientContent `protobuf:"bytes,8,opt"`
}
func (x *StPublishFeedReq) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StPublishFeedReq) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StPublishFeedReq) GetBusiReqData() []byte {
if x != nil {
return x.BusiReqData
}
return nil
}
func (x *StPublishFeedReq) GetFrom() int32 {
if x != nil && x.From != nil {
return *x.From
}
return 0
}
func (x *StPublishFeedReq) GetSrc() int32 {
if x != nil && x.Src != nil {
return *x.Src
}
return 0
}
func (x *StPublishFeedReq) GetStoreFeedExtInfo() []*CommonEntry {
if x != nil {
return x.StoreFeedExtInfo
}
return nil
}
func (x *StPublishFeedReq) GetJsonFeed() string {
if x != nil && x.JsonFeed != nil {
return *x.JsonFeed
}
return ""
}
func (x *StPublishFeedReq) GetClientContent() *StClientContent {
if x != nil {
return x.ClientContent
}
return nil
}
type StPublishFeedRsp struct {
ExtInfo *StCommonExt `protobuf:"bytes,1,opt"`
Feed *StFeed `protobuf:"bytes,2,opt"`
BusiRspData []byte `protobuf:"bytes,3,opt"`
}
func (x *StPublishFeedRsp) GetExtInfo() *StCommonExt {
if x != nil {
return x.ExtInfo
}
return nil
}
func (x *StPublishFeedRsp) GetFeed() *StFeed {
if x != nil {
return x.Feed
}
return nil
}
func (x *StPublishFeedRsp) GetBusiRspData() []byte {
if x != nil {
return x.BusiRspData
}
return nil
}

View File

@ -0,0 +1,154 @@
syntax = "proto2";
package channel;
option go_package = "pb/channel;channel";
import "pb/channel/GuildFeedCloudMeta.proto";
import "pb/channel/GuildChannelBase.proto";
message StAlterFeedReq {
optional StCommonExt extInfo = 1;
optional StFeed feed = 2;
optional bytes busiReqData = 3;
optional uint64 mBitmap = 4;
optional int32 from = 5;
optional int32 src = 6;
repeated CommonEntry alterFeedExtInfo = 7;
optional string jsonFeed = 8;
optional StClientContent clientContent = 9;
}
message StAlterFeedRsp {
optional StCommonExt extInfo = 1;
optional StFeed feed = 2;
optional bytes busiRspData = 3;
}
message StClientContent {
repeated StClientImageContent clientImageContents = 1;
repeated StClientVideoContent clientVideoContents = 2;
}
message StClientImageContent {
optional string taskId = 1;
optional string picId = 2;
optional string url = 3;
}
message StClientVideoContent {
optional string taskId = 1;
optional string videoId = 2;
optional string videoUrl = 3;
optional string coverUrl = 4;
}
message StDelFeedReq {
optional StCommonExt extInfo = 1;
optional StFeed feed = 2;
optional int32 from = 3;
optional int32 src = 4;
}
message StDelFeedRsp {
optional StCommonExt extInfo = 1;
}
message StDoCommentReq {
optional StCommonExt extInfo = 1;
optional uint32 commentType = 2;
optional StComment comment = 3;
optional StFeed feed = 4;
optional int32 from = 5;
optional bytes busiReqData = 6;
optional int32 src = 7;
}
message StDoCommentRsp {
optional StCommonExt extInfo = 1;
optional StComment comment = 2;
optional bytes busiRspData = 3;
}
message StDoLikeReq {
optional StCommonExt extInfo = 1;
optional uint32 likeType = 2;
optional StLike like = 3;
optional StFeed feed = 4;
optional bytes busiReqData = 5;
optional StComment comment = 6;
optional StReply reply = 7;
optional int32 from = 8;
optional int32 src = 9;
optional StEmotionReactionInfo emotionReaction = 10;
}
message StDoLikeRsp {
optional StCommonExt extInfo = 1;
optional StLike like = 2;
optional bytes busiRspData = 3;
optional StEmotionReactionInfo emotionReaction = 4;
}
message StDoReplyReq {
optional StCommonExt extInfo = 1;
optional uint32 replyType = 2;
optional StReply reply = 3;
optional StComment comment = 4;
optional StFeed feed = 5;
optional int32 from = 6;
optional bytes busiReqData = 7;
optional int32 src = 8;
}
message StDoReplyRsp {
optional StCommonExt extInfo = 1;
optional StReply reply = 2;
optional bytes busiRspData = 3;
}
message StDoSecurityReq {
optional StCommonExt extInfo = 1;
optional StFeed feed = 2;
optional StComment comment = 3;
optional StReply reply = 4;
optional StUser poster = 5;
optional int32 secType = 6;
}
message StDoSecurityRsp {
optional StCommonExt extInfo = 1;
}
message StModifyFeedReq {
optional StCommonExt extInfo = 1;
optional StFeed feed = 2;
optional uint64 mBitmap = 3;
optional int32 from = 4;
optional int32 src = 5;
repeated CommonEntry modifyFeedExtInfo = 6;
}
message StModifyFeedRsp {
optional StCommonExt extInfo = 1;
optional StFeed feed = 2;
optional bytes busiRspData = 3;
}
message StPublishFeedReq {
optional StCommonExt extInfo = 1;
optional StFeed feed = 2;
optional bytes busiReqData = 3;
optional int32 from = 4;
optional int32 src = 5;
repeated CommonEntry storeFeedExtInfo = 6;
optional string jsonFeed = 7;
optional StClientContent clientContent = 8;
}
message StPublishFeedRsp {
optional StCommonExt extInfo = 1;
optional StFeed feed = 2;
optional bytes busiRspData = 3;
}