gomatrix: github.com/matrix-org/gomatrix Index | Examples | Files

package gomatrix

import "github.com/matrix-org/gomatrix"

Package gomatrix implements the Matrix Client-Server API.

Specification can be found at http://matrix.org/docs/spec/client_server/r0.2.0.html

Code:

// Custom interfaces must be set prior to calling functions on the client.
cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "MDAefhiuwehfuiwe")

// anything which implements the Storer interface
customStore := NewInMemoryStore()
cli.Store = customStore

// anything which implements the Syncer interface
customSyncer := NewDefaultSyncer("@example:matrix.org", customStore)
cli.Syncer = customSyncer

// any http.Client
cli.Client = http.DefaultClient

// Once you call a function, you can't safely change the interfaces.
cli.SendText("!foo:bar", "Down the rabbit hole")

Code:

cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "MDAefhiuwehfuiwe")
cli.Store.SaveFilterID("@example:matrix.org", "2")                // Optional: if you know it already
cli.Store.SaveNextBatch("@example:matrix.org", "111_222_333_444") // Optional: if you know it already
syncer := cli.Syncer.(*DefaultSyncer)
syncer.OnEventType("m.room.message", func(ev *Event) {
    fmt.Println("Message: ", ev)
})

// Blocking version
if err := cli.Sync(); err != nil {
    fmt.Println("Sync() returned ", err)
}

// Non-blocking version
go func() {
    for {
        if err := cli.Sync(); err != nil {
            fmt.Println("Sync() returned ", err)
        }
        // Optional: Wait a period of time before trying to sync again.
    }
}()

Index

Examples

Package Files

client.go events.go filter.go requests.go responses.go room.go store.go sync.go userids.go

func DecodeUserLocalpart Uses

func DecodeUserLocalpart(str string) (string, error)

DecodeUserLocalpart decodes the given string back into the original input string. Returns an error if the given string is not a valid user ID localpart encoding. See http://matrix.org/docs/spec/intro.html#mapping-from-other-character-sets

This decodes quoted-printable bytes back into UTF8, and unescapes casing. For example:

_alph=40_bet=5f50up  =>  Alph@Bet_50up

Returns an error if the input string contains characters outside the range "a-z0-9._=-", has an invalid quote-printable byte (e.g. not hex), or has an invalid _ escaped byte (e.g. "_5").

Code:

localpart, err := DecodeUserLocalpart("_alph=40_bet__50up")
if err != nil {
    panic(err)
}
fmt.Println(localpart)

Output:

Alph@Bet_50up

func EncodeUserLocalpart Uses

func EncodeUserLocalpart(str string) string

EncodeUserLocalpart encodes the given string into Matrix-compliant user ID localpart form. See http://matrix.org/docs/spec/intro.html#mapping-from-other-character-sets

This returns a string with only the characters "a-z0-9._=-". The uppercase range A-Z are encoded using leading underscores ("_"). Characters outside the aforementioned ranges (including literal underscores ("_") and equals ("=")) are encoded as UTF8 code points (NOT NCRs) and converted to lower-case hex with a leading "=". For example:

Alph@Bet_50up  => _alph=40_bet=5f50up

Code:

localpart := EncodeUserLocalpart("Alph@Bet_50up")
fmt.Println(localpart)

Output:

_alph=40_bet__50up

func ExtractUserLocalpart Uses

func ExtractUserLocalpart(userID string) (string, error)

ExtractUserLocalpart extracts the localpart portion of a user ID. See http://matrix.org/docs/spec/intro.html#user-identifiers

Code:

localpart, err := ExtractUserLocalpart("@alice:matrix.org")
if err != nil {
    panic(err)
}
fmt.Println(localpart)

Output:

alice

type Client Uses

type Client struct {
    HomeserverURL *url.URL     // The base homeserver URL
    Prefix        string       // The API prefix eg '/_matrix/client/r0'
    UserID        string       // The user ID of the client. Used for forming HTTP paths which use the client's user ID.
    AccessToken   string       // The access_token for the client.
    Client        *http.Client // The underlying HTTP client which will be used to make HTTP requests.
    Syncer        Syncer       // The thing which can process /sync responses
    Store         Storer       // The thing which can store rooms/tokens/ids

    // The ?user_id= query parameter for application services. This must be set *prior* to calling a method. If this is empty,
    // no user_id parameter will be sent.
    // See http://matrix.org/docs/spec/application_service/unstable.html#identity-assertion
    AppServiceUserID string
    // contains filtered or unexported fields
}

Client represents a Matrix client.

