From ccf11d9a2ab460cc961c40cceee698ad4d39e096 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 6 Nov 2025 22:39:48 +0400 Subject: [PATCH] fix forwarding --- src/Simplex/Chat/Library/Subscriber.hs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index c308306a38..8fd875ba17 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -847,7 +847,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = let Connection {viaUserContactLink} = conn when (isJust viaUserContactLink && isNothing (memberContactId m')) $ sendXGrpLinkMem gInfo'' when (connChatVersion < batchSend2Version) $ getAutoReplyMsg >>= mapM_ (\mc -> sendGroupAutoReply mc Nothing) - unless (isRelay' membership) $ + unless (useRelays' gInfo'') $ case mStatus of GSMemPendingApproval -> pure () GSMemPendingReview -> introduceToModerators vr user gInfo'' m' @@ -2881,9 +2881,14 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = sendGroupMemberMessage gInfo member event Nothing (pure ()) isUserGrpFwdRelay :: GroupInfo -> Bool - isUserGrpFwdRelay gInfo@GroupInfo {membership = membership@GroupMember {memberRole}} + isUserGrpFwdRelay gInfo@GroupInfo {membership} | useRelays' gInfo = isRelay' membership - | otherwise = memberRole >= GRAdmin + | otherwise = memberRole' membership >= GRAdmin + + isMemberGrpFwdRelay :: GroupInfo -> GroupMember -> Bool + isMemberGrpFwdRelay gInfo m + | useRelays' gInfo = isRelay' m + | otherwise = memberRole' m >= GRAdmin xGrpLeave :: GroupInfo -> GroupMember -> RcvMessage -> UTCTime -> CM (Maybe DeliveryJobScope) xGrpLeave gInfo m msg brokerTs = do @@ -3033,8 +3038,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = createInternalChatItem user (CDDirectRcv ct) (CIRcvConnEvent RCEVerificationCodeReset) Nothing xGrpMsgForward :: GroupInfo -> GroupMember -> MemberId -> Maybe ContactName -> ChatMessage 'Json -> UTCTime -> UTCTime -> CM () - xGrpMsgForward gInfo m@GroupMember {memberRole, localDisplayName} memberId memberName chatMsg msgTs brokerTs = do - when (memberRole < GRAdmin) $ throwChatError (CEGroupContactRole localDisplayName) + xGrpMsgForward gInfo m@GroupMember {localDisplayName} memberId memberName chatMsg msgTs brokerTs = do + unless (isMemberGrpFwdRelay gInfo m) $ throwChatError (CEGroupContactRole localDisplayName) withStore' (\db -> runExceptT $ getGroupMemberByMemberId db vr user gInfo memberId) >>= \case Right author -> processForwardedMsg author Left (SEGroupMemberNotFoundByMemberId _) -> do