File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed
packages/federation-sdk/src/services Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change @@ -712,6 +712,50 @@ export class RoomService {
712712 return kickEvent . eventId ;
713713 }
714714
715+ async updateMemberProfile (
716+ roomId : RoomID ,
717+ userId : UserID ,
718+ displayName : string ,
719+ ) : Promise < PersistentEventBase < RoomVersion , 'm.room.member' > > {
720+ const roomInfo = await this . stateService . getRoomInformation ( roomId ) ;
721+ const currentState = await this . stateService . getLatestRoomState ( roomId ) ;
722+
723+ const currentMembership = currentState . get ( `m.room.member:${ userId } ` ) ;
724+ if ( ! currentMembership || currentMembership . getMembership ( ) !== 'join' ) {
725+ throw new Error ( `User ${ userId } is not a member of room ${ roomId } ` ) ;
726+ }
727+
728+ const memberEvent = await this . stateService . buildEvent < 'm.room.member' > (
729+ {
730+ type : 'm.room.member' ,
731+ content : {
732+ membership : 'join' , // SAME membership (not changing)
733+ displayname : displayName , // NEW displayname
734+ } ,
735+ room_id : roomId ,
736+ sender : userId ,
737+ state_key : userId ,
738+ auth_events : [ ] ,
739+ depth : 0 ,
740+ prev_events : [ ] ,
741+ origin_server_ts : Date . now ( ) ,
742+ } ,
743+ roomInfo . room_version ,
744+ ) ;
745+
746+ await this . stateService . handlePdu ( memberEvent ) ;
747+
748+ if ( memberEvent . rejected ) {
749+ throw new Error (
750+ `Member profile update rejected: ${ memberEvent . rejectReason } ` ,
751+ ) ;
752+ }
753+
754+ void this . federationService . sendEventToAllServersInRoom ( memberEvent ) ;
755+
756+ return memberEvent ;
757+ }
758+
715759 async banUser (
716760 roomId : RoomID ,
717761 bannedUserId : UserID ,
You can’t perform that action at this time.
0 commit comments