func NewClient Uses

func NewClient(homeserverURL, userID, accessToken string) (*Client, error)

NewClient creates a new Matrix Client ready for syncing

func (*Client) BanUser Uses

func (cli *Client) BanUser(roomID string, req *ReqBanUser) (resp *RespBanUser, err error)

BanUser bans a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban

func (*Client) BuildBaseURL Uses

func (cli *Client) BuildBaseURL(urlPath ...string) string

BuildBaseURL builds a URL with the Client's homeserver/access_token set already. You must supply the prefix in the path.

Code:

userID := "@example:matrix.org"
cli, _ := NewClient("https://matrix.org", userID, "abcdef123456")
out := cli.BuildBaseURL("_matrix", "client", "r0", "directory", "room", "#matrix:matrix.org")
fmt.Println(out)

Output:

https://matrix.org/_matrix/client/r0/directory/room/%23matrix:matrix.org?access_token=abcdef123456

func (*Client) BuildURL Uses

func (cli *Client) BuildURL(urlPath ...string) string

BuildURL builds a URL with the Client's homserver/prefix/access_token set already.

Code:

userID := "@example:matrix.org"
cli, _ := NewClient("https://matrix.org", userID, "abcdef123456")
out := cli.BuildURL("user", userID, "filter")
fmt.Println(out)

Output:

https://matrix.org/_matrix/client/r0/user/@example:matrix.org/filter?access_token=abcdef123456

func (*Client) BuildURLWithQuery Uses

func (cli *Client) BuildURLWithQuery(urlPath []string, urlQuery map[string]string) string

BuildURLWithQuery builds a URL with query parameters in addition to the Client's homeserver/prefix/access_token set already.

Code:

cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "abcdef123456")
out := cli.BuildURLWithQuery([]string{"sync"}, map[string]string{
    "filter_id": "5",
})
fmt.Println(out)

Output:

https://matrix.org/_matrix/client/r0/sync?access_token=abcdef123456&filter_id=5

func (*Client) ClearCredentials Uses

func (cli *Client) ClearCredentials()

ClearCredentials removes the user ID and access token on this client instance.

func (*Client) CreateFilter Uses

func (cli *Client) CreateFilter(filter json.RawMessage) (resp *RespCreateFilter, err error)

CreateFilter makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-user-userid-filter

func (*Client) CreateRoom Uses

func (cli *Client) CreateRoom(req *ReqCreateRoom) (resp *RespCreateRoom, err error)

CreateRoom creates a new Matrix room. See https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom

resp, err := cli.CreateRoom(&gomatrix.ReqCreateRoom{
	Preset: "public_chat",
})
fmt.Println("Room:", resp.RoomID)

func (*Client) ForgetRoom Uses

func (cli *Client) ForgetRoom(roomID string) (resp *RespForgetRoom, err error)

ForgetRoom forgets a room entirely. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-forget

func (*Client) GetAvatarURL Uses

func (cli *Client) GetAvatarURL() (url string, err error)

GetAvatarURL gets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-avatar-url

func (*Client) GetDisplayName Uses

func (cli *Client) GetDisplayName(mxid string) (resp *RespUserDisplayName, err error)

GetDisplayName returns the display name of the user from the specified MXID. See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname

func (*Client) GetOwnDisplayName Uses

func (cli *Client) GetOwnDisplayName() (resp *RespUserDisplayName, err error)

GetOwnDisplayName returns the user's display name. See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname

func (*Client) InviteUser Uses

func (cli *Client) InviteUser(roomID string, req *ReqInviteUser) (resp *RespInviteUser, err error)

InviteUser invites a user to a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite

func (*Client) InviteUserByThirdParty Uses

func (cli *Client) InviteUserByThirdParty(roomID string, req *ReqInvite3PID) (resp *RespInviteUser, err error)

InviteUserByThirdParty invites a third-party identifier to a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#invite-by-third-party-id-endpoint

func (*Client) JoinRoom Uses

func (cli *Client) JoinRoom(roomIDorAlias, serverName string, content interface{}) (resp *RespJoinRoom, err error)

JoinRoom joins the client to a room ID or alias. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-join-roomidoralias

If serverName is specified, this will be added as a query param to instruct the homeserver to join via that server. If content is specified, it will be JSON encoded and used as the request body.

Join a room by alias.

Code:

cli, _ := NewClient("http://localhost:8008", "@example:localhost", "abcdef123456")
if resp, err := cli.JoinRoom("#test:localhost", "", nil); err != nil {
    panic(err)
} else {
    // Use room ID for something.
    _ = resp.RoomID
}

