From d88c279c34c92c59c6098825eb23bed03ccc685f Mon Sep 17 00:00:00 2001 From: saces Date: Thu, 19 Feb 2026 14:27:51 +0100 Subject: [PATCH] add api enpoint for creating rooms --- libmxclient/mxclientlib.go | 27 +++++++++++++++++++++++++++ pygomx-module/build_ffi.py | 1 + smal/src/smal/pygomx.py | 5 +++++ 3 files changed, 33 insertions(+) diff --git a/libmxclient/mxclientlib.go b/libmxclient/mxclientlib.go index 9e63803..50005fd 100644 --- a/libmxclient/mxclientlib.go +++ b/libmxclient/mxclientlib.go @@ -12,6 +12,7 @@ import ( "mxclientlib/mxutils" "unsafe" + "maunium.net/go/mautrix" "maunium.net/go/mautrix/id" ) @@ -359,6 +360,32 @@ func apiv0_joinedrooms(cid C.int) *C.char { return C.CString(s) } +//export apiv0_createroom +func apiv0_createroom(cid C.int, data *C.char) *C.char { + cli, err := getClient(int(cid)) + if err != nil { + return C.CString(fmt.Sprintf("ERR: %v", err)) + } + + var req mautrix.ReqCreateRoom + err = json.Unmarshal([]byte(C.GoString(data)), &req) + if err != nil { + return C.CString(fmt.Sprintf("ERR: %v", err)) + } + + resp, err := cli.CreateRoom(context.Background(), &req) + if err != nil { + return C.CString(fmt.Sprintf("ERR: %v", err)) + } + + out, err := json.Marshal(resp) + if err != nil { + return C.CString(fmt.Sprintf("ERR: %v", err)) + } + s := string(out) + return C.CString(s) +} + //export apiv0_removeclient func apiv0_removeclient(cid C.int) C.int { return 0 diff --git a/pygomx-module/build_ffi.py b/pygomx-module/build_ffi.py index cd7fbab..b742d69 100644 --- a/pygomx-module/build_ffi.py +++ b/pygomx-module/build_ffi.py @@ -49,6 +49,7 @@ ffibuilder.cdef( extern char* apiv0_sendmessage(int cid, char* data); extern char* apiv0_leaveroom(int cid, char* roomid); extern char* apiv0_joinedrooms(int cid); + extern char* apiv0_createroom(int cid, char* data); extern int apiv0_removeclient(int cid); extern char* apiv0_listclients(); extern char* apiv0_getoptions(int cid); diff --git a/smal/src/smal/pygomx.py b/smal/src/smal/pygomx.py index 2979901..2c0ebc7 100644 --- a/smal/src/smal/pygomx.py +++ b/smal/src/smal/pygomx.py @@ -93,6 +93,11 @@ class _MXClient: r = lib.apiv0_joinedrooms(self.client_id) return checkApiError(r) + def _createroom(self, data_dict): + data = json.dumps(data_dict).encode(encoding="utf-8") + r = lib.apiv0_createroom(self.client_id, data) + return checkApiError(r) + def process_event(self, evt): if hasattr(self, "on_event") and callable(self.on_event): self.on_event(evt)