import { MatrixClient, MatrixEvent, Room } from 'matrix-js-sdk'; import { useMemo } from 'react'; import { useStateEvent } from './useStateEvent'; import { IRoomCreateContent, StateEvent } from '../../types/matrix/room'; import { creatorsSupported } from '../utils/matrix'; import { getStateEvent } from '../utils/room'; export const getRoomCreators = (createEvent: MatrixEvent): Set => { const createContent = createEvent.getContent(); const creators: Set = new Set(); if (!creatorsSupported(createContent.room_version)) return creators; if (createEvent.event.sender) { creators.add(createEvent.event.sender); } if ('additional_creators' in createContent && Array.isArray(createContent.additional_creators)) { createContent.additional_creators.forEach((creator) => { if (typeof creator === 'string') { creators.add(creator); } }); } return creators; }; export const useRoomCreators = (room: Room): Set => { const createEvent = useStateEvent(room, StateEvent.RoomCreate); const creators = useMemo( () => (createEvent ? getRoomCreators(createEvent) : new Set()), [createEvent] ); return creators; }; export const getRoomCreatorsForRoomId = (mx: MatrixClient, roomId: string): Set => { const room = mx.getRoom(roomId); if (!room) return new Set(); const createEvent = getStateEvent(room, StateEvent.RoomCreate); if (!createEvent) return new Set(); return getRoomCreators(createEvent); };