Join a room by ID.

Code:

cli, _ := NewClient("http://localhost:8008", "@example:localhost", "abcdef123456")
if _, err := cli.JoinRoom("!uOILRrqxnsYgQdUzar:localhost", "", nil); err != nil {
    panic(err)
}

func (*Client) JoinedMembers Uses

func (cli *Client) JoinedMembers(roomID string) (resp *RespJoinedMembers, err error)

JoinedMembers returns a map of joined room members. See TODO-SPEC. https://github.com/matrix-org/synapse/pull/1680

In general, usage of this API is discouraged in favour of /sync, as calling this API can race with incoming membership changes. This API is primarily designed for application services which may want to efficiently look up joined members in a room.

func (*Client) JoinedRooms Uses

func (cli *Client) JoinedRooms() (resp *RespJoinedRooms, err error)

JoinedRooms returns a list of rooms which the client is joined to. See TODO-SPEC. https://github.com/matrix-org/synapse/pull/1680

In general, usage of this API is discouraged in favour of /sync, as calling this API can race with incoming membership changes. This API is primarily designed for application services which may want to efficiently look up joined rooms.

func (*Client) KickUser Uses

func (cli *Client) KickUser(roomID string, req *ReqKickUser) (resp *RespKickUser, err error)

KickUser kicks a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick

func (*Client) LeaveRoom Uses

func (cli *Client) LeaveRoom(roomID string) (resp *RespLeaveRoom, err error)

LeaveRoom leaves the given room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave

func (*Client) Login Uses

func (cli *Client) Login(req *ReqLogin) (resp *RespLogin, err error)

Login a user to the homeserver according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login This does not set credentials on this client instance. See SetCredentials() instead.

Login to a local homeserver and set the user ID and access token on success.

Code:

cli, _ := NewClient("http://localhost:8008", "", "")
resp, err := cli.Login(&ReqLogin{
    Type:     "m.login.password",
    User:     "alice",
    Password: "wonderland",
})
if err != nil {
    panic(err)
}
cli.SetCredentials(resp.UserID, resp.AccessToken)

func (*Client) Logout Uses

func (cli *Client) Logout() (resp *RespLogout, err error)

Logout the current user. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-logout This does not clear the credentials from the client instance. See ClearCredentials() instead.

func (*Client) MakeRequest Uses

func (cli *Client) MakeRequest(method string, httpURL string, reqBody interface{}, resBody interface{}) ([]byte, error)

MakeRequest makes a JSON HTTP request to the given URL. If "resBody" is not nil, the response body will be json.Unmarshalled into it.

Returns the HTTP body as bytes on 2xx with a nil error. Returns an error if the response is not 2xx along with the HTTP body bytes if it got that far. This error is an HTTPError which includes the returned HTTP status code and possibly a RespError as the WrappedError, if the HTTP body could be decoded as a RespError.

func (*Client) Messages Uses

func (cli *Client) Messages(roomID, from, to string, dir rune, limit int) (resp *RespMessages, err error)

Messages returns a list of message and state events for a room. It uses pagination query parameters to paginate history in the room. See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-messages

func (*Client) RedactEvent Uses

func (cli *Client) RedactEvent(roomID, eventID string, req *ReqRedact) (resp *RespSendEvent, err error)

RedactEvent redacts the given event. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid

func (*Client) Register Uses

func (cli *Client) Register(req *ReqRegister) (*RespRegister, *RespUserInteractive, error)

Register makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register

Registers with kind=user. For kind=guest, see RegisterGuest.

func (*Client) RegisterDummy Uses

func (cli *Client) RegisterDummy(req *ReqRegister) (*RespRegister, error)

RegisterDummy performs m.login.dummy registration according to https://matrix.org/docs/spec/client_server/r0.2.0.html#dummy-auth

Only a username and password need to be provided on the ReqRegister struct. Most local/developer homeservers will allow registration this way. If the homeserver does not, an error is returned.

This does not set credentials on the client instance. See SetCredentials() instead.

	res, err := cli.RegisterDummy(&gomatrix.ReqRegister{
		Username: "alice",
		Password: "wonderland",
	})
 if err != nil {
		panic(err)
	}
	token := res.AccessToken

func (*Client) RegisterGuest Uses

func (cli *Client) RegisterGuest(req *ReqRegister) (*RespRegister, *RespUserInteractive, error)

RegisterGuest makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register with kind=guest.

For kind=user, see Register.

func (*Client) SendImage Uses

