@@ -263,6 +263,169 @@ func (c *Client) GetOpenIDUserInfo(ctx context.Context, serverName, accessToken
263263 return
264264}
265265
266+ type ReqMakeJoin struct {
267+ RoomID id.RoomID
268+ UserID id.UserID
269+ Via string
270+ SupportedVersions []id.RoomVersion
271+ }
272+
273+ type RespMakeJoin struct {
274+ RoomVersion id.RoomVersion `json:"room_version"`
275+ Event PDU `json:"event"`
276+ }
277+
278+ type ReqSendJoin struct {
279+ RoomID id.RoomID
280+ EventID id.EventID
281+ OmitMembers bool
282+ Event PDU
283+ Via string
284+ }
285+
286+ type ReqSendKnock struct {
287+ RoomID id.RoomID
288+ EventID id.EventID
289+ Event PDU
290+ Via string
291+ }
292+
293+ type RespSendJoin struct {
294+ AuthChain []PDU `json:"auth_chain"`
295+ Event PDU `json:"event"`
296+ MembersOmitted bool `json:"members_omitted"`
297+ ServersInRoom []string `json:"servers_in_room"`
298+ State []PDU `json:"state"`
299+ }
300+
301+ type RespSendKnock struct {
302+ KnockRoomState []PDU `json:"knock_room_state"`
303+ }
304+
305+ type ReqSendInvite struct {
306+ RoomID id.RoomID `json:"-"`
307+ UserID id.UserID `json:"-"`
308+ Event PDU `json:"event"`
309+ InviteRoomState []PDU `json:"invite_room_state"`
310+ RoomVersion id.RoomVersion `json:"room_version"`
311+ }
312+
313+ type RespSendInvite struct {
314+ Event PDU `json:"event"`
315+ }
316+
317+ type ReqMakeLeave struct {
318+ RoomID id.RoomID
319+ UserID id.UserID
320+ Via string
321+ }
322+
323+ type ReqSendLeave struct {
324+ RoomID id.RoomID
325+ EventID id.EventID
326+ Event PDU
327+ Via string
328+ }
329+
330+ type (
331+ ReqMakeKnock = ReqMakeJoin
332+ RespMakeKnock = RespMakeJoin
333+ RespMakeLeave = RespMakeJoin
334+ )
335+
336+ func (c * Client ) MakeJoin (ctx context.Context , req * ReqMakeJoin ) (resp * RespMakeJoin , err error ) {
337+ versions := make ([]string , len (req .SupportedVersions ))
338+ for i , v := range req .SupportedVersions {
339+ versions [i ] = string (v )
340+ }
341+ _ , _ , err = c .MakeFullRequest (ctx , RequestParams {
342+ ServerName : req .Via ,
343+ Method : http .MethodGet ,
344+ Path : URLPath {"v1" , "make_join" , req .RoomID , req .UserID },
345+ Query : url.Values {"ver" : versions },
346+ Authenticate : true ,
347+ ResponseJSON : & resp ,
348+ })
349+ return
350+ }
351+
352+ func (c * Client ) MakeKnock (ctx context.Context , req * ReqMakeKnock ) (resp * RespMakeKnock , err error ) {
353+ versions := make ([]string , len (req .SupportedVersions ))
354+ for i , v := range req .SupportedVersions {
355+ versions [i ] = string (v )
356+ }
357+ _ , _ , err = c .MakeFullRequest (ctx , RequestParams {
358+ ServerName : req .Via ,
359+ Method : http .MethodGet ,
360+ Path : URLPath {"v1" , "make_knock" , req .RoomID , req .UserID },
361+ Query : url.Values {"ver" : versions },
362+ Authenticate : true ,
363+ ResponseJSON : & resp ,
364+ })
365+ return
366+ }
367+
368+ func (c * Client ) SendJoin (ctx context.Context , req * ReqSendJoin ) (resp * RespSendJoin , err error ) {
369+ _ , _ , err = c .MakeFullRequest (ctx , RequestParams {
370+ ServerName : req .Via ,
371+ Method : http .MethodPut ,
372+ Path : URLPath {"v2" , "send_join" , req .RoomID , req .EventID },
373+ Query : url.Values {
374+ "omit_members" : {strconv .FormatBool (req .OmitMembers )},
375+ },
376+ Authenticate : true ,
377+ RequestJSON : req .Event ,
378+ ResponseJSON : & resp ,
379+ })
380+ return
381+ }
382+
383+ func (c * Client ) SendKnock (ctx context.Context , req * ReqSendKnock ) (resp * RespSendKnock , err error ) {
384+ _ , _ , err = c .MakeFullRequest (ctx , RequestParams {
385+ ServerName : req .Via ,
386+ Method : http .MethodPut ,
387+ Path : URLPath {"v1" , "send_knock" , req .RoomID , req .EventID },
388+ Authenticate : true ,
389+ RequestJSON : req .Event ,
390+ ResponseJSON : & resp ,
391+ })
392+ return
393+ }
394+
395+ func (c * Client ) SendInvite (ctx context.Context , req * ReqSendInvite ) (resp * RespSendInvite , err error ) {
396+ _ , _ , err = c .MakeFullRequest (ctx , RequestParams {
397+ ServerName : req .UserID .Homeserver (),
398+ Method : http .MethodPut ,
399+ Path : URLPath {"v2" , "invite" , req .RoomID , req .UserID },
400+ Authenticate : true ,
401+ RequestJSON : req ,
402+ ResponseJSON : & resp ,
403+ })
404+ return
405+ }
406+
407+ func (c * Client ) MakeLeave (ctx context.Context , req * ReqMakeLeave ) (resp * RespMakeLeave , err error ) {
408+ _ , _ , err = c .MakeFullRequest (ctx , RequestParams {
409+ ServerName : req .Via ,
410+ Method : http .MethodGet ,
411+ Path : URLPath {"v1" , "make_leave" , req .RoomID , req .UserID },
412+ Authenticate : true ,
413+ ResponseJSON : & resp ,
414+ })
415+ return
416+ }
417+
418+ func (c * Client ) SendLeave (ctx context.Context , req * ReqSendLeave ) (err error ) {
419+ _ , _ , err = c .MakeFullRequest (ctx , RequestParams {
420+ ServerName : req .Via ,
421+ Method : http .MethodPut ,
422+ Path : URLPath {"v2" , "send_leave" , req .RoomID , req .EventID },
423+ Authenticate : true ,
424+ RequestJSON : req .Event ,
425+ })
426+ return
427+ }
428+
266429type URLPath []any
267430
268431func (fup URLPath ) FullPath () []any {
0 commit comments