UNPKG

@vector-im/matrix-bot-sdk

Version:

TypeScript/JavaScript SDK for Matrix bots and appservices

86 lines (76 loc) 2.15 kB
import { StateEvent } from "./RoomEvent"; import { InvalidEventError } from "./InvalidEventError"; /** * The types of membership that are valid in Matrix. * @category Matrix event info * @see MembershipEventContent */ export type Membership = "join" | "leave" | "ban" | "invite"; /** * The effective membership states a user can be in. * @category Matrix event info * @see MembershipEventContent */ export type EffectiveMembership = "join" | "leave" | "invite"; /** * The content definition for m.room.member events * @category Matrix event contents * @see MembershipEvent */ export interface MembershipEventContent { avatar_url?: string; displayname?: string; reason?: string; membership: Membership; is_direct?: boolean; unsigned?: any; third_party_invite?: { display_name: string; signed: any; }; } /** * Represents an m.room.member state event * @category Matrix events */ export class MembershipEvent extends StateEvent<MembershipEventContent> { constructor(event: any) { super(event); } /** * True if the membership event targets the sender. False otherwise. * * This will typically by false for kicks and bans. */ public get ownMembership(): boolean { return this.membershipFor === this.sender; } /** * The reason why a user may have sent this membership. */ public get reason(): string|undefined { return this.content.reason; } /** * The user ID the membership affects. */ public get membershipFor(): string { return this.stateKey; } /** * The user's membership. */ public get membership(): Membership { const membership = this.content.membership; if (!membership) throw new InvalidEventError("no membership field in content"); return membership; } /** * The user's effective membership. */ public get effectiveMembership(): EffectiveMembership { if (this.membership === "join") return "join"; if (this.membership === "invite") return "invite"; return "leave"; } }