func (cli *Client) SendImage(roomID, body, url string) (*RespSendEvent, error)

SendImage sends an m.room.message event into the given room with a msgtype of m.image See https://matrix.org/docs/spec/client_server/r0.2.0.html#m-image

func (*Client) SendMessageEvent Uses

func (cli *Client) SendMessageEvent(roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error)

SendMessageEvent sends a message event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.

func (*Client) SendNotice Uses

func (cli *Client) SendNotice(roomID, text string) (*RespSendEvent, error)

SendNotice sends an m.room.message event into the given room with a msgtype of m.notice See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-notice

func (*Client) SendStateEvent Uses

func (cli *Client) SendStateEvent(roomID, eventType, stateKey string, contentJSON interface{}) (resp *RespSendEvent, err error)

SendStateEvent sends a state event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-state-eventtype-statekey contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.

func (*Client) SendText Uses

func (cli *Client) SendText(roomID, text string) (*RespSendEvent, error)

SendText sends an m.room.message event into the given room with a msgtype of m.text See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-text

func (*Client) SendVideo Uses

func (cli *Client) SendVideo(roomID, body, url string) (*RespSendEvent, error)

SendVideo sends an m.room.message event into the given room with a msgtype of m.video See https://matrix.org/docs/spec/client_server/r0.2.0.html#m-video

func (*Client) SetAvatarURL Uses

func (cli *Client) SetAvatarURL(url string) (err error)

SetAvatarURL sets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-avatar-url

func (*Client) SetCredentials Uses

func (cli *Client) SetCredentials(userID, accessToken string)

SetCredentials sets the user ID and access token on this client instance.

func (*Client) SetDisplayName Uses

func (cli *Client) SetDisplayName(displayName string) (err error)

SetDisplayName sets the user's profile display name. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-displayname

func (*Client) StateEvent Uses

func (cli *Client) StateEvent(roomID, eventType, stateKey string, outContent interface{}) (err error)

StateEvent gets a single state event in a room. It will attempt to JSON unmarshal into the given "outContent" struct with the HTTP response body, or return an error. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state-eventtype-statekey

Retrieve the content of a m.room.name state event.

Code:

content := struct {
    Name string `json:"name"`
}{}
cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "abcdef123456")
if err := cli.StateEvent("!foo:bar", "m.room.name", "", &content); err != nil {
    panic(err)
}

func (*Client) StopSync Uses

func (cli *Client) StopSync()

StopSync stops the ongoing sync started by Sync.

func (*Client) Sync Uses

func (cli *Client) Sync() error

Sync starts syncing with the provided Homeserver. If Sync() is called twice then the first sync will be stopped and the error will be nil.

This function will block until a fatal /sync error occurs, so it should almost always be started as a new goroutine. Fatal sync errors can be caused by:

- The failure to create a filter.
- Client.Syncer.OnFailedSync returning an error in response to a failed sync.
- Client.Syncer.ProcessResponse returning an error.

If you wish to continue retrying in spite of these fatal errors, call Sync() again.

func (*Client) SyncRequest Uses

func (cli *Client) SyncRequest(timeout int, since, filterID string, fullState bool, setPresence string) (resp *RespSync, err error)

SyncRequest makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync

func (*Client) TurnServer Uses

func (cli *Client) TurnServer() (resp *RespTurnServer, err error)

TurnServer returns turn server details and credentials for the client to use when initiating calls. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-voip-turnserver

func (*Client) UnbanUser Uses

func (cli *Client) UnbanUser(roomID string, req *ReqUnbanUser) (resp *RespUnbanUser, err error)

UnbanUser unbans a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban

func (cli *Client) UploadLink(link string) (*RespMediaUpload, error)

UploadLink uploads an HTTP URL and then returns an MXC URI.

func (*Client) UploadToContentRepo Uses

func (cli *Client) UploadToContentRepo(content io.Reader, contentType string, contentLength int64) (*RespMediaUpload, error)

UploadToContentRepo uploads the given bytes to the content repository and returns an MXC URI. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-media-r0-upload

func (*Client) UserTyping Uses

func (cli *Client) UserTyping(roomID string, typing bool, timeout int64) (resp *RespTyping, err error)

UserTyping sets the typing status of the user. See https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid

func (*Client) Versions Uses

func (cli *Client) Versions() (resp *RespVersions, err error)

Versions returns the list of supported Matrix versions on this homeserver. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions

type DefaultSyncer Uses

type DefaultSyncer struct {
    UserID string
    Store  Storer
    // contains filtered or unexported fields
}

