mirror of
https://github.com/Kyren223/eko.git
synced 2026-07-12 15:20:25 +00:00
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
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user