@@ -69,7 +69,7 @@ export async function createOrUpdateFederatedUser(options: {
6969
7070 return Users . updateOne (
7171 {
72- 'federation.mui' : username ,
72+ username,
7373 } ,
7474 {
7575 username,
@@ -358,59 +358,32 @@ export class FederationMatrix extends ServiceClass implements IFederationMatrixS
358358
359359 let matrixRoomResult : { room_id : string ; event_id ?: string } ;
360360 if ( members . length === 2 ) {
361- const otherMember = members . find ( ( member ) => {
362- if ( typeof member === 'string' ) {
363- return true ; // Remote user
364- }
365- return member . _id !== creatorId ;
366- } ) ;
361+ const otherMember = members . find ( ( member ) => member . _id !== creatorId ) ;
367362 if ( ! otherMember ) {
368363 throw new Error ( 'Other member not found for 1-on-1 DM' ) ;
369364 }
370- let otherMemberMatrixId : string ;
371-
372- if ( otherMember . username ?. includes ( ':' ) ) {
373- otherMemberMatrixId = otherMember . username . startsWith ( '@' ) ? otherMember . username : `@${ otherMember . username } ` ;
374- } else {
375- otherMemberMatrixId = `@${ otherMember . username } :${ this . serverName } ` ;
365+ if ( ! isUserNativeFederated ( otherMember ) ) {
366+ throw new Error ( 'Other member is not federated' ) ;
376367 }
377- const roomId = await this . homeserverServices . room . createDirectMessageRoom ( actualMatrixUserId , otherMemberMatrixId ) ;
368+ const roomId = await this . homeserverServices . room . createDirectMessageRoom ( actualMatrixUserId , otherMember . username ) ;
378369 matrixRoomResult = { room_id : roomId } ;
379370 } else {
380371 // For group DMs (more than 2 members), create a private room
381372 const roomName = room . name || room . fname || `Group chat with ${ members . length } members` ;
382373 matrixRoomResult = await this . homeserverServices . room . createRoom ( actualMatrixUserId , roomName , 'invite' ) ;
383374 }
384375
385- // TODO is this needed?
386- // const mapping = await MatrixBridgedRoom.getLocalRoomId(matrixRoomResult.room_id);
387- // if (!mapping) {
388- // await MatrixBridgedRoom.createOrUpdateByLocalRoomId(room._id, matrixRoomResult.room_id, this.serverName);
389- // }
390-
391376 for await ( const member of members ) {
392- if ( typeof member !== 'string' && member . _id === creatorId ) {
377+ if ( member . _id === creatorId ) {
393378 continue ;
394379 }
395380
396- try {
397- if ( ! member . username ?. includes ( ':' ) ) {
398- continue ;
399- }
400-
401- const memberMatrixUserId = member . username . startsWith ( '@' ) ? member . username : `@${ member . username } ` ;
402-
403- const existingMemberMatrixUserId = await Users . findOne ( { 'federation.mui' : memberMatrixUserId } ) ;
404- if ( ! existingMemberMatrixUserId ) {
405- await createOrUpdateFederatedUser ( {
406- username : member . _id as `@${string } :${string } `,
407- origin : memberMatrixUserId . split ( ':' ) . pop ( ) || '' ,
408- } ) ;
409- }
381+ if ( ! isUserNativeFederated ( member ) ) {
382+ continue ;
383+ }
410384
411- if ( members . length > 2 ) {
412- await this . homeserverServices . invite . inviteUserToRoom ( memberMatrixUserId , matrixRoomResult . room_id , actualMatrixUserId ) ;
413- }
385+ try {
386+ await this . homeserverServices . invite . inviteUserToRoom ( member . username , matrixRoomResult . room_id , actualMatrixUserId ) ;
414387 } catch ( error ) {
415388 this . logger . error ( 'Error creating or updating bridged user for DM:' , error ) ;
416389 }
0 commit comments