DefaultSyncer is the default syncing implementation. You can either write your own syncer, or selectively replace parts of this default syncer (e.g. the ProcessResponse method). The default syncer uses the observer pattern to notify callers about incoming events. See DefaultSyncer.OnEventType for more information.

func NewDefaultSyncer Uses

func NewDefaultSyncer(userID string, store Storer) *DefaultSyncer

NewDefaultSyncer returns an instantiated DefaultSyncer

func (*DefaultSyncer) GetFilterJSON Uses

func (s *DefaultSyncer) GetFilterJSON(userID string) json.RawMessage

GetFilterJSON returns a filter with a timeline limit of 50.

func (*DefaultSyncer) OnEventType Uses

func (s *DefaultSyncer) OnEventType(eventType string, callback OnEventListener)

OnEventType allows callers to be notified when there are new events for the given event type. There are no duplicate checks.

func (*DefaultSyncer) OnFailedSync Uses

func (s *DefaultSyncer) OnFailedSync(res *RespSync, err error) (time.Duration, error)

OnFailedSync always returns a 10 second wait period between failed /syncs, never a fatal error.

func (*DefaultSyncer) ProcessResponse Uses

func (s *DefaultSyncer) ProcessResponse(res *RespSync, since string) (err error)

ProcessResponse processes the /sync response in a way suitable for bots. "Suitable for bots" means a stream of unrepeating events. Returns a fatal error if a listener panics.

type Event Uses

type Event struct {
    StateKey  *string                `json:"state_key,omitempty"` // The state key for the event. Only present on State Events.
    Sender    string                 `json:"sender"`              // The user ID of the sender of the event
    Type      string                 `json:"type"`                // The event type
    Timestamp int64                  `json:"origin_server_ts"`    // The unix timestamp when this message was sent by the origin server
    ID        string                 `json:"event_id"`            // The unique ID of this event
    RoomID    string                 `json:"room_id"`             // The room the event was sent to. May be nil (e.g. for presence)
    Content   map[string]interface{} `json:"content"`             // The JSON content of the event.
}

Event represents a single Matrix event.

func (*Event) Body Uses

func (event *Event) Body() (body string, ok bool)

Body returns the value of the "body" key in the event content if it is present and is a string.

func (*Event) MessageType Uses

func (event *Event) MessageType() (msgtype string, ok bool)

MessageType returns the value of the "msgtype" key in the event content if it is present and is a string.

type Filter Uses

type Filter struct {
    AccountData FilterPart `json:"account_data,omitempty"`
    EventFields []string   `json:"event_fields,omitempty"`
    EventFormat string     `json:"event_format,omitempty"`
    Presence    FilterPart `json:"presence,omitempty"`
    Room        struct {
        AccountData  FilterPart `json:"account_data,omitempty"`
        Ephemeral    FilterPart `json:"ephemeral,omitempty"`
        IncludeLeave bool       `json:"include_leave,omitempty"`
        NotRooms     []string   `json:"not_rooms,omitempty"`
        Rooms        []string   `json:"rooms,omitempty"`
        State        FilterPart `json:"state,omitempty"`
        Timeline     FilterPart `json:"timeline,omitempty"`
    }   `json:"room,omitempty"`
}

Filter is used by clients to specify how the server should filter responses to e.g. sync requests Specified by: https://matrix.org/docs/spec/client_server/r0.2.0.html#filtering

type FilterPart Uses

type FilterPart struct {
    NotRooms   []string `json:"not_rooms,omitempty"`
    Rooms      []string `json:"rooms,omitempty"`
    Limit      *int     `json:"limit,omitempty"`
    NotSenders []string `json:"not_senders,omitempty"`
    NotTypes   []string `json:"not_types,omitempty"`
    Senders    []string `json:"senders,omitempty"`
    Types      []string `json:"types,omitempty"`
}

type HTMLMessage Uses

type HTMLMessage struct {
    Body          string `json:"body"`
    MsgType       string `json:"msgtype"`
    Format        string `json:"format"`
    FormattedBody string `json:"formatted_body"`
}

An HTMLMessage is the contents of a Matrix HTML formated message event.

func GetHTMLMessage Uses

func GetHTMLMessage(msgtype, htmlText string) HTMLMessage

GetHTMLMessage returns an HTMLMessage with the body set to a stripped version of the provided HTML, in addition to the provided HTML.

type HTTPError Uses

type HTTPError struct {
    WrappedError error
    Message      string
    Code         int
}

HTTPError An HTTP Error response, which may wrap an underlying native Go Error.

