@@ -15,7 +15,11 @@ import { notifyOnRoomChangedById, notifyOnSubscriptionChanged } from '../lib/not
1515 * Executes only the necessary database operations, with no callbacks, to prevent
1616 * propagation loops during external event processing.
1717 */
18- export const performUserRemoval = async function ( room : IRoom , user : IUser , options ?: { byUser ?: IUser } ) : Promise < void > {
18+ export const performUserRemoval = async function (
19+ room : IRoom ,
20+ user : IUser ,
21+ options ?: { byUser ?: IUser ; skipAppPreEvents ?: boolean ; customSystemMessage ?: MessageTypesValues } ,
22+ ) : Promise < void > {
1923 const subscription = await Subscriptions . findOneByRoomIdAndUserId ( room . _id , user . _id , {
2024 projection : { _id : 1 , status : 1 } ,
2125 } ) ;
@@ -28,7 +32,9 @@ export const performUserRemoval = async function (room: IRoom, user: IUser, opti
2832
2933 if ( subscription ) {
3034 const removedUser = user ;
31- if ( options ?. byUser ) {
35+ if ( options ?. customSystemMessage ) {
36+ await Message . saveSystemMessage ( options ?. customSystemMessage , room . _id , user . username || '' , user ) ;
37+ } else if ( options ?. byUser ) {
3238 const extraData = {
3339 u : options . byUser ,
3440 } ;
@@ -99,49 +105,6 @@ export const removeUserFromRoom = async function (
99105
100106 await performUserRemoval ( room , user , options ) ;
101107
102- const subscription = await Subscriptions . findOneByRoomIdAndUserId ( rid , user . _id , {
103- projection : { _id : 1 } ,
104- } ) ;
105-
106- if ( subscription ) {
107- const removedUser = user ;
108- if ( options ?. customSystemMessage ) {
109- await Message . saveSystemMessage ( options ?. customSystemMessage , rid , user . username || '' , user ) ;
110- } else if ( options ?. byUser ) {
111- const extraData = {
112- u : options . byUser ,
113- } ;
114-
115- if ( room . teamMain ) {
116- await Message . saveSystemMessage ( 'removed-user-from-team' , rid , user . username || '' , user , extraData ) ;
117- } else {
118- await Message . saveSystemMessage ( 'ru' , rid , user . username || '' , user , extraData ) ;
119- }
120- } else if ( room . teamMain ) {
121- await Message . saveSystemMessage ( 'ult' , rid , removedUser . username || '' , removedUser ) ;
122- } else {
123- await Message . saveSystemMessage ( 'ul' , rid , removedUser . username || '' , removedUser ) ;
124- }
125- }
126-
127- if ( room . t === 'l' ) {
128- await Message . saveSystemMessage ( 'command' , rid , 'survey' , user ) ;
129- }
130-
131- const deletedSubscription = await Subscriptions . removeByRoomIdAndUserId ( rid , user . _id ) ;
132- if ( deletedSubscription ) {
133- void notifyOnSubscriptionChanged ( deletedSubscription , 'removed' ) ;
134- }
135-
136- if ( room . teamId && room . teamMain ) {
137- await Team . removeMember ( room . teamId , user . _id ) ;
138- }
139-
140- if ( room . encrypted && settings . get ( 'E2E_Enable' ) ) {
141- await Rooms . removeUsersFromE2EEQueueByRoomId ( room . _id , [ user . _id ] ) ;
142- }
143-
144- // TODO: CACHE: maybe a queue?
145108 await afterLeaveRoomCallback . run ( { user, kicker : options ?. byUser } , room ) ;
146109
147110 await Apps . self ?. triggerEvent ( AppEvents . IPostRoomUserLeave , room , user , options ?. byUser ) ;
0 commit comments