{ "type": "object", "title": "The current membership state of a user in the room.", "description": "Adjusts the membership state for a user in a room. It is preferable to use the membership APIs (``/rooms//invite`` etc) when performing membership actions rather than adjusting the state directly as there are a restricted set of valid transformations. For example, user A cannot force user B to join a room, and trying to force this state change directly will fail. \n\nThe following membership states are specified:\n\n- ``invite`` - The user has been invited to join a room, but has not yet joined it. They may not participate in the room until they join.\n\n- ``join`` - The user has joined the room (possibly after accepting an invite), and may participate in it.\n\n- ``leave`` - The user was once joined to the room, but has since left (possibly by choice, or possibly by being kicked).\n\n- ``ban`` - The user has been banned from the room, and is no longer allowed to join it until they are un-banned from the room (by having their membership state set to a value other than ``ban``).\n\n- ``knock`` - This is a reserved word, which currently has no meaning.\n\nThe ``third_party_invite`` property will be set if this invite is an ``invite`` event and is the successor of an ``m.room.third_party_invite`` event, and absent otherwise.\n\nThis event may also include an ``invite_room_state`` key **outside the** ``content`` **key**. If present, this contains an array of ``StrippedState`` Events. These events provide information on a subset of state events such as the room name.", "allOf": [{ "$ref": "core-event-schema/state_event.yaml" }], "properties": { "content": { "type": "object", "title": "EventContent", "properties": { "membership": { "type": "string", "description": "The membership state of the user.", "enum": ["invite","join","knock","leave","ban"] }, "avatar_url": { "type": "string", "description": "The avatar URL for this user, if any. This is added by the homeserver." }, "displayname": { "type": ["string", "null"], "description": "The display name for this user, if any. This is added by the homeserver." }, "third_party_invite": { "type": "object", "title": "Invite", "properties": { "display_name": { "type": "string", "description": "A name which can be displayed to represent the user instead of their third party identifier" }, "signed": { "type": "object", "title": "signed", "description": "A block of content which has been signed, which servers can use to verify the event. Clients should ignore this.", "properties": { "mxid": { "type": "string", "description": "The invited matrix user ID. Must be equal to the user_id property of the event." }, "token": { "type": "string", "description": "The token property of the containing third_party_invite object." }, "signatures": { "type": "object", "description": "A single signature from the verifying server, in the format specified by the Signing Events section of the server-server API.", "title": "Signatures" } }, "required": ["mxid", "signatures", "token"] } }, "required": ["display_name", "signed"] } }, "required": ["membership"] }, "state_key": { "type": "string", "description": "The ``user_id`` this membership event relates to." }, "type": { "type": "string", "enum": ["m.room.member"] }, "invite_room_state": { "type": "array", "description": "A subset of the state of the room at the time of the invite, if ``membership`` is ``invite``. Note that this state is informational, and SHOULD NOT be trusted; once the client has joined the room, it SHOULD fetch the live state from the server and discard the invite_room_state. Also, clients must not rely on any particular state being present here; they SHOULD behave properly (with possibly a degraded but not a broken experience) in the absence of any particular events here. If they are set on the room, at least the state for ``m.room.avatar``, ``m.room.canonical_alias``, ``m.room.join_rules``, and ``m.room.name`` SHOULD be included.", "items": { "type": "object", "title": "StrippedState", "description": "A stripped down state event, with only the ``type``, ``state_key`` and ``content`` keys.", "required": ["type", "state_key", "content"], "properties": { "type": { "type": "string", "description": "The ``type`` for the event." }, "state_key": { "type": "string", "description": "The ``state_key`` for the event." }, "content": { "title": "EventContent", "type": "object", "description": "The ``content`` for the event." } } } } } }