func (HTTPError) Error Uses

func (e HTTPError) Error() string

type ImageInfo Uses

type ImageInfo struct {
    Height   uint   `json:"h,omitempty"`
    Width    uint   `json:"w,omitempty"`
    Mimetype string `json:"mimetype,omitempty"`
    Size     uint   `json:"size,omitempty"`
}

ImageInfo contains info about an image - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-image

type ImageMessage Uses

type ImageMessage struct {
    MsgType string    `json:"msgtype"`
    Body    string    `json:"body"`
    URL     string    `json:"url"`
    Info    ImageInfo `json:"info"`
}

ImageMessage is an m.image event

type InMemoryStore Uses

type InMemoryStore struct {
    Filters   map[string]string
    NextBatch map[string]string
    Rooms     map[string]*Room
}

InMemoryStore implements the Storer interface.

Everything is persisted in-memory as maps. It is not safe to load/save filter IDs or next batch tokens on any goroutine other than the syncing goroutine: the one which called Client.Sync().

func NewInMemoryStore Uses

func NewInMemoryStore() *InMemoryStore

NewInMemoryStore constructs a new InMemoryStore.

func (*InMemoryStore) LoadFilterID Uses

func (s *InMemoryStore) LoadFilterID(userID string) string

LoadFilterID from memory.

func (*InMemoryStore) LoadNextBatch Uses

func (s *InMemoryStore) LoadNextBatch(userID string) string

LoadNextBatch from memory.

func (*InMemoryStore) LoadRoom Uses

func (s *InMemoryStore) LoadRoom(roomID string) *Room

LoadRoom from memory.

func (*InMemoryStore) SaveFilterID Uses

func (s *InMemoryStore) SaveFilterID(userID, filterID string)

SaveFilterID to memory.

func (*InMemoryStore) SaveNextBatch Uses

func (s *InMemoryStore) SaveNextBatch(userID, nextBatchToken string)

SaveNextBatch to memory.

func (*InMemoryStore) SaveRoom Uses

func (s *InMemoryStore) SaveRoom(room *Room)

SaveRoom to memory.

type OnEventListener Uses

type OnEventListener func(*Event)

OnEventListener can be used with DefaultSyncer.OnEventType to be informed of incoming events.

type ReqBanUser Uses

type ReqBanUser struct {
    Reason string `json:"reason,omitempty"`
    UserID string `json:"user_id"`
}

ReqBanUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban

type ReqCreateRoom Uses

type ReqCreateRoom struct {
    Visibility      string                 `json:"visibility,omitempty"`
    RoomAliasName   string                 `json:"room_alias_name,omitempty"`
    Name            string                 `json:"name,omitempty"`
    Topic           string                 `json:"topic,omitempty"`
    Invite          []string               `json:"invite,omitempty"`
    Invite3PID      []ReqInvite3PID        `json:"invite_3pid,omitempty"`
    CreationContent map[string]interface{} `json:"creation_content,omitempty"`
    InitialState    []Event                `json:"initial_state,omitempty"`
    Preset          string                 `json:"preset,omitempty"`
    IsDirect        bool                   `json:"is_direct,omitempty"`
}

ReqCreateRoom is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom

type ReqInvite3PID Uses

type ReqInvite3PID struct {
    IDServer string `json:"id_server"`
    Medium   string `json:"medium"`
    Address  string `json:"address"`
}

ReqInvite3PID is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#id57 It is also a JSON object used in https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom

type ReqInviteUser Uses

type ReqInviteUser struct {
    UserID string `json:"user_id"`
}

ReqInviteUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite

type ReqKickUser Uses

type ReqKickUser struct {
    Reason string `json:"reason,omitempty"`
    UserID string `json:"user_id"`
}

ReqKickUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick

type ReqLogin Uses

type ReqLogin struct {
    Type                     string `json:"type"`
    Password                 string `json:"password,omitempty"`
    Medium                   string `json:"medium,omitempty"`
    User                     string `json:"user,omitempty"`
    Address                  string `json:"address,omitempty"`
    Token                    string `json:"token,omitempty"`
    DeviceID                 string `json:"device_id,omitempty"`
    InitialDeviceDisplayName string `json:"initial_device_display_name,omitempty"`
}

ReqLogin is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login

type ReqRedact Uses

type ReqRedact struct {
    Reason string `json:"reason,omitempty"`
}

ReqRedact is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid

type ReqRegister Uses

