From f19f7e85117479d9ee56a7180e4ac5edc7456023 Mon Sep 17 00:00:00 2001 From: saces Date: Sat, 7 Feb 2026 10:43:11 +0100 Subject: [PATCH] new trick: leaving rooms --- libmxclient/mxclientlib.go | 17 +++++++++++++++++ pygomx/build_ffi.py | 1 + smal/src/demobot/demobot.py | 5 +++++ smal/src/smal/pygomx.py | 4 ++++ 4 files changed, 27 insertions(+) diff --git a/libmxclient/mxclientlib.go b/libmxclient/mxclientlib.go index 1a3ce82..c014f32 100644 --- a/libmxclient/mxclientlib.go +++ b/libmxclient/mxclientlib.go @@ -287,6 +287,23 @@ func apiv0_sendmessage(cid C.int, data *C.char) *C.char { return C.CString(s) } +//export apiv0_leaveroom +func apiv0_leaveroom(cid C.int, roomid *C.char) *C.char { + cli, err := getClient(int(cid)) + if err != nil { + return C.CString(fmt.Sprintf("ERR: %v", err)) + } + _, err = cli.LeaveRoom(context.Background(), id.RoomID(C.GoString(roomid))) + if err != nil { + return C.CString(fmt.Sprintf("ERR: %v", err)) + } + _, err = cli.ForgetRoom(context.Background(), id.RoomID(C.GoString(roomid))) + if err != nil { + return C.CString(fmt.Sprintf("ERR: %v", err)) + } + return C.CString("SUCCESS.") +} + //export apiv0_removeclient func apiv0_removeclient(cid C.int) C.int { return 0 diff --git a/pygomx/build_ffi.py b/pygomx/build_ffi.py index 3e260ef..dcc8e48 100644 --- a/pygomx/build_ffi.py +++ b/pygomx/build_ffi.py @@ -33,6 +33,7 @@ ffibuilder.cdef( extern char* apiv0_startclient(int cid); extern char* apiv0_stopclient(int cid); extern char* apiv0_sendmessage(int cid, char* data); + extern char* apiv0_leaveroom(int cid, char* roomid); extern int apiv0_removeclient(int cid); extern char* apiv0_listclients(); extern char* apiv0_getoptions(int cid); diff --git a/smal/src/demobot/demobot.py b/smal/src/demobot/demobot.py index 8f6f4e8..5736169 100644 --- a/smal/src/demobot/demobot.py +++ b/smal/src/demobot/demobot.py @@ -45,6 +45,11 @@ class DemoBot(SMALBot): self.stop() return + if msg["content"]["body"] == "!leave": + logger.info(f"leaving room {msg['roomid']}") + self.leaveroom(msg["roomid"]) + return + if msg["content"]["body"].startswith("!echo"): logger.error(f"reply to this: {msg}") diff --git a/smal/src/smal/pygomx.py b/smal/src/smal/pygomx.py index bdb5188..2583f32 100644 --- a/smal/src/smal/pygomx.py +++ b/smal/src/smal/pygomx.py @@ -77,6 +77,10 @@ class _MXClient: result = checkApiError(r) return result + def leaveroom(self, roomid): + r = lib.apiv0_leaveroom(self.client_id, roomid.encode(encoding="utf-8")) + checkApiError(r) + def process_event(self, evt): if hasattr(self, "on_event") and callable(self.on_event): self.on_event(evt)