mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +08:00
feat: FetchChannelInfo
This commit is contained in:
parent
75d6d547d2
commit
d7c66bf26a
@ -663,6 +663,20 @@ func (c *QQClient) packOIDBPackageProto(cmd, serviceType int32, msg proto.Messag
|
||||
return c.packOIDBPackage(cmd, serviceType, b)
|
||||
}
|
||||
|
||||
func (c *QQClient) unpackOIDBPackage(buff []byte, payload proto.Message) error {
|
||||
pkg := new(oidb.OIDBSSOPkg)
|
||||
if err := proto.Unmarshal(buff, pkg); err != nil {
|
||||
return errors.Wrap(err, "failed to unmarshal protobuf message")
|
||||
}
|
||||
if pkg.GetResult() != 0 {
|
||||
return errors.Errorf("oidb result unsuccessful: %v msg: %v", pkg.GetResult(), pkg.GetErrorMsg())
|
||||
}
|
||||
if err := proto.Unmarshal(pkg.Bodybuffer, payload); err != nil {
|
||||
return errors.Wrap(err, "failed to unmarshal protobuf message")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *QQClient) Error(msg string, args ...interface{}) {
|
||||
c.dispatchLogEvent(&LogEvent{
|
||||
Type: "ERROR",
|
||||
|
@ -2,7 +2,6 @@ package client
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/Mrs4s/MiraiGo/binary"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/channel"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/oidb"
|
||||
@ -74,9 +73,39 @@ type (
|
||||
Time uint64
|
||||
EventTime uint32
|
||||
NotifyType uint32
|
||||
ChannelType uint32
|
||||
ChannelType ChannelType
|
||||
AtAllSeq uint64
|
||||
Meta *ChannelMeta
|
||||
}
|
||||
|
||||
ChannelMeta struct {
|
||||
CreatorUin int64
|
||||
CreatorTinyId uint64
|
||||
CreateTime int64
|
||||
GuildId uint64
|
||||
VisibleType int32
|
||||
TopMessageSeq uint64
|
||||
TopMessageTime int64
|
||||
TopMessageOperatorId uint64
|
||||
CurrentSlowMode int32
|
||||
TalkPermission int32
|
||||
SlowModes []*ChannelSlowModeInfo
|
||||
}
|
||||
|
||||
ChannelSlowModeInfo struct {
|
||||
SlowModeKey int32
|
||||
SpeakFrequency int32
|
||||
SlowModeCircle int32
|
||||
SlowModeText string
|
||||
}
|
||||
|
||||
ChannelType int32
|
||||
)
|
||||
|
||||
const (
|
||||
ChannelTypeText ChannelType = 1
|
||||
ChannelTypeVoice ChannelType = 2
|
||||
ChannelTypeLive ChannelType = 5
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -281,6 +310,49 @@ func (s *GuildService) FetchGuestGuild(guildId uint64) (*GuildMeta, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *GuildService) FetchChannelInfo(guildId, channelId uint64) (*ChannelInfo, error) {
|
||||
seq := s.c.nextSeq()
|
||||
packet := packets.BuildUniPacket(s.c.Uin, seq, "OidbSvcTrpcTcp.0xf55_1", 1, s.c.OutGoingPacketSessionId, []byte{}, s.c.sigInfo.d2Key,
|
||||
s.c.packOIDBPackageDynamically(3925, 1, binary.DynamicProtoMessage{1: guildId, 2: channelId}))
|
||||
rsp, err := s.c.sendAndWaitDynamic(seq, packet)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "send packet error")
|
||||
}
|
||||
body := new(channel.ChannelOidb0Xf55Rsp)
|
||||
if err = s.c.unpackOIDBPackage(rsp, body); err != nil {
|
||||
return nil, errors.Wrap(err, "decode packet error")
|
||||
}
|
||||
meta := &ChannelMeta{
|
||||
CreatorUin: body.Info.GetCreatorUin(),
|
||||
CreatorTinyId: body.Info.GetCreatorTinyId(),
|
||||
CreateTime: body.Info.GetCreateTime(),
|
||||
GuildId: body.Info.GetGuildId(),
|
||||
VisibleType: body.Info.GetVisibleType(),
|
||||
CurrentSlowMode: body.Info.GetCurrentSlowModeKey(),
|
||||
TalkPermission: body.Info.GetTalkPermission(),
|
||||
}
|
||||
if body.Info.TopMsg != nil {
|
||||
meta.TopMessageSeq = body.Info.TopMsg.GetTopMsgSeq()
|
||||
meta.TopMessageTime = body.Info.TopMsg.GetTopMsgTime()
|
||||
meta.TopMessageOperatorId = body.Info.TopMsg.GetTopMsgOperatorTinyId()
|
||||
}
|
||||
for _, slow := range body.Info.SlowModeInfos {
|
||||
meta.SlowModes = append(meta.SlowModes, &ChannelSlowModeInfo{
|
||||
SlowModeKey: slow.GetSlowModeKey(),
|
||||
SpeakFrequency: slow.GetSpeakFrequency(),
|
||||
SlowModeCircle: slow.GetSlowModeCircle(),
|
||||
SlowModeText: slow.GetSlowModeText(),
|
||||
})
|
||||
}
|
||||
return &ChannelInfo{
|
||||
ChannelId: body.Info.GetChannelId(),
|
||||
ChannelName: body.Info.GetChannelName(),
|
||||
NotifyType: uint32(body.Info.GetFinalNotifyType()),
|
||||
ChannelType: ChannelType(body.Info.GetChannelType()),
|
||||
Meta: meta,
|
||||
}, nil
|
||||
}
|
||||
|
||||
/* need analysis
|
||||
func (s *GuildService) fetchChannelListState(guildId uint64, channels []*ChannelInfo) {
|
||||
seq := s.c.nextSeq()
|
||||
@ -362,7 +434,7 @@ func decodeGuildPushFirstView(c *QQClient, _ *incomingPacketInfo, payload []byte
|
||||
Time: node.GetTime(),
|
||||
EventTime: node.GetEventTime(),
|
||||
NotifyType: node.GetNotifyType(),
|
||||
ChannelType: node.GetChannelType(),
|
||||
ChannelType: ChannelType(node.GetChannelType()),
|
||||
AtAllSeq: meta.GetAtAllSeq(),
|
||||
})
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -3,7 +3,7 @@ syntax = "proto2";
|
||||
|
||||
package channel;
|
||||
|
||||
option go_package = "./;channel";
|
||||
option go_package = "pb/channel;channel";
|
||||
|
||||
message ChannelOidb0xf5bRsp {
|
||||
optional uint64 guildId = 1;
|
||||
@ -24,6 +24,10 @@ message ChannelOidb0xf57Rsp {
|
||||
optional GuildMetaRsp rsp = 1;
|
||||
}
|
||||
|
||||
message ChannelOidb0xf55Rsp {
|
||||
optional GuildChannelInfo info = 1;
|
||||
}
|
||||
|
||||
message GuildMetaRsp {
|
||||
optional uint64 guildId = 3;
|
||||
optional GuildMeta meta = 4;
|
||||
@ -68,6 +72,36 @@ message GuildMeta {
|
||||
optional int32 clientId = 20;
|
||||
}
|
||||
|
||||
message GuildChannelInfo {
|
||||
optional uint64 channelId = 1;
|
||||
optional string channelName = 2;
|
||||
optional int64 creatorUin = 3;
|
||||
optional int64 createTime = 4;
|
||||
optional uint64 guildId = 5;
|
||||
optional int32 finalNotifyType = 6;
|
||||
optional int32 channelType = 7;
|
||||
optional int32 talkPermission = 8;
|
||||
// 11 - 14 : MsgInfo
|
||||
optional uint64 creatorTinyId = 15;
|
||||
// 16: Member info ?
|
||||
optional int32 visibleType = 22;
|
||||
optional GuildChannelTopMsgInfo topMsg = 28;
|
||||
optional int32 currentSlowModeKey = 31;
|
||||
repeated GuildChannelSlowModeInfo slowModeInfos = 32;
|
||||
}
|
||||
|
||||
message GuildChannelSlowModeInfo {
|
||||
optional int32 slowModeKey = 1;
|
||||
optional int32 speakFrequency = 2;
|
||||
optional int32 slowModeCircle = 3;
|
||||
optional string slowModeText = 4;
|
||||
}
|
||||
|
||||
message GuildChannelTopMsgInfo {
|
||||
optional uint64 topMsgSeq = 1;
|
||||
optional int64 topMsgTime = 2;
|
||||
optional uint64 topMsgOperatorTinyId = 3;
|
||||
}
|
||||
/*
|
||||
// 个性档案卡片
|
||||
message GuildMemberProfileCard {
|
||||
|
Loading…
x
Reference in New Issue
Block a user