Skip to content

Commit

Permalink
Improved types for IPowerLevelsContent and hasSufficientPowerLevelFor
Browse files Browse the repository at this point in the history
  • Loading branch information
galash13 committed Mar 25, 2024
1 parent 97844f0 commit 76a4bcf
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/models/room-state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,15 @@ enum OobStatus {
export interface IPowerLevelsContent {
users?: Record<string, number>;
events?: Record<string, number>;
notifications?: Partial<Record<"room", number>>;
// eslint-disable-next-line camelcase
users_default?: number;
// eslint-disable-next-line camelcase
events_default?: number;
// eslint-disable-next-line camelcase
state_default?: number;
ban?: number;
invite?: number;
kick?: number;
redact?: number;
}
Expand Down Expand Up @@ -130,6 +132,8 @@ export type RoomStateEventHandlerMap = {
type EmittedEvents = RoomStateEvent | BeaconEvent;
type EventHandlerMap = RoomStateEventHandlerMap & BeaconEventHandlerMap;

type KeysMatching<T, V> = { [K in keyof T]-?: T[K] extends V ? K : never }[keyof T];

export class RoomState extends TypedEventEmitter<EmittedEvents, EventHandlerMap> {
public readonly reEmitter = new TypedReEmitter<EmittedEvents, EventHandlerMap>(this);
private sentinels: Record<string, RoomMember> = {}; // userId: RoomMember
Expand Down Expand Up @@ -800,7 +804,7 @@ export class RoomState extends TypedEventEmitter<EmittedEvents, EventHandlerMap>
* @param powerLevel - The power level of the member
* @returns true if the given power level is sufficient
*/
public hasSufficientPowerLevelFor(action: "ban" | "kick" | "redact", powerLevel: number): boolean {
public hasSufficientPowerLevelFor(action: KeysMatching<Required<IPowerLevelsContent>, number>, powerLevel: number): boolean {
const powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, "");

let powerLevels: IPowerLevelsContent = {};
Expand Down

0 comments on commit 76a4bcf

Please sign in to comment.