mirror of
				https://github.com/cinnyapp/cinny.git
				synced 2025-11-04 14:30:29 +03:00 
			
		
		
		
	revert changes from powerlevels
This commit is contained in:
		
							parent
							
								
									deb53a9359
								
							
						
					
					
						commit
						ba4c835983
					
				
					 3 changed files with 19 additions and 45 deletions
				
			
		| 
						 | 
				
			
			@ -83,9 +83,6 @@ export function PermissionGroups({ powerLevels, permissionGroups }: PermissionGr
 | 
			
		|||
          applyPermissionPower(draftPowerLevels, location, power)
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // eslint-disable-next-line no-param-reassign
 | 
			
		||||
        delete draftPowerLevels['in.cinny.creators'];
 | 
			
		||||
 | 
			
		||||
        return draftPowerLevels;
 | 
			
		||||
      });
 | 
			
		||||
      await mx.sendStateEvent(room.roomId, StateEvent.RoomPowerLevels as any, editedPowerLevels);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,20 +23,21 @@ const powerSortFn = (a: number, b: number) => b - a;
 | 
			
		|||
const sortPowers = (powers: number[]): number[] => powers.sort(powerSortFn);
 | 
			
		||||
 | 
			
		||||
export const getPowers = (tags: PowerLevelTags): number[] => {
 | 
			
		||||
  const powers: number[] = Object.keys(tags).map((p) => {
 | 
			
		||||
    const power = parseInt(p, 10);
 | 
			
		||||
    if (Number.isNaN(power)) {
 | 
			
		||||
      return Infinity;
 | 
			
		||||
    }
 | 
			
		||||
    return power;
 | 
			
		||||
  });
 | 
			
		||||
  const powers: number[] = Object.keys(tags)
 | 
			
		||||
    .map((p) => {
 | 
			
		||||
      const power = parseInt(p, 10);
 | 
			
		||||
      if (Number.isNaN(power)) {
 | 
			
		||||
        return undefined;
 | 
			
		||||
      }
 | 
			
		||||
      return power;
 | 
			
		||||
    })
 | 
			
		||||
    .filter((power) => typeof power === 'number');
 | 
			
		||||
 | 
			
		||||
  return sortPowers(powers);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const getUsedPowers = (powerLevels: IPowerLevels): Set<number> => {
 | 
			
		||||
  const powers: Set<number> = new Set();
 | 
			
		||||
  powers.add(Infinity);
 | 
			
		||||
 | 
			
		||||
  const findAndAddPower = (data: Record<string, unknown>) => {
 | 
			
		||||
    Object.keys(data).forEach((key) => {
 | 
			
		||||
| 
						 | 
				
			
			@ -58,16 +59,12 @@ export const getUsedPowers = (powerLevels: IPowerLevels): Set<number> => {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
const DEFAULT_TAGS: PowerLevelTags = {
 | 
			
		||||
  Infinity: {
 | 
			
		||||
    name: 'Creator',
 | 
			
		||||
    color: '#ff6a00',
 | 
			
		||||
  },
 | 
			
		||||
  9001: {
 | 
			
		||||
    name: 'Goku',
 | 
			
		||||
    color: '#ff6a00',
 | 
			
		||||
  },
 | 
			
		||||
  150: {
 | 
			
		||||
    name: 'Super Admin',
 | 
			
		||||
    name: 'Founder',
 | 
			
		||||
    color: '#ff6a7f',
 | 
			
		||||
  },
 | 
			
		||||
  101: {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ import { useStateEvent } from './useStateEvent';
 | 
			
		|||
import { StateEvent } from '../../types/matrix/room';
 | 
			
		||||
import { useStateEventCallback } from './useStateEventCallback';
 | 
			
		||||
import { useMatrixClient } from './useMatrixClient';
 | 
			
		||||
import { getRoomCreators, getStateEvent } from '../utils/room';
 | 
			
		||||
import { getStateEvent } from '../utils/room';
 | 
			
		||||
 | 
			
		||||
export type PowerLevelActions = 'invite' | 'redact' | 'kick' | 'ban' | 'historical';
 | 
			
		||||
export type PowerLevelNotificationsAction = 'room';
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +23,6 @@ export type IPowerLevels = {
 | 
			
		|||
  events?: Record<string, number>;
 | 
			
		||||
  users?: Record<string, number>;
 | 
			
		||||
  notifications?: Record<string, number>;
 | 
			
		||||
  'in.cinny.creators'?: string[];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const DEFAULT_POWER_LEVELS: Required<IPowerLevels> = {
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +39,6 @@ const DEFAULT_POWER_LEVELS: Required<IPowerLevels> = {
 | 
			
		|||
  notifications: {
 | 
			
		||||
    room: 50,
 | 
			
		||||
  },
 | 
			
		||||
  'in.cinny.creators': [],
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const fillMissingPowers = (powerLevels: IPowerLevels): IPowerLevels =>
 | 
			
		||||
| 
						 | 
				
			
			@ -59,27 +57,20 @@ const fillMissingPowers = (powerLevels: IPowerLevels): IPowerLevels =>
 | 
			
		|||
    return draftPl;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
const getPowersLevelFromMatrixEvent = (mEvent?: MatrixEvent, creators?: string[]): IPowerLevels => {
 | 
			
		||||
const getPowersLevelFromMatrixEvent = (mEvent?: MatrixEvent): IPowerLevels => {
 | 
			
		||||
  const plContent = mEvent?.getContent<IPowerLevels>();
 | 
			
		||||
 | 
			
		||||
  const powerLevels = !plContent ? DEFAULT_POWER_LEVELS : fillMissingPowers(plContent);
 | 
			
		||||
 | 
			
		||||
  return produce(powerLevels, (draftPl) => {
 | 
			
		||||
    // eslint-disable-next-line no-param-reassign
 | 
			
		||||
    draftPl['in.cinny.creators'] = creators;
 | 
			
		||||
    return draftPl;
 | 
			
		||||
  });
 | 
			
		||||
  return powerLevels;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export function usePowerLevels(room: Room): IPowerLevels {
 | 
			
		||||
  const powerLevelsEvent = useStateEvent(room, StateEvent.RoomPowerLevels);
 | 
			
		||||
  const powerLevels: IPowerLevels = useMemo(() => {
 | 
			
		||||
    const createEvent = getStateEvent(room, StateEvent.RoomCreate);
 | 
			
		||||
    return getPowersLevelFromMatrixEvent(
 | 
			
		||||
      powerLevelsEvent,
 | 
			
		||||
      createEvent ? getRoomCreators(createEvent) : undefined
 | 
			
		||||
    );
 | 
			
		||||
  }, [room, powerLevelsEvent]);
 | 
			
		||||
  const powerLevels: IPowerLevels = useMemo(
 | 
			
		||||
    () => getPowersLevelFromMatrixEvent(powerLevelsEvent),
 | 
			
		||||
    [powerLevelsEvent]
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  return powerLevels;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -101,14 +92,7 @@ export const useRoomsPowerLevels = (rooms: Room[]): Map<string, IPowerLevels> =>
 | 
			
		|||
 | 
			
		||||
    rooms.forEach((room) => {
 | 
			
		||||
      const mEvent = getStateEvent(room, StateEvent.RoomPowerLevels, '');
 | 
			
		||||
      const createEvent = getStateEvent(room, StateEvent.RoomCreate);
 | 
			
		||||
      rToPl.set(
 | 
			
		||||
        room.roomId,
 | 
			
		||||
        getPowersLevelFromMatrixEvent(
 | 
			
		||||
          mEvent,
 | 
			
		||||
          createEvent ? getRoomCreators(createEvent) : undefined
 | 
			
		||||
        )
 | 
			
		||||
      );
 | 
			
		||||
      rToPl.set(room.roomId, getPowersLevelFromMatrixEvent(mEvent));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return rToPl;
 | 
			
		||||
| 
						 | 
				
			
			@ -172,11 +156,7 @@ export type ReadPowerLevelAPI = {
 | 
			
		|||
 | 
			
		||||
export const readPowerLevel: ReadPowerLevelAPI = {
 | 
			
		||||
  user: (powerLevels, userId) => {
 | 
			
		||||
    const { users_default: usersDefault, users, 'in.cinny.creators': creators } = powerLevels;
 | 
			
		||||
 | 
			
		||||
    if (userId && Array.isArray(creators) && creators.includes(userId)) {
 | 
			
		||||
      return Infinity;
 | 
			
		||||
    }
 | 
			
		||||
    const { users_default: usersDefault, users } = powerLevels;
 | 
			
		||||
 | 
			
		||||
    if (userId && users && typeof users[userId] === 'number') {
 | 
			
		||||
      return users[userId];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue