1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

feat group name updated event.

This commit is contained in:
Mrs4s 2021-03-09 22:48:45 +08:00
parent c04b18af70
commit 5648912288
7 changed files with 5249 additions and 458 deletions

View File

@ -105,6 +105,13 @@ type (
Member *GroupMemberInfo
}
GroupNameUpdatedEvent struct {
Group *GroupInfo
OldName string
NewName string
OperatorUin int64
}
MemberCardUpdatedEvent struct {
Group *GroupInfo
OldCard string

View File

@ -21,6 +21,7 @@ type eventHandlers struct {
memberJoinedHandlers []func(*QQClient, *MemberJoinGroupEvent)
memberLeavedHandlers []func(*QQClient, *MemberLeaveGroupEvent)
memberCardUpdatedHandlers []func(*QQClient, *MemberCardUpdatedEvent)
groupNameUpdatedHandlers []func(*QQClient, *GroupNameUpdatedEvent)
permissionChangedHandlers []func(*QQClient, *MemberPermissionChangedEvent)
groupInvitedHandlers []func(*QQClient, *GroupInvitedRequest)
joinRequestHandlers []func(*QQClient, *UserJoinGroupRequest)
@ -85,6 +86,10 @@ func (c *QQClient) OnGroupMemberCardUpdated(f func(*QQClient, *MemberCardUpdated
c.eventHandlers.memberCardUpdatedHandlers = append(c.eventHandlers.memberCardUpdatedHandlers, f)
}
func (c *QQClient) OnGroupNameUpdated(f func(*QQClient, *GroupNameUpdatedEvent)) {
c.eventHandlers.groupNameUpdatedHandlers = append(c.eventHandlers.groupNameUpdatedHandlers, f)
}
func (c *QQClient) OnGroupMemberPermissionChanged(f func(*QQClient, *MemberPermissionChangedEvent)) {
c.eventHandlers.permissionChangedHandlers = append(c.eventHandlers.permissionChangedHandlers, f)
}
@ -292,6 +297,17 @@ func (c *QQClient) dispatchMemberCardUpdatedEvent(e *MemberCardUpdatedEvent) {
}
}
func (c *QQClient) dispatchGroupNameUpdatedEvent(e *GroupNameUpdatedEvent) {
if e == nil {
return
}
for _, f := range c.eventHandlers.groupNameUpdatedHandlers {
cover(func() {
f(c, e)
})
}
}
func (c *QQClient) dispatchPermissionChanged(e *MemberPermissionChangedEvent) {
if e == nil {
return

View File

@ -2,6 +2,7 @@ package client
import (
"fmt"
"github.com/Mrs4s/MiraiGo/client/pb/msgtype0x210"
"strconv"
"time"
@ -169,11 +170,28 @@ func msgType0x210SubD4Decoder(c *QQClient, protobuf []byte) error {
}
func msgType0x210Sub27Decoder(c *QQClient, protobuf []byte) error {
s27 := pb.Sub27{}
s27 := msgtype0x210.SubMsg0X27Body{}
if err := proto.Unmarshal(protobuf, &s27); err != nil {
return errors.Wrap(err, "failed to unmarshal protobuf message")
}
for _, m := range s27.ModInfos {
if m.ModGroupProfile != nil {
for _, info := range m.ModGroupProfile.GroupProfileInfos {
switch info.GetField() {
case 1:
if g := c.FindGroup(int64(m.ModGroupProfile.GetGroupCode())); g != nil {
old := g.Name
g.Name = string(info.GetValue())
c.dispatchGroupNameUpdatedEvent(&GroupNameUpdatedEvent{
Group: g,
OldName: old,
NewName: g.Name,
OperatorUin: int64(m.ModGroupProfile.GetCmdUin()),
})
}
}
}
}
if m.DelFriend != nil {
frdUin := m.DelFriend.Uins[0]
if frd := c.FindFriend(int64(frdUin)); frd != nil {

File diff suppressed because it is too large Load Diff

View File

@ -235,18 +235,6 @@ message MessageItem {
bytes sig = 7;
}
message Sub27DelFriend {
repeated uint64 uins = 1;
}
message Sub27ForwardBody {
Sub27DelFriend delFriend = 14;
}
message Sub27 {
repeated Sub27ForwardBody modInfos = 1;
}
message SubD4 {
int64 uin = 1;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,341 @@
syntax = "proto2";
option go_package = ".;msgtype0x210";
message AddGroup {
optional uint32 groupid = 1;
optional uint32 sortid = 2;
optional bytes groupname = 3;
}
message AppointmentNotify {
optional uint64 fromUin = 1;
optional string appointId = 2;
optional uint32 notifytype = 3;
optional string tipsContent = 4;
optional uint32 unreadCount = 5;
optional string joinWording = 6;
optional string viewWording = 7;
optional bytes sig = 8;
optional bytes eventInfo = 9;
optional bytes nearbyEventInfo = 10;
optional bytes feedEventInfo = 11;
}
message BinaryMsg {
optional uint32 opType = 1;
optional bytes opValue = 2;
}
message ChatMatchInfo {
optional bytes sig = 1;
optional uint64 uin = 2;
optional uint64 matchUin = 3;
optional bytes tipsWording = 4;
optional uint32 leftChatTime = 5;
optional uint64 timeStamp = 6;
optional uint32 matchExpiredTime = 7;
optional uint32 c2CExpiredTime = 8;
optional uint32 matchCount = 9;
optional bytes nick = 10;
}
message ConfMsgRoamFlag {
optional uint64 confid = 1;
optional uint32 flag = 2;
optional uint64 timestamp = 3;
}
message DaRenNotify {
optional uint64 uin = 1;
optional uint32 loginDays = 2;
optional uint32 days = 3;
optional uint32 isYestodayLogin = 4;
optional uint32 isTodayLogin = 5;
}
message DelFriend {
repeated uint64 uins = 1;
}
message DelGroup {
optional uint32 groupid = 1;
}
message FanpaiziNotify {
optional uint64 fromUin = 1;
optional string fromNick = 2;
optional bytes tipsContent = 3;
optional bytes sig = 4;
}
message ForwardBody {
optional uint32 notifyType = 1;
optional uint32 opType = 2;
optional AddGroup addGroup = 3;
optional DelGroup delGroup = 4;
optional ModGroupName modGroupName = 5;
optional ModGroupSort modGroupSort = 6;
optional ModFriendGroup modFriendGroup = 7;
optional ModProfile modProfile = 8;
optional ModFriendRemark modFriendRemark = 9;
optional ModLongNick modLongNick = 10;
optional ModCustomFace modCustomFace = 11;
optional ModGroupProfile modGroupProfile = 12;
optional ModGroupMemberProfile modGroupMemberProfile = 13;
optional DelFriend delFriend = 14;
optional ModFrdRoamPriv roamPriv = 15;
optional GrpMsgRoamFlag grpMsgRoamFlag = 16;
optional ConfMsgRoamFlag confMsgRoamFlag = 17;
optional ModLongNick modRichLongNick = 18;
optional BinaryMsg binPkg = 19;
optional ModSnsGeneralInfo modFriendRings = 20;
optional ModConfProfile modConfProfile = 21;
optional SnsUpdateFlag modFriendFlag = 22;
optional AppointmentNotify appointmentNotify = 23;
optional DaRenNotify darenNotify = 25;
optional NewComeinUserNotify newComeinUserNotify = 26;
optional PushSearchDev pushSearchDev = 200;
optional PushReportDev pushReportDev = 201;
optional QQPayPush qqPayPush = 202;
optional bytes redpointInfo = 203;
optional HotFriendNotify hotFriendNotify = 204;
optional PraiseRankNotify praiseRankNotify = 205;
optional MQQCampusNotify campusNotify = 210;
optional ModLongNick modRichLongNickEx = 211;
optional ChatMatchInfo chatMatchInfo = 212;
optional FrdCustomOnlineStatusChange frdCustomOnlineStatusChange = 214;
optional FanpaiziNotify fanpanziNotify = 2000;
}
message FrdCustomOnlineStatusChange {
optional uint64 uin = 1;
}
message FriendGroup {
optional uint64 fuin = 1;
repeated uint32 oldGroupId = 2;
repeated uint32 newGroupId = 3;
}
message FriendRemark {
optional uint32 type = 1;
optional uint64 fuin = 2;
optional bytes rmkName = 3;
optional uint64 groupCode = 4;
}
message GPS {
optional int32 lat = 1;
optional int32 lon = 2;
optional int32 alt = 3;
optional int32 type = 4;
}
message GroupMemberProfileInfo {
optional uint32 field = 1;
optional bytes value = 2;
}
message GroupProfileInfo {
optional uint32 field = 1;
optional bytes value = 2;
}
message GroupSort {
optional uint32 groupid = 1;
optional uint32 sortid = 2;
}
message GrpMsgRoamFlag {
optional uint64 groupcode = 1;
optional uint32 flag = 2;
optional uint64 timestamp = 3;
}
message HotFriendNotify {
optional uint64 dstUin = 1;
optional uint32 praiseHotLevel = 2;
optional uint32 chatHotLevel = 3;
optional uint32 praiseHotDays = 4;
optional uint32 chatHotDays = 5;
optional uint32 closeLevel = 6;
optional uint32 closeDays = 7;
optional uint32 praiseFlag = 8;
optional uint32 chatFlag = 9;
optional uint32 closeFlag = 10;
optional uint64 notifyTime = 11;
optional uint64 lastPraiseTime = 12;
optional uint64 lastChatTime = 13;
optional uint32 qzoneHotLevel = 14;
optional uint32 qzoneHotDays = 15;
optional uint32 qzoneFlag = 16;
optional uint64 lastQzoneTime = 17;
}
message MQQCampusNotify {
optional uint64 fromUin = 1;
optional string wording = 2;
optional string target = 3;
optional uint32 type = 4;
optional string source = 5;
}
message ModConfProfile {
optional uint64 uin = 1;
optional uint32 confUin = 2;
repeated ProfileInfo profileInfos = 3;
}
message ModCustomFace {
optional uint32 type = 1;
optional uint64 uin = 2;
optional uint64 groupCode = 3;
optional uint64 cmdUin = 4;
}
message ModFrdRoamPriv {
repeated OneRoamPriv roamPriv = 1;
}
message ModFriendGroup {
repeated FriendGroup frdGroup = 1;
}
message ModFriendRemark {
repeated FriendRemark frdRmk = 1;
}
message ModGroupMemberProfile {
optional uint64 groupUin = 1;
optional uint64 uin = 2;
repeated GroupMemberProfileInfo groupMemberProfileInfos = 3;
optional uint64 groupCode = 4;
}
message ModGroupName {
optional uint32 groupid = 1;
optional bytes groupname = 2;
}
message ModGroupProfile {
optional uint64 groupUin = 1;
repeated GroupProfileInfo groupProfileInfos = 2;
optional uint64 groupCode = 3;
optional uint64 cmdUin = 4;
}
message ModGroupSort {
repeated GroupSort groupsort = 1;
}
message ModLongNick {
optional uint64 uin = 1;
optional bytes value = 2;
}
message ModProfile {
optional uint64 uin = 1;
repeated ProfileInfo profileInfos = 2;
}
message ModSnsGeneralInfo {
repeated SnsUpateBuffer snsGeneralInfos = 1;
}
message SubMsg0x27Body {
repeated ForwardBody modInfos = 1;
}
message NewComeinUser {
optional uint64 uin = 1;
optional uint32 isFrd = 2;
optional bytes remark = 3;
optional bytes nick = 4;
}
message NewComeinUserNotify {
optional uint32 msgType = 1;
optional bool ongNotify = 2;
optional uint32 pushTime = 3;
optional NewComeinUser newComeinUser = 4;
optional NewGroup newGroup = 5;
optional NewGroupUser newGroupUser = 6;
}
message NewGroup {
optional uint64 groupCode = 1;
optional bytes groupName = 2;
optional uint64 ownerUin = 3;
optional bytes ownerNick = 4;
optional bytes distance = 5;
}
message NewGroupUser {
optional uint64 uin = 1;
optional int32 sex = 2;
optional int32 age = 3;
optional string nick = 4;
optional bytes distance = 5;
}
message OneRoamPriv {
optional uint64 fuin = 1;
optional uint32 privTag = 2;
optional uint32 privValue = 3;
}
message PraiseRankNotify {
optional uint32 isChampion = 11;
optional uint32 rankNum = 12;
optional string msg = 13;
}
message ProfileInfo {
optional uint32 field = 1;
optional bytes value = 2;
}
message PushReportDev {
optional uint32 msgType = 1;
optional bytes cookie = 4;
optional uint32 reportMaxNum = 5;
optional bytes sn = 6;
}
message PushSearchDev {
optional uint32 msgType = 1;
optional GPS gpsInfo = 2;
optional uint32 devTime = 3;
optional uint32 pushTime = 4;
optional uint64 din = 5;
optional string data = 6;
}
message QQPayPush {
optional uint64 uin = 1;
optional bool payOk = 2;
}
message SnsUpateBuffer {
optional uint64 uin = 1;
optional uint64 code = 2;
optional uint32 result = 3;
repeated SnsUpdateItem snsUpdateItem = 400;
repeated uint32 idlist = 401;
}
message SnsUpdateFlag {
repeated SnsUpdateOneFlag updateSnsFlag = 1;
}
message SnsUpdateItem {
optional uint32 updateSnsType = 1;
optional bytes value = 2;
}
message SnsUpdateOneFlag {
optional uint64 XUin = 1;
optional uint64 id = 2;
optional uint32 flag = 3;
}