diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-01-21 17:40:19 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-01-21 17:40:19 +0200 |
| commit | ad58adeeb296b39d68fcfdffed99f84dd74d251e (patch) | |
| tree | 5023624ae948ace7322ff8f417d47bd356769551 /internal/server/api | |
| parent | a91411fde4911f6cef62bbc05d17638d08839389 (diff) | |
Fixed a bug where when kicking a member, it'd send a left request to the
person who is kicking and not to the person who was kicked
Diffstat (limited to 'internal/server/api')
| -rw-r--r-- | internal/server/api/api.go | 13 | ||||
| -rw-r--r-- | internal/server/api/helpers.go | 22 |
2 files changed, 33 insertions, 2 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go index e52372b..2d70174 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -615,18 +615,27 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe } if !newMember.IsMember { - NetworkPropagate(ctx, sess, request.Network, &packet.MembersInfo{ + membersInfoPayload := NetworkPropagateWithFilter(ctx, sess, request.Network, &packet.MembersInfo{ RemovedMembers: []snowflake.ID{newMember.UserID}, Members: nil, Users: nil, Network: request.Network, + }, func(userId snowflake.ID) (pass bool) { + return userId != newMember.UserID }) - return &packet.NetworksInfo{ + networksInfoPayload := &packet.NetworksInfo{ Networks: nil, RemovedNetworks: []snowflake.ID{request.Network}, Partial: false, } + + if newMember.UserID == sess.ID() { + return networksInfoPayload + } else { + UserPropagate(ctx, sess, newMember.UserID, networksInfoPayload) + return membersInfoPayload + } } user, err := queries.GetUserById(ctx, newMember.UserID) diff --git a/internal/server/api/helpers.go b/internal/server/api/helpers.go index 03f45f1..22dd0dd 100644 --- a/internal/server/api/helpers.go +++ b/internal/server/api/helpers.go @@ -108,3 +108,25 @@ func SplitMembersAndUsers(membersAndUsers []data.GetNetworkMembersRow) ([]data.M return members, users } + +func UserPropagate( + ctx context.Context, sess *session.Session, + user snowflake.ID, payload packet.Payload, +) packet.Payload { + session := sess.Manager().Session(user) + if session == nil { + log.Println(sess.Addr(), "propagation to", session.Addr(), "failed due to session being nil") + return payload + } + timeout := 1 * time.Second + context, cancel := context.WithTimeout(context.Background(), timeout) + go func() { + defer cancel() + pkt := packet.NewPacket(packet.NewMsgPackEncoder(payload)) + if ok := session.Write(context, pkt); !ok { + log.Println(sess.Addr(), "propagation to", session.Addr(), "failed") + } + }() + + return payload +} |
