libQuotient
A Qt library for building matrix clients
Loading...
Searching...
No Matches
create_room.h
Go to the documentation of this file.
1// THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
2
3#pragma once
4
5#include <Quotient/jobs/basejob.h>
6
7namespace Quotient {
8
9//! \brief Create a new room
10//!
11//! Create a new room with various configuration options.
12//!
13//! The server MUST apply the normal state resolution rules when creating
14//! the new room, including checking power levels for each event. It MUST
15//! apply the events implied by the request in the following order:
16//!
17//! 1. The `m.room.create` event itself. Must be the first event in the
18//! room.
19//!
20//! 2. An `m.room.member` event for the creator to join the room. This is
21//! needed so the remaining events can be sent.
22//!
23//! 3. A default `m.room.power_levels` event, giving the room creator
24//! (and not other members) permission to send state events. Overridden
25//! by the `power_level_content_override` parameter.
26//!
27//! 4. An `m.room.canonical_alias` event if `room_alias_name` is given.
28//!
29//! 5. Events set by the `preset`. Currently these are the `m.room.join_rules`,
30//! `m.room.history_visibility`, and `m.room.guest_access` state events.
31//!
32//! 6. Events listed in `initial_state`, in the order that they are
33//! listed.
34//!
35//! 7. Events implied by `name` and `topic` (`m.room.name` and `m.room.topic`
36//! state events).
37//!
38//! 8. Invite events implied by `invite` and `invite_3pid` (`m.room.member` with
39//! `membership: invite` and `m.room.third_party_invite`).
40//!
41//! The available presets do the following with respect to room state:
42//!
43//! | Preset | `join_rules` | `history_visibility` | `guest_access` | Other |
44//! |------------------------|--------------|----------------------|----------------|-------|
45//! | `private_chat` | `invite` | `shared` | `can_join` | |
46//! | `trusted_private_chat` | `invite` | `shared` | `can_join` | All invitees
47//! are given the same power level as the room creator. | | `public_chat` | `public` |
48//! `shared` | `forbidden` | |
49//!
50//! The server will create a `m.room.create` event in the room with the
51//! requesting user as the creator, alongside other keys provided in the
52//! `creation_content`.
54public:
55 // Inner data structures
56
58 //! The hostname+port of the identity server which should be used for third-party identifier
59 //! lookups.
61
62 //! An access token previously registered with the identity server. Servers
63 //! can treat this as optional to distinguish between r0.5-compatible clients
64 //! and this specification version.
66
67 //! The kind of address being passed in the address field, for example `email`
68 //! (see [the list of recognised values](/appendices/#3pid-types)).
70
71 //! The invitee's third-party identifier.
73 };
74
76 //! The type of event to send.
78
79 //! The content of the event.
81
82 //! The state_key of the state event. Defaults to an empty string.
84 };
85
86 // Construction/destruction
87
88 //! \param visibility
89 //! A `public` visibility indicates that the room will be shown
90 //! in the published room list. A `private` visibility will hide
91 //! the room from the published room list. Rooms default to
92 //! `private` visibility if this key is not included. NB: This
93 //! should not be confused with `join_rules` which also uses the
94 //! word `public`.
95 //!
96 //! \param roomAliasName
97 //! The desired room alias **local part**. If this is included, a
98 //! room alias will be created and mapped to the newly created
99 //! room. The alias will belong on the *same* homeserver which
100 //! created the room. For example, if this was set to "foo" and
101 //! sent to the homeserver "example.com" the complete room alias
102 //! would be `#foo:example.com`.
103 //!
104 //! The complete room alias will become the canonical alias for
105 //! the room and an `m.room.canonical_alias` event will be sent
106 //! into the room.
107 //!
108 //! \param name
109 //! If this is included, an `m.room.name` event will be sent
110 //! into the room to indicate the name of the room. See Room
111 //! Events for more information on `m.room.name`.
112 //!
113 //! \param topic
114 //! If this is included, an `m.room.topic` event will be sent
115 //! into the room to indicate the topic for the room. See Room
116 //! Events for more information on `m.room.topic`.
117 //!
118 //! \param invite
119 //! A list of user IDs to invite to the room. This will tell the
120 //! server to invite everyone in the list to the newly created room.
121 //!
122 //! \param invite3pid
123 //! A list of objects representing third-party IDs to invite into
124 //! the room.
125 //!
126 //! \param roomVersion
127 //! The room version to set for the room. If not provided, the homeserver is
128 //! to use its configured default. If provided, the homeserver will return a
129 //! 400 error with the errcode `M_UNSUPPORTED_ROOM_VERSION` if it does not
130 //! support the room version.
131 //!
132 //! \param creationContent
133 //! Extra keys, such as `m.federate`, to be added to the content
134 //! of the [`m.room.create`](/client-server-api/#mroomcreate) event. The server will overwrite
135 //! the following keys: `creator`, `room_version`. Future versions of the specification may
136 //! allow the server to overwrite other keys.
137 //!
138 //! \param initialState
139 //! A list of state events to set in the new room. This allows
140 //! the user to override the default state events set in the new
141 //! room. The expected format of the state events are an object
142 //! with type, state_key and content keys set.
143 //!
144 //! Takes precedence over events set by `preset`, but gets
145 //! overridden by `name` and `topic` keys.
146 //!
147 //! \param preset
148 //! Convenience parameter for setting various default state events
149 //! based on a preset.
150 //!
151 //! If unspecified, the server should use the `visibility` to determine
152 //! which preset to use. A visibility of `public` equates to a preset of
153 //! `public_chat` and `private` visibility equates to a preset of
154 //! `private_chat`.
155 //!
156 //! \param isDirect
157 //! This flag makes the server set the `is_direct` flag on the
158 //! `m.room.member` events sent to the users in `invite` and
159 //! `invite_3pid`. See [Direct Messaging](/client-server-api/#direct-messaging) for more
160 //! information.
161 //!
162 //! \param powerLevelContentOverride
163 //! The power level content to override in the default power level
164 //! event. This object is applied on top of the generated
165 //! [`m.room.power_levels`](/client-server-api/#mroompower_levels)
166 //! event content prior to it being sent to the room. Defaults to
167 //! overriding nothing.
168 explicit CreateRoomJob(const QString& visibility = {}, const QString& roomAliasName = {},
169 const QString& name = {}, const QString& topic = {},
170 const QStringList& invite = {},
171 const QVector<Invite3pid>& invite3pid = {},
172 const QString& roomVersion = {}, const QJsonObject& creationContent = {},
173 const QVector<StateEvent>& initialState = {}, const QString& preset = {},
174 std::optional<bool> isDirect = std::nullopt,
176
177 // Result properties
178
179 //! The created room's ID.
180 QString roomId() const { return loadFromJson<QString>("room_id"_L1); }
181};
182
183inline auto collectResponse(const CreateRoomJob* job) { return job->roomId(); }
184
185template <>
187 static void dumpTo(QJsonObject& jo, const CreateRoomJob::Invite3pid& pod)
188 {
189 addParam(jo, "id_server"_L1, pod.idServer);
190 addParam(jo, "id_access_token"_L1, pod.idAccessToken);
191 addParam(jo, "medium"_L1, pod.medium);
192 addParam(jo, "address"_L1, pod.address);
193 }
194};
195
196template <>
198 static void dumpTo(QJsonObject& jo, const CreateRoomJob::StateEvent& pod)
199 {
200 addParam(jo, "type"_L1, pod.type);
201 addParam(jo, "content"_L1, pod.content);
202 addParam<IfNotEmpty>(jo, "state_key"_L1, pod.stateKey);
203 }
204};
205
206} // namespace Quotient
Create a new room.
Definition create_room.h:53
auto collectResponse(const GetAccountDataJob *job)
#define QUOTIENT_API