Skip to content

Commit

Permalink
feat: auto conversion event uid -> uin
Browse files Browse the repository at this point in the history
  • Loading branch information
Redmomn committed Jun 29, 2024
1 parent 3839052 commit b9870fa
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 15 deletions.
14 changes: 12 additions & 2 deletions client/event/friend.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ type (
}

FriendRecall struct {
FromUin uint32
FromUid string
Sequence uint64
Time uint32
Expand All @@ -22,6 +23,7 @@ type (
Rename struct {
SubType uint32 // self 0 friend 1
Uin uint32
Uid string
Nickname string
}
)
Expand All @@ -36,6 +38,10 @@ func ParseFriendRequestNotice(event *message.FriendRequest, msg *message.PushMsg
}
}

func (fe *FriendRecall) Preprocess(f func(uid string) uint32) {
fe.FromUin = f(fe.FromUid)
}

func ParseFriendRecallEvent(event *message.FriendRecall) *FriendRecall {
info := event.Info
return &FriendRecall{
Expand All @@ -46,10 +52,14 @@ func ParseFriendRecallEvent(event *message.FriendRecall) *FriendRecall {
}
}

func ParseFriendRenameEvent(event *message.FriendRenameMsg, uin uint32) *Rename {
func (fe *Rename) Preprocess(f func(uid string) uint32) {
fe.Uin = f(fe.Uid)
}

func ParseFriendRenameEvent(event *message.FriendRenameMsg) *Rename {
return &Rename{
SubType: 1,
Uin: uin,
Uid: event.Body.Data.Uid,
Nickname: event.Body.Data.RenameData.NickName,
}
}
42 changes: 38 additions & 4 deletions client/event/group.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,22 @@ type GroupInvite struct {
InvitorUin uint32
}

func (gm *GroupMute) MuteAll() bool {
return gm.OperatorUid == ""
// CanPreprocess 实现预处理接口,对事件的uid进行转换等操作
type CanPreprocess interface {
Preprocess(func(uid string) uint32)
}

func (gmd *GroupMemberDecrease) IsKicked() bool {
return gmd.ExitType == 131 || gmd.ExitType == 3
func (g *GroupMute) MuteAll() bool {
return g.OperatorUid == ""
}

func (g *GroupMemberDecrease) IsKicked() bool {
return g.ExitType == 131 || g.ExitType == 3
}

func (g *GroupMemberJoinRequest) Preprocess(f func(uid string) uint32) {
g.InvitorUin = f(g.InvitorUid)
g.TargetUin = f(g.TargetUid)
}

// ParseRequestJoinNotice 主动加群
Expand Down Expand Up @@ -98,6 +108,10 @@ func ParseRequestInvitationNotice(event *message.GroupInvitation) *GroupMemberJo
return nil
}

func (g *GroupInvite) Preprocess(f func(uid string) uint32) {
g.InvitorUin = f(g.InvitorUid)
}

// ParseInviteNotice 被邀请加群
func ParseInviteNotice(event *message.GroupInvite) *GroupInvite {
return &GroupInvite{
Expand All @@ -106,6 +120,11 @@ func ParseInviteNotice(event *message.GroupInvite) *GroupInvite {
}
}

func (g *GroupMemberIncrease) Preprocess(f func(uid string) uint32) {
g.InvitorUin = f(g.InvitorUid)
g.MemberUin = f(g.MemberUid)
}

func ParseMemberIncreaseEvent(event *message.GroupChange) *GroupMemberIncrease {
return &GroupMemberIncrease{
GroupEvent: GroupEvent{
Expand All @@ -117,6 +136,11 @@ func ParseMemberIncreaseEvent(event *message.GroupChange) *GroupMemberIncrease {
}
}

func (g *GroupMemberDecrease) Preprocess(f func(uid string) uint32) {
g.OperatorUin = f(g.OperatorUid)
g.MemberUin = f(g.MemberUid)
}

func ParseMemberDecreaseEvent(event *message.GroupChange) *GroupMemberDecrease {
return &GroupMemberDecrease{
GroupEvent: GroupEvent{
Expand All @@ -128,6 +152,11 @@ func ParseMemberDecreaseEvent(event *message.GroupChange) *GroupMemberDecrease {
}
}

func (g *GroupRecall) Preprocess(f func(uid string) uint32) {
g.OperatorUin = f(g.OperatorUid)
g.AuthorUin = f(g.AuthorUid)
}

func ParseGroupRecallEvent(event *message.NotifyMessageBody) *GroupRecall {
info := event.Recall.RecallMessages[0]
result := GroupRecall{
Expand All @@ -143,6 +172,11 @@ func ParseGroupRecallEvent(event *message.NotifyMessageBody) *GroupRecall {
return &result
}

func (g *GroupMute) Preprocess(f func(uid string) uint32) {
g.OperatorUin = f(g.OperatorUid)
g.TargetUin = f(g.TargetUid)
}

func ParseGroupMuteEvent(event *message.GroupMute) *GroupMute {
return &GroupMute{
GroupEvent: GroupEvent{
Expand Down
43 changes: 34 additions & 9 deletions client/listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,9 @@ func decodeOlPushServicePacket(c *QQClient, pkt *network.Packet) (any, error) {
if err != nil {
return nil, err
}
c.GroupMemberJoinEvent.dispatch(c, eventConverter.ParseMemberIncreaseEvent(&pb))
ev := eventConverter.ParseMemberIncreaseEvent(&pb)
_ = c.PreprocessOther(ev)
c.GroupMemberJoinEvent.dispatch(c, ev)
return nil, nil
case 34: // member decrease
pb := message.GroupChange{}
Expand All @@ -88,31 +90,39 @@ func decodeOlPushServicePacket(c *QQClient, pkt *network.Packet) (any, error) {
}
pb.Operator = utils.S2B(Operator.OperatorField1.OperatorUid)
}
c.GroupMemberLeaveEvent.dispatch(c, eventConverter.ParseMemberDecreaseEvent(&pb))
ev := eventConverter.ParseMemberDecreaseEvent(&pb)
_ = c.PreprocessOther(ev)
c.GroupMemberLeaveEvent.dispatch(c, ev)
return nil, nil
case 84: // group request join notice
pb := message.GroupJoin{}
err = proto.Unmarshal(pkg.Body.MsgContent, &pb)
if err != nil {
return nil, err
}
c.GroupMemberJoinRequestEvent.dispatch(c, eventConverter.ParseRequestJoinNotice(&pb))
ev := eventConverter.ParseRequestJoinNotice(&pb)
_ = c.PreprocessOther(ev)
c.GroupMemberJoinRequestEvent.dispatch(c, ev)
return nil, nil
case 525: // group request invitation notice
pb := message.GroupInvitation{}
err = proto.Unmarshal(pkg.Body.MsgContent, &pb)
if err != nil {
return nil, err
}
c.GroupMemberJoinRequestEvent.dispatch(c, eventConverter.ParseRequestInvitationNotice(&pb))
ev := eventConverter.ParseRequestInvitationNotice(&pb)
_ = c.PreprocessOther(ev)
c.GroupMemberJoinRequestEvent.dispatch(c, ev)
return nil, nil
case 87: // group invite notice
pb := message.GroupInvite{}
err = proto.Unmarshal(pkg.Body.MsgContent, &pb)
if err != nil {
return nil, err
}
c.GroupInvitedEvent.dispatch(c, eventConverter.ParseInviteNotice(&pb))
ev := eventConverter.ParseInviteNotice(&pb)
_ = c.PreprocessOther(ev)
c.GroupInvitedEvent.dispatch(c, ev)
return nil, nil
case 0x210: // friend event, 528
subType := pkg.ContentHead.SubType.Unwrap()
Expand All @@ -131,7 +141,9 @@ func decodeOlPushServicePacket(c *QQClient, pkt *network.Packet) (any, error) {
if err != nil {
return nil, err
}
c.FriendRecallEvent.dispatch(c, eventConverter.ParseFriendRecallEvent(&pb))
ev := eventConverter.ParseFriendRecallEvent(&pb)
_ = c.PreprocessOther(ev)
c.FriendRecallEvent.dispatch(c, ev)
return nil, nil
case 39: // friend rename
c.debugln("friend rename")
Expand All @@ -140,7 +152,9 @@ func decodeOlPushServicePacket(c *QQClient, pkt *network.Packet) (any, error) {
if err != nil {
return nil, err
}
c.RenameEvent.dispatch(c, eventConverter.ParseFriendRenameEvent(&pb, c.cache.GetUin(pb.Body.Data.Uid)))
ev := eventConverter.ParseFriendRenameEvent(&pb)
_ = c.PreprocessOther(ev)
c.RenameEvent.dispatch(c, ev)
return nil, nil
case 29:
c.debugln("self rename")
Expand Down Expand Up @@ -168,15 +182,19 @@ func decodeOlPushServicePacket(c *QQClient, pkt *network.Packet) (any, error) {
if err != nil {
return nil, err
}
c.GroupRecallEvent.dispatch(c, eventConverter.ParseGroupRecallEvent(&pb))
ev := eventConverter.ParseGroupRecallEvent(&pb)
_ = c.PreprocessOther(ev)
c.GroupRecallEvent.dispatch(c, ev)
return nil, nil
case 12: // mute
pb := message.GroupMute{}
err = proto.Unmarshal(pkg.Body.MsgContent, &pb)
if err != nil {
return nil, err
}
c.GroupMuteEvent.dispatch(c, eventConverter.ParseGroupMuteEvent(&pb))
ev := eventConverter.ParseGroupMuteEvent(&pb)
_ = c.PreprocessOther(ev)
c.GroupMuteEvent.dispatch(c, ev)
return nil, nil
default:
c.warning("Unsupported group event, subType: %v", subType)
Expand Down Expand Up @@ -219,3 +237,10 @@ func (c *QQClient) PreprocessPrivateMessageEvent(msg *msgConverter.PrivateMessag
}
return nil
}

func (c *QQClient) PreprocessOther(g eventConverter.CanPreprocess) error {
g.Preprocess(func(uid string) uint32 {
return c.GetUin(uid)
})
return nil
}

0 comments on commit b9870fa

Please sign in to comment.