api: add some endpoints (&more)
This commit is contained in:
parent
e1413fe803
commit
2577732bb4
9 changed files with 386 additions and 34 deletions
26
libmxclient/API.md
Normal file
26
libmxclient/API.md
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
# libmxclient api doc
|
||||||
|
|
||||||
|
C API
|
||||||
|
|
||||||
|
simple highlevel matrix api intended for bindings to script languages
|
||||||
|
|
||||||
|
`everything is a string`™
|
||||||
|
|
||||||
|
this should make bindings easier.
|
||||||
|
|
||||||
|
parameters are strings, either a simple name or json strings
|
||||||
|
|
||||||
|
return values are either a strings starting with `ERR:` or a json result
|
||||||
|
|
||||||
|
some funktions might return `SUCCESS.` as equivalent for `ret 0`
|
||||||
|
|
||||||
|
returned strings must be free'ed y the caller
|
||||||
|
|
||||||
|
it's the callers task to keep passed callback pointers alive
|
||||||
|
|
||||||
|
## versions
|
||||||
|
|
||||||
|
`v0` unstable, devolopment version
|
||||||
|
|
||||||
|
all other version are stable, may get additions and security fixes, no other changes
|
||||||
|
|
||||||
|
|
@ -5,8 +5,8 @@ go 1.25.0
|
||||||
require (
|
require (
|
||||||
github.com/mattn/go-sqlite3 v1.14.42
|
github.com/mattn/go-sqlite3 v1.14.42
|
||||||
github.com/rs/zerolog v1.35.0
|
github.com/rs/zerolog v1.35.0
|
||||||
go.mau.fi/util v0.9.8-0.20260406161447-0300c476893a
|
go.mau.fi/util v0.9.8
|
||||||
maunium.net/go/mautrix v0.26.5-0.20260415212519-aa49a44fe395
|
maunium.net/go/mautrix v0.27.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,8 @@ go.mau.fi/util v0.9.7 h1:AWGNbJfz1zRcQOKeOEYhKUG2fT+/26Gy6kyqcH8tnBg=
|
||||||
go.mau.fi/util v0.9.7/go.mod h1:5T2f3ZWZFAGgmFwg3dGw7YK6kIsb9lryDzvynoR98pE=
|
go.mau.fi/util v0.9.7/go.mod h1:5T2f3ZWZFAGgmFwg3dGw7YK6kIsb9lryDzvynoR98pE=
|
||||||
go.mau.fi/util v0.9.8-0.20260406161447-0300c476893a h1:OQQF3rTJH10l6+dcP0OKnYbNDMBTGoIZZINNJm8QBG8=
|
go.mau.fi/util v0.9.8-0.20260406161447-0300c476893a h1:OQQF3rTJH10l6+dcP0OKnYbNDMBTGoIZZINNJm8QBG8=
|
||||||
go.mau.fi/util v0.9.8-0.20260406161447-0300c476893a/go.mod h1:5T2f3ZWZFAGgmFwg3dGw7YK6kIsb9lryDzvynoR98pE=
|
go.mau.fi/util v0.9.8-0.20260406161447-0300c476893a/go.mod h1:5T2f3ZWZFAGgmFwg3dGw7YK6kIsb9lryDzvynoR98pE=
|
||||||
|
go.mau.fi/util v0.9.8 h1:+/jf8eM2dAT2wx9UidmaneH28r/CSCKCniCyby1qWz8=
|
||||||
|
go.mau.fi/util v0.9.8/go.mod h1:up/5mbzH2M1pSBNXqRxODn8dg/hEKbLJu92W4/SNAX0=
|
||||||
golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8=
|
golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8=
|
||||||
golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A=
|
golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A=
|
||||||
golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
|
golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
|
||||||
|
|
@ -117,3 +119,5 @@ maunium.net/go/mautrix v0.26.5-0.20260413182302-f3fab8d38470 h1:vehV8Ev2TzpV5DH9
|
||||||
maunium.net/go/mautrix v0.26.5-0.20260413182302-f3fab8d38470/go.mod h1:MX4DQLiBe0c7sI/wizruqdxHinSOWs42/DYsP9GH7Q4=
|
maunium.net/go/mautrix v0.26.5-0.20260413182302-f3fab8d38470/go.mod h1:MX4DQLiBe0c7sI/wizruqdxHinSOWs42/DYsP9GH7Q4=
|
||||||
maunium.net/go/mautrix v0.26.5-0.20260415212519-aa49a44fe395 h1:tJX3I0CSxuZAaAeF4VRiurfsYow8N2qOgr7k5wNbtVo=
|
maunium.net/go/mautrix v0.26.5-0.20260415212519-aa49a44fe395 h1:tJX3I0CSxuZAaAeF4VRiurfsYow8N2qOgr7k5wNbtVo=
|
||||||
maunium.net/go/mautrix v0.26.5-0.20260415212519-aa49a44fe395/go.mod h1:MX4DQLiBe0c7sI/wizruqdxHinSOWs42/DYsP9GH7Q4=
|
maunium.net/go/mautrix v0.26.5-0.20260415212519-aa49a44fe395/go.mod h1:MX4DQLiBe0c7sI/wizruqdxHinSOWs42/DYsP9GH7Q4=
|
||||||
|
maunium.net/go/mautrix v0.27.0 h1:yfEYwoIluVWkofUgbZl9gP4i5nQTF+QNsxtb+r5bKlM=
|
||||||
|
maunium.net/go/mautrix v0.27.0/go.mod h1:7QpEQiTy6p4LHkXXaZI+N46tGYy8HMhD0JjzZAFoFWs=
|
||||||
|
|
|
||||||
|
|
@ -302,6 +302,7 @@ func NewMXClient(homeserverURL string, userID id.UserID, accessToken string) (*M
|
||||||
syncer.OnEventType(event.EventMessage, mxclient._onMessage)
|
syncer.OnEventType(event.EventMessage, mxclient._onMessage)
|
||||||
syncer.OnEventType(event.StateMember, mxclient._onEventMember)
|
syncer.OnEventType(event.StateMember, mxclient._onEventMember)
|
||||||
syncer.OnEventType(event.AccountDataDirectChats, mxclient._onAccountDataDM)
|
syncer.OnEventType(event.AccountDataDirectChats, mxclient._onAccountDataDM)
|
||||||
|
syncer.OnEventType(event.EventRedaction, mxclient._onMessage)
|
||||||
|
|
||||||
mxclient._loadDirectMap()
|
mxclient._loadDirectMap()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import (
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"maunium.net/go/mautrix"
|
"maunium.net/go/mautrix"
|
||||||
|
"maunium.net/go/mautrix/event"
|
||||||
"maunium.net/go/mautrix/id"
|
"maunium.net/go/mautrix/id"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -37,8 +38,60 @@ static inline void call_c_on_sys_handler(on_message_handler_ptr ptr, char* jsonS
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
|
/*
|
||||||
|
error types
|
||||||
|
*/
|
||||||
|
|
||||||
var apiCanceled = errors.New("canceled by api call")
|
var apiCanceled = errors.New("canceled by api call")
|
||||||
|
|
||||||
|
/*
|
||||||
|
type conversion helpers with some basic validation
|
||||||
|
*/
|
||||||
|
|
||||||
|
func c2RoomID(roomid *C.char) (id.RoomID, error) {
|
||||||
|
rid := C.GoString(roomid)
|
||||||
|
if rid == "" || rid[0] != '!' {
|
||||||
|
return "", errors.New("invalid room id")
|
||||||
|
}
|
||||||
|
return id.RoomID(rid), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func c2EventID(eventid *C.char) (id.EventID, error) {
|
||||||
|
eid := C.GoString(eventid)
|
||||||
|
if eid == "" || eid[0] != '$' {
|
||||||
|
return "", errors.New("invalid event id")
|
||||||
|
}
|
||||||
|
return id.EventID(eid), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func c2EventType(eventtype *C.char) (et event.Type, err error) {
|
||||||
|
err = et.UnmarshalText([]byte(C.GoString(eventtype)))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func c2ContentJSON(contentjson *C.char) (contentJSON any, err error) {
|
||||||
|
err = json.Unmarshal([]byte(C.GoString(contentjson)), &contentJSON)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func returnJSON(out any, err error) *C.char {
|
||||||
|
if err != nil {
|
||||||
|
return C.CString(fmt.Sprintf("ERR: %v", err))
|
||||||
|
}
|
||||||
|
res, err := json.Marshal(out)
|
||||||
|
if err != nil {
|
||||||
|
return C.CString(fmt.Sprintf("ERR: %v", err))
|
||||||
|
}
|
||||||
|
return C.CString(string(res))
|
||||||
|
}
|
||||||
|
|
||||||
|
func returnErr(err error) *C.char {
|
||||||
|
if err == nil {
|
||||||
|
return C.CString("SUCCESS.")
|
||||||
|
}
|
||||||
|
return C.CString(fmt.Sprintf("ERR: %v", err))
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
matrix client with c callback
|
matrix client with c callback
|
||||||
*/
|
*/
|
||||||
|
|
@ -86,7 +139,7 @@ func (cli *CBClient) Set_on_sys_handler(fn C.on_sys_handler_ptr, pobj unsafe.Poi
|
||||||
cli.on_sys_handler_pobj = pobj
|
cli.on_sys_handler_pobj = pobj
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCClient creates a new Matrix Client ready for syncing
|
// NewCBClient creates a new Matrix Client ready for syncing
|
||||||
func NewCBClient(homeserverURL string, userID id.UserID, accessToken string) (*CBClient, error) {
|
func NewCBClient(homeserverURL string, userID id.UserID, accessToken string) (*CBClient, error) {
|
||||||
client, err := mxclient.NewMXClient(homeserverURL, userID, accessToken)
|
client, err := mxclient.NewMXClient(homeserverURL, userID, accessToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -355,35 +408,188 @@ func apiv0_sendmessage(cid C.int, data *C.char) *C.char {
|
||||||
return C.CString(s)
|
return C.CString(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//export apiv0_sendmessageevent
|
||||||
|
func apiv0_sendmessageevent(cid C.int, roomid *C.char, eventtype *C.char, contentjson *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
eventType, err := c2EventType(eventtype)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
contentJSON, err := c2ContentJSON(contentjson)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
return returnJSON(cli.SendMessageEvent(context.Background(), roomID, eventType, contentJSON))
|
||||||
|
}
|
||||||
|
|
||||||
|
//export apiv0_sendstateevent
|
||||||
|
func apiv0_sendstateevent(cid C.int, roomid *C.char, eventtype *C.char, statekey *C.char, contentjson *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
eventType, err := c2EventType(eventtype)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
contentJSON, err := c2ContentJSON(contentjson)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnJSON(cli.SendStateEvent(context.Background(), roomID, eventType, C.GoString(statekey), contentJSON))
|
||||||
|
}
|
||||||
|
|
||||||
|
//export apiv0_stateevent
|
||||||
|
func apiv0_stateevent(cid C.int, roomid *C.char, eventtype *C.char, statekey *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
eventType, err := c2EventType(eventtype)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var outContent any
|
||||||
|
err = cli.StateEvent(context.Background(), roomID, eventType, C.GoString(statekey), outContent)
|
||||||
|
return returnJSON(outContent, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//export apiv0_getaccountdata
|
||||||
|
func apiv0_getaccountdata(cid C.int, name *C.char) *C.char {
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
var outContent any
|
||||||
|
err = cli.GetAccountData(context.Background(), C.GoString(name), &outContent)
|
||||||
|
return returnJSON(outContent, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//export apiv0_setaccountdata
|
||||||
|
func apiv0_setaccountdata(cid C.int, name *C.char, data *C.char) *C.char {
|
||||||
|
contentJSON, err := c2ContentJSON(data)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
return returnErr(cli.SetAccountData(context.Background(), C.GoString(name), contentJSON))
|
||||||
|
}
|
||||||
|
|
||||||
|
//export apiv0_getroomaccountdata
|
||||||
|
func apiv0_getroomaccountdata(cid C.int, roomid *C.char, name *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
var outContent any
|
||||||
|
err = cli.GetRoomAccountData(context.Background(), roomID, C.GoString(name), &outContent)
|
||||||
|
return returnJSON(outContent, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//export apiv0_setroomaccountdata
|
||||||
|
func apiv0_setroomaccountdata(cid C.int, roomid *C.char, name *C.char, data *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
contentJSON, err := c2ContentJSON(data)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
return returnErr(cli.SetRoomAccountData(context.Background(), roomID, C.GoString(name), contentJSON))
|
||||||
|
}
|
||||||
|
|
||||||
|
//export apiv0_redactevent
|
||||||
|
func apiv0_redactevent(cid C.int, roomid *C.char, eventid *C.char, reason *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
eventID, err := c2EventID(eventid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
var req mautrix.ReqRedact
|
||||||
|
req.Reason = C.GoString(reason)
|
||||||
|
resp, err := cli.RedactEvent(context.Background(), roomID, eventID, req)
|
||||||
|
return returnJSON(resp, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//export apiv0_getevent
|
||||||
|
func apiv0_getevent(cid C.int, roomid *C.char, eventid *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
eventID, err := c2EventID(eventid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
cli, err := getClient(int(cid))
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
|
resp, err := cli.GetEvent(context.Background(), roomID, eventID)
|
||||||
|
return returnJSON(resp, err)
|
||||||
|
}
|
||||||
|
|
||||||
//export apiv0_leaveroom
|
//export apiv0_leaveroom
|
||||||
func apiv0_leaveroom(cid C.int, roomid *C.char) *C.char {
|
func apiv0_leaveroom(cid C.int, roomid *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
cli, err := getClient(int(cid))
|
cli, err := getClient(int(cid))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return C.CString(fmt.Sprintf("ERR: %v", err))
|
return C.CString(fmt.Sprintf("ERR: %v", err))
|
||||||
}
|
}
|
||||||
err = cli.LeaveRoomAndForget(context.Background(), id.RoomID(C.GoString(roomid)))
|
return returnErr(cli.LeaveRoomAndForget(context.Background(), roomID))
|
||||||
if err != nil {
|
|
||||||
return C.CString(fmt.Sprintf("ERR: %v", err))
|
|
||||||
}
|
|
||||||
return C.CString("SUCCESS.")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//export apiv0_joinroom
|
//export apiv0_joinroom
|
||||||
func apiv0_joinroom(cid C.int, roomid *C.char) *C.char {
|
func apiv0_joinroom(cid C.int, roomid *C.char) *C.char {
|
||||||
|
roomID, err := c2RoomID(roomid)
|
||||||
|
if err != nil {
|
||||||
|
return returnErr(err)
|
||||||
|
}
|
||||||
cli, err := getClient(int(cid))
|
cli, err := getClient(int(cid))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return C.CString(fmt.Sprintf("ERR: %v", err))
|
return C.CString(fmt.Sprintf("ERR: %v", err))
|
||||||
}
|
}
|
||||||
resp, err := cli.JoinRoomByID(context.Background(), id.RoomID(C.GoString(roomid)))
|
resp, err := cli.JoinRoomByID(context.Background(), roomID)
|
||||||
if err != nil {
|
return returnJSON(resp, err)
|
||||||
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_joinedrooms
|
//export apiv0_joinedrooms
|
||||||
|
|
@ -407,12 +613,7 @@ func apiv0_joinedrooms(cid C.int) *C.char {
|
||||||
for _, room := range resp.JoinedRooms {
|
for _, room := range resp.JoinedRooms {
|
||||||
roomList = append(roomList, roomListItem{RoomId: room, IsDirect: cli.IsDirectRoom(room)})
|
roomList = append(roomList, roomListItem{RoomId: room, IsDirect: cli.IsDirectRoom(room)})
|
||||||
}
|
}
|
||||||
out, err := json.Marshal(roomList)
|
return returnJSON(roomList, nil)
|
||||||
if err != nil {
|
|
||||||
return C.CString(fmt.Sprintf("ERR: %v", err))
|
|
||||||
}
|
|
||||||
s := string(out)
|
|
||||||
return C.CString(s)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//export apiv0_genericrequest
|
//export apiv0_genericrequest
|
||||||
|
|
@ -429,10 +630,7 @@ func apiv0_genericrequest(cid C.int, method *C.char, path *C.char, data *C.char)
|
||||||
urlPath := cli.BuildURLWithFullQuery(mautrix.BaseURLPath(bup), nil)
|
urlPath := cli.BuildURLWithFullQuery(mautrix.BaseURLPath(bup), nil)
|
||||||
d := C.GoString(data)
|
d := C.GoString(data)
|
||||||
resp, err := cli.MakeFullRequest(context.Background(), mautrix.FullRequest{Method: C.GoString(method), URL: urlPath, RequestBytes: []byte(d), ResponseJSON: nil})
|
resp, err := cli.MakeFullRequest(context.Background(), mautrix.FullRequest{Method: C.GoString(method), URL: urlPath, RequestBytes: []byte(d), ResponseJSON: nil})
|
||||||
if err != nil {
|
return returnJSON(resp, err)
|
||||||
return C.CString(fmt.Sprintf("ERR: %v", err))
|
|
||||||
}
|
|
||||||
return C.CString(string(resp))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//export apiv0_createroom
|
//export apiv0_createroom
|
||||||
|
|
@ -500,12 +698,7 @@ func apiv0_getuserdm(cid C.int, userid *C.char) *C.char {
|
||||||
return C.CString(fmt.Sprintf("ERR: %v", err))
|
return C.CString(fmt.Sprintf("ERR: %v", err))
|
||||||
}
|
}
|
||||||
list := cli.GetUserDM(C.GoString(userid))
|
list := cli.GetUserDM(C.GoString(userid))
|
||||||
out, err := json.Marshal(list)
|
return returnJSON(list, nil)
|
||||||
if err != nil {
|
|
||||||
return C.CString(fmt.Sprintf("ERR: %v", err))
|
|
||||||
}
|
|
||||||
s := string(out)
|
|
||||||
return C.CString(s)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//export apiv0_removeclient
|
//export apiv0_removeclient
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,15 @@ ffibuilder.cdef(
|
||||||
extern char* apiv0_startclient(int cid);
|
extern char* apiv0_startclient(int cid);
|
||||||
extern char* apiv0_stopclient(int cid);
|
extern char* apiv0_stopclient(int cid);
|
||||||
extern char* apiv0_sendmessage(int cid, char* data);
|
extern char* apiv0_sendmessage(int cid, char* data);
|
||||||
|
extern char* apiv0_sendmessageevent(int cid, char* roomid, char* eventtype, char* contentjson);
|
||||||
|
extern char* apiv0_sendstateevent(int cid, char* roomid, char* eventtype, char* statekey, char* contentjson);
|
||||||
|
extern char* apiv0_stateevent(int cid, char* roomid, char* eventtype, char* statekey);
|
||||||
|
extern char* apiv0_getaccountdata(int cid, char* name);
|
||||||
|
extern char* apiv0_setaccountdata(int cid, char* name, char* data);
|
||||||
|
extern char* apiv0_getroomaccountdata(int cid, char* roomid, char* name);
|
||||||
|
extern char* apiv0_setroomaccountdata(int cid, char* roomid, char* name, char* data);
|
||||||
|
extern char* apiv0_redactevent(int cid, char* roomid, char* eventid, char* reason);
|
||||||
|
extern char* apiv0_getevent(int cid, char* roomid, char* eventid);
|
||||||
extern char* apiv0_leaveroom(int cid, char* roomid);
|
extern char* apiv0_leaveroom(int cid, char* roomid);
|
||||||
extern char* apiv0_joinedrooms(int cid);
|
extern char* apiv0_joinedrooms(int cid);
|
||||||
extern char* apiv0_joinroom(int cid, char* roomid);
|
extern char* apiv0_joinroom(int cid, char* roomid);
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,15 @@ apiv0_listclients
|
||||||
apiv0_login
|
apiv0_login
|
||||||
apiv0_removeclient
|
apiv0_removeclient
|
||||||
apiv0_sendmessage
|
apiv0_sendmessage
|
||||||
|
apiv0_sendmessageevent
|
||||||
|
apiv0_sendstateevent
|
||||||
|
apiv0_stateevent
|
||||||
|
apiv0_getaccountdata
|
||||||
|
apiv0_setaccountdata
|
||||||
|
apiv0_getroomaccountdata
|
||||||
|
apiv0_setroomaccountdata
|
||||||
|
apiv0_redactevent
|
||||||
|
apiv0_getevent
|
||||||
apiv0_set_on_event_handler
|
apiv0_set_on_event_handler
|
||||||
apiv0_set_on_message_handler
|
apiv0_set_on_message_handler
|
||||||
apiv0_set_on_sys_handler
|
apiv0_set_on_sys_handler
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,72 @@ class ApiV0Api:
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def room_send_message(cid, roomid, eventtype, content):
|
||||||
|
return _stringresult(
|
||||||
|
lib.apiv0_sendmessageevent(
|
||||||
|
cid, _autostring(roomid), _autostring(eventtype), _autodict(content)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def room_send_state(cid, roomid, eventtype, statekey, content):
|
||||||
|
return _stringresult(
|
||||||
|
lib.apiv0_sendstateevent(
|
||||||
|
cid,
|
||||||
|
_autostring(roomid),
|
||||||
|
_autostring(eventtype),
|
||||||
|
_autostring(statekey),
|
||||||
|
_autodict(content),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def room_get_state(cid, roomid, eventtype, statekey):
|
||||||
|
return _stringresult(
|
||||||
|
lib.apiv0_stateevent(
|
||||||
|
cid,
|
||||||
|
_autostring(roomid),
|
||||||
|
_autostring(eventtype),
|
||||||
|
_autostring(statekey),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def redact_event(cid, roomid, eventid, reason):
|
||||||
|
return _stringresult(
|
||||||
|
lib.apiv0_redactevent(
|
||||||
|
cid,
|
||||||
|
_autostring(roomid),
|
||||||
|
_autostring(eventid),
|
||||||
|
_autostring(reason),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def account_getdata(cid, name):
|
||||||
|
return _stringresult(lib.apiv0_getaccountdata(cid, _autostring(name)))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def account_setdata(cid, name, data):
|
||||||
|
return _stringresult(
|
||||||
|
lib.apiv0_setaccountdata(cid, _autostring(name), _autodict(data))
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def room_get_accountdata(cid, roomid, name):
|
||||||
|
return _stringresult(
|
||||||
|
lib.apiv0_getroomaccountdata(cid, _autostring(roomid), _autostring(name))
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def room_set_accountdata(cid, roomid, name, data):
|
||||||
|
return _stringresult(
|
||||||
|
lib.apiv0_setroomaccountdata(
|
||||||
|
cid, _autostring(roomid), _autostring(name), _autodict(data)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def createdm(cid, uid):
|
def createdm(cid, uid):
|
||||||
return _stringresult(lib.apiv0_createdm(cid, _autostring(uid)))
|
return _stringresult(lib.apiv0_createdm(cid, _autostring(uid)))
|
||||||
|
|
@ -69,6 +135,12 @@ class ApiV0Api:
|
||||||
def joinroom(cid, roomid):
|
def joinroom(cid, roomid):
|
||||||
return _stringresult(lib.apiv0_joinroom(cid, _autostring(roomid)))
|
return _stringresult(lib.apiv0_joinroom(cid, _autostring(roomid)))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def getevent(cid, roomid, eventid):
|
||||||
|
return _stringresult(
|
||||||
|
lib.apiv0_getevent(cid, _autostring(roomid), _autostring(eventid))
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ApiV0:
|
class ApiV0:
|
||||||
"""ApiV0"""
|
"""ApiV0"""
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,44 @@ class _AsyncClient:
|
||||||
r = ApiV0Api.generic(self.client_id, method, path, data)
|
r = ApiV0Api.generic(self.client_id, method, path, data)
|
||||||
return CheckApiErrorOnly(r)
|
return CheckApiErrorOnly(r)
|
||||||
|
|
||||||
|
async def room_send_message(self, roomid, eventtype, content):
|
||||||
|
r = ApiV0Api.room_send_message(self.client_id, roomid, eventtype, content)
|
||||||
|
return CheckApiResult(r)
|
||||||
|
|
||||||
|
async def room_send_state(self, roomid, eventtype, statekey, content):
|
||||||
|
r = ApiV0Api.room_send_state(
|
||||||
|
self.client_id, roomid, eventtype, statekey, content
|
||||||
|
)
|
||||||
|
return CheckApiResult(r)
|
||||||
|
|
||||||
|
async def room_get_state(self, roomid, eventtype, statekey):
|
||||||
|
r = ApiV0Api.room_get_state(self.client_id, roomid, eventtype, statekey)
|
||||||
|
return CheckApiResult(r)
|
||||||
|
|
||||||
|
async def account_get_data(self, name):
|
||||||
|
r = ApiV0Api.account_getdata(self.client_id, name)
|
||||||
|
return CheckApiResult(r)
|
||||||
|
|
||||||
|
async def account_set_data(self, name, data):
|
||||||
|
r = ApiV0Api.account_setdata(self.client_id, name, data)
|
||||||
|
return CheckApiError(r)
|
||||||
|
|
||||||
|
async def room_get_accountdata(self, roomid, name):
|
||||||
|
r = ApiV0Api.room_get_accountdata(self.client_id, roomid, name)
|
||||||
|
return CheckApiResult(r)
|
||||||
|
|
||||||
|
async def room_set_accountdata(self, roomid, name, data):
|
||||||
|
r = ApiV0Api.room_set_accountdata(self.client_id, roomid, name, data)
|
||||||
|
return CheckApiError(r)
|
||||||
|
|
||||||
|
async def redact_event(self, roomid, eventid, reason):
|
||||||
|
r = ApiV0Api.redact_event(self.client_id, roomid, eventid, reason)
|
||||||
|
return CheckApiResult(r)
|
||||||
|
|
||||||
|
async def getevent(self, roomid, eventid):
|
||||||
|
r = ApiV0Api.getevent(self.client_id, roomid, eventid)
|
||||||
|
return CheckApiResult(r)
|
||||||
|
|
||||||
async def createdm(self, uid):
|
async def createdm(self, uid):
|
||||||
r = ApiV0Api.createdm(self.client_id, uid)
|
r = ApiV0Api.createdm(self.client_id, uid)
|
||||||
return CheckApiResult(r)
|
return CheckApiResult(r)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue