From 715c18ef5f647926a4e41bab5731ea35e132e35d Mon Sep 17 00:00:00 2001 From: dsx137 <70027572+dsx137@users.noreply.github.com> Date: Mon, 31 Aug 2026 11:39:56 +0800 Subject: [PATCH] fix(core): trigger after-join webhooks for invited members (#3797) --- internal/rpc/group/callback.go | 13 +++++++++++++ internal/rpc/group/group.go | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index 559d64ff4..7dff9f2d9 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -287,6 +287,19 @@ func (s *groupServer) webhookAfterJoinGroup(ctx context.Context, after *config.A s.webhookClient.AsyncPost(ctx, cbReq.GetCallbackCommand(), cbReq, &callbackstruct.CallbackAfterJoinGroupResp{}, after) } +func afterJoinGroupRequests(members []*model.GroupMember, reqMessage string) []*group.JoinGroupReq { + requests := make([]*group.JoinGroupReq, 0, len(members)) + for _, member := range members { + requests = append(requests, &group.JoinGroupReq{ + GroupID: member.GroupID, + ReqMessage: reqMessage, + JoinSource: member.JoinSource, + InviterUserID: member.UserID, + }) + } + return requests +} + func (s *groupServer) webhookBeforeSetGroupInfo(ctx context.Context, before *config.BeforeConfig, req *group.SetGroupInfoReq) error { return webhook.WithCondition(ctx, before, func(ctx context.Context) error { cbReq := &callbackstruct.CallbackBeforeSetGroupInfoReq{ diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 0405115c7..f8cfb6918 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -478,6 +478,9 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.Invite return nil, err } } + for _, joinReq := range afterJoinGroupRequests(groupMembers, req.Reason) { + s.webhookAfterJoinGroup(ctx, &s.config.WebhooksConfig.AfterJoinGroup, joinReq) + } return &pbgroup.InviteUserToGroupResp{}, nil } @@ -898,6 +901,9 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbgroup if err := s.setMemberJoinSeq(ctx, req.GroupID, []string{req.FromUserID}); err != nil { return nil, err } + for _, joinReq := range afterJoinGroupRequests([]*model.GroupMember{member}, groupRequest.ReqMsg) { + s.webhookAfterJoinGroup(ctx, &s.config.WebhooksConfig.AfterJoinGroup, joinReq) + } } case constant.GroupResponseRefuse: s.notification.GroupApplicationRejectedNotification(ctx, req)