const {MatrixEvent} = require("./event") function createMembershipEvent(membership, message) { return class extends MatrixEvent { render() { super.render() return this.text(message(this.data)) } static canRender(event) { return event.type == "m.room.member" && event.content.membership == membership } } } class UnknownMembership extends MatrixEvent { render() { super.render() return this.text("Unsupported membership event") } static canRender(event) { return event.type == "m.room.member" } } const JoinedEvent = createMembershipEvent("join", () => "joined the room") const InvitedEvent = createMembershipEvent("invite", (e) => `invited ${e.content.displayname} the room`) const LeaveEvent = createMembershipEvent("leave", () => "left the room") module.exports = [JoinedEvent, InvitedEvent, LeaveEvent, UnknownMembership]