type ReqRegister struct {
    Username                 string      `json:"username,omitempty"`
    BindEmail                bool        `json:"bind_email,omitempty"`
    Password                 string      `json:"password,omitempty"`
    DeviceID                 string      `json:"device_id,omitempty"`
    InitialDeviceDisplayName string      `json:"initial_device_display_name"`
    Auth                     interface{} `json:"auth,omitempty"`
}

ReqRegister is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register

type ReqTyping Uses

type ReqTyping struct {
    Typing  bool  `json:"typing"`
    Timeout int64 `json:"timeout"`
}

ReqTyping is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid

type ReqUnbanUser Uses

type ReqUnbanUser struct {
    UserID string `json:"user_id"`
}

ReqUnbanUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban

type RespBanUser Uses

type RespBanUser struct{}

RespBanUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban

type RespCreateFilter Uses

type RespCreateFilter struct {
    FilterID string `json:"filter_id"`
}

RespCreateFilter is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-user-userid-filter

type RespCreateRoom Uses

type RespCreateRoom struct {
    RoomID string `json:"room_id"`
}

RespCreateRoom is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom

type RespError Uses

type RespError struct {
    ErrCode string `json:"errcode"`
    Err     string `json:"error"`
}

RespError is the standard JSON error response from Homeservers. It also implements the Golang "error" interface. See http://matrix.org/docs/spec/client_server/r0.2.0.html#api-standards

func (RespError) Error Uses

func (e RespError) Error() string

Error returns the errcode and error message.

type RespForgetRoom Uses

type RespForgetRoom struct{}

RespForgetRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-forget

type RespInviteUser Uses

type RespInviteUser struct{}

RespInviteUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite

type RespJoinRoom Uses

type RespJoinRoom struct {
    RoomID string `json:"room_id"`
}

RespJoinRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-join

type RespJoinedMembers Uses

type RespJoinedMembers struct {
    Joined map[string]struct {
        DisplayName *string `json:"display_name"`
        AvatarURL   *string `json:"avatar_url"`
    } `json:"joined"`
}

RespJoinedMembers is the JSON response for TODO-SPEC https://github.com/matrix-org/synapse/pull/1680

type RespJoinedRooms Uses

type RespJoinedRooms struct {
    JoinedRooms []string `json:"joined_rooms"`
}

RespJoinedRooms is the JSON response for TODO-SPEC https://github.com/matrix-org/synapse/pull/1680

type RespKickUser Uses

type RespKickUser struct{}

RespKickUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick

type RespLeaveRoom Uses

type RespLeaveRoom struct{}

RespLeaveRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave

type RespLogin Uses

type RespLogin struct {
    AccessToken string `json:"access_token"`
    DeviceID    string `json:"device_id"`
    HomeServer  string `json:"home_server"`
    UserID      string `json:"user_id"`
}

RespLogin is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login

type RespLogout Uses

type RespLogout struct{}

RespLogout is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-logout

type RespMediaUpload Uses

type RespMediaUpload struct {
    ContentURI string `json:"content_uri"`
}

RespMediaUpload is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-media-r0-upload

type RespMessages Uses

type RespMessages struct {
    Start string  `json:"start"`
    Chunk []Event `json:"chunk"`
    End   string  `json:"end"`
}

RespMessages is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-messages

type RespRegister Uses

type RespRegister struct {
    AccessToken  string `json:"access_token"`
    DeviceID     string `json:"device_id"`
    HomeServer   string `json:"home_server"`
    RefreshToken string `json:"refresh_token"`
    UserID       string `json:"user_id"`
}

RespRegister is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register

type RespSendEvent Uses

type RespSendEvent struct {
    EventID string `json:"event_id"`
}

RespSendEvent is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid

type RespSync Uses

type RespSync struct {
    NextBatch   string `json:"next_batch"`
    AccountData struct {
        Events []Event `json:"events"`
    }   `json:"account_data"`
    Presence struct {
        Events []Event `json:"events"`
    }   `json:"presence"`
    Rooms struct {
        Leave map[string]struct {
            State struct {
                Events []Event `json:"events"`
            }   `json:"state"`
            Timeline struct {
                Events    []Event `json:"events"`
                Limited   bool    `json:"limited"`
                PrevBatch string  `json:"prev_batch"`
            }   `json:"timeline"`
        }   `json:"leave"`
        Join map[string]struct {
            State struct {
                Events []Event `json:"events"`
            }   `json:"state"`
            Timeline struct {
                Events    []Event `json:"events"`
                Limited   bool    `json:"limited"`
                PrevBatch string  `json:"prev_batch"`
            }   `json:"timeline"`
        }   `json:"join"`
        Invite map[string]struct {
            State struct {
                Events []Event
            } `json:"invite_state"`
        }   `json:"invite"`
    }   `json:"rooms"`
}

RespSync is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync

type RespTurnServer Uses

type RespTurnServer struct {
    Username string   `json:"username"`
    Password string   `json:"password"`
    TTL      int      `json:"ttl"`
    URIs     []string `json:"uris"`
}

type RespTyping Uses

type RespTyping struct{}

RespTyping is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid

type RespUnbanUser Uses

type RespUnbanUser struct{}

RespUnbanUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban

type RespUserDisplayName Uses

type RespUserDisplayName struct {
    DisplayName string `json:"displayname"`
}

RespUserDisplayName is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname

type RespUserInteractive Uses

type RespUserInteractive struct {
    Flows []struct {
        Stages []string `json:"stages"`
    }   `json:"flows"`
    Params    map[string]interface{} `json:"params"`
    Session   string                 `json:"string"`
    Completed []string               `json:"completed"`
    ErrCode   string                 `json:"errcode"`
    Error     string                 `json:"error"`
}

RespUserInteractive is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#user-interactive-authentication-api

func (RespUserInteractive) HasSingleStageFlow Uses

func (r RespUserInteractive) HasSingleStageFlow(stageName string) bool

HasSingleStageFlow returns true if there exists at least 1 Flow with a single stage of stageName.

type RespVersions Uses

type RespVersions struct {
    Versions []string `json:"versions"`
}

RespVersions is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions

type Room Uses

type Room struct {
    ID    string
    State map[string]map[string]*Event
}

Room represents a single Matrix room.

func NewRoom Uses

func NewRoom(roomID string) *Room

NewRoom creates a new Room with the given ID

func (Room) GetMembershipState Uses

func (room Room) GetMembershipState(userID string) string

GetMembershipState returns the membership state of the given user ID in this room. If there is no entry for this member, 'leave' is returned for consistency with left users.

func (Room) GetStateEvent Uses

func (room Room) GetStateEvent(eventType string, stateKey string) *Event

GetStateEvent returns the state event for the given type/state_key combo, or nil.

func (Room) UpdateState Uses

func (room Room) UpdateState(event *Event)

UpdateState updates the room's current state with the given Event. This will clobber events based on the type/state_key combination.

type Storer Uses

type Storer interface {
    SaveFilterID(userID, filterID string)
    LoadFilterID(userID string) string
    SaveNextBatch(userID, nextBatchToken string)
    LoadNextBatch(userID string) string
    SaveRoom(room *Room)
    LoadRoom(roomID string) *Room
}

Storer is an interface which must be satisfied to store client data.

You can either write a struct which persists this data to disk, or you can use the provided "InMemoryStore" which just keeps data around in-memory which is lost on restarts.

type Syncer Uses

type Syncer interface {
    // Process the /sync response. The since parameter is the since= value that was used to produce the response.
    // This is useful for detecting the very first sync (since=""). If an error is return, Syncing will be stopped
    // permanently.
    ProcessResponse(resp *RespSync, since string) error
    // OnFailedSync returns either the time to wait before retrying or an error to stop syncing permanently.
    OnFailedSync(res *RespSync, err error) (time.Duration, error)
    // GetFilterJSON for the given user ID. NOT the filter ID.
    GetFilterJSON(userID string) json.RawMessage
}

Syncer represents an interface that must be satisfied in order to do /sync requests on a client.

type TextMessage Uses

type TextMessage struct {
    MsgType string `json:"msgtype"`
    Body    string `json:"body"`
}

TextMessage is the contents of a Matrix formated message event.

type VideoInfo Uses

type VideoInfo struct {
    Mimetype      string    `json:"mimetype,omitempty"`
    ThumbnailInfo ImageInfo `json:"thumbnail_info"`
    ThumbnailURL  string    `json:"thumbnail_url,omitempty"`
    Height        uint      `json:"h,omitempty"`
    Width         uint      `json:"w,omitempty"`
    Duration      uint      `json:"duration,omitempty"`
    Size          uint      `json:"size,omitempty"`
}

VideoInfo contains info about a video - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-video

type VideoMessage Uses

type VideoMessage struct {
    MsgType string    `json:"msgtype"`
    Body    string    `json:"body"`
    URL     string    `json:"url"`
    Info    VideoInfo `json:"info"`
}

VideoMessage is an m.video - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-video

Package gomatrix imports 16 packages (graph) and is imported by 7 packages. Updated 2017-10-05. Refresh now. Tools for package owners.