Documentation ¶
Overview ¶
Package gomatrix implements the Matrix Client-Server API.
Specification can be found at http://matrix.org/docs/spec/client_server/r0.2.0.html
Example (CustomInterfaces) ¶
// 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(ctx, "!foo:bar", "Down the rabbit hole")
Output:
Example (Sync) ¶
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(ctx); err != nil { fmt.Println("Sync() returned ", err) } // Non-blocking version go func() { for { if err := cli.Sync(ctx); err != nil { fmt.Println("Sync() returned ", err) } // Optional: Wait a period of time before trying to sync again. } }()
Output:
Index ¶
- func DecodeUserLocalpart(str string) (string, error)
- func EncodeUserLocalpart(str string) string
- func ExtractUserLocalpart(userID string) (string, error)
- type AudioInfo
- type AudioMessage
- type ChildrenState
- type Client
- func (cli *Client) Account3PidEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)
- func (cli *Client) AccountPassword(ctx context.Context, req ReqAccountPassword) (err error)
- func (cli *Client) Available(ctx context.Context, username string) (err error)
- func (cli *Client) BanUser(ctx context.Context, roomID string, req *ReqBanUser) (resp *RespBanUser, err error)
- func (cli *Client) BuildBaseURL(urlPath ...string) string
- func (cli *Client) BuildURL(urlPath ...string) string
- func (cli *Client) BuildURLWithQuery(urlPath []string, urlQuery map[string]string) string
- func (cli *Client) ClearCredentials()
- func (cli *Client) CreateFilter(ctx context.Context, filter json.RawMessage) (resp *RespCreateFilter, err error)
- func (cli *Client) CreateRoom(ctx context.Context, req *ReqCreateRoom) (resp *RespCreateRoom, err error)
- func (cli *Client) Deactivate(ctx context.Context) (err error)
- func (cli *Client) DeletePushRule(ctx context.Context, scope string, kind string, ruleID string) error
- func (cli *Client) ForgetRoom(ctx context.Context, roomID string) (resp *RespForgetRoom, err error)
- func (cli *Client) GetAccountData(ctx context.Context, req ReqGetAccountData) (resp RespAccountData, err error)
- func (cli *Client) GetAvatarURL(ctx context.Context) (string, error)
- func (cli *Client) GetDevices(ctx context.Context) (resp RespGetDevices, err error)
- func (cli *Client) GetDisplayName(ctx context.Context, mxid string) (resp *RespUserDisplayName, err error)
- func (cli *Client) GetOwnDisplayName(ctx context.Context) (resp *RespUserDisplayName, err error)
- func (cli *Client) GetOwnStatus(ctx context.Context) (resp *RespUserStatus, err error)
- func (cli *Client) GetStatus(ctx context.Context, mxid string) (resp *RespUserStatus, err error)
- func (cli *Client) GetThreePID(ctx context.Context) (resp RespGetThreePID, err error)
- func (cli *Client) Hierarchy(ctx context.Context, req ReqHierarchy) (resp RespHierarchy, err error)
- func (cli *Client) InviteUser(ctx context.Context, roomID string, req *ReqInviteUser) (resp *RespInviteUser, err error)
- func (cli *Client) InviteUserByThirdParty(ctx context.Context, roomID string, req *ReqInvite3PID) (resp *RespInviteUser, err error)
- func (cli *Client) InvitedMembers(ctx context.Context, roomId string) (resp RespMembers, err error)
- func (cli *Client) JoinRoom(ctx context.Context, roomIDorAlias, serverName string, content interface{}) (resp *RespJoinRoom, err error)
- func (cli *Client) JoinedMembers(ctx context.Context, roomID string) (resp *RespJoinedMembers, err error)
- func (cli *Client) JoinedRooms(ctx context.Context) (resp *RespJoinedRooms, err error)
- func (cli *Client) KickUser(ctx context.Context, roomID string, req *ReqKickUser) (resp *RespKickUser, err error)
- func (cli *Client) LeaveRoom(ctx context.Context, roomID string) (resp *RespLeaveRoom, err error)
- func (cli *Client) LeftMembers(ctx context.Context, roomId string) (resp RespMembers, err error)
- func (cli *Client) Login(ctx context.Context, req *ReqLogin) (resp *RespLogin, err error)
- func (cli *Client) Logout(ctx context.Context) (resp *RespLogout, err error)
- func (cli *Client) LogoutAll(ctx context.Context) (resp *RespLogoutAll, err error)
- func (cli *Client) MakeRequest(ctx context.Context, method string, httpURL string, reqBody interface{}, ...) error
- func (cli *Client) MarkRead(ctx context.Context, roomID, eventID string) error
- func (cli *Client) Members(ctx context.Context, roomId string) (resp RespMembers, err error)
- func (cli *Client) Messages(ctx context.Context, roomID, from, to string, dir rune, limit int) (resp *RespMessages, err error)
- func (cli *Client) PasswordEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)
- func (cli *Client) PostThreePID(ctx context.Context, req ReqPostThreePID) (err error)
- func (cli *Client) PowerLevels(ctx context.Context, roomID string) (resp PowerLevels, err error)
- func (cli *Client) PublicRooms(ctx context.Context, limit int, since string, server string) (resp *RespPublicRooms, err error)
- func (cli *Client) PublicRoomsFiltered(ctx context.Context, limit int, since string, server string, filter string) (resp *RespPublicRooms, err error)
- func (cli *Client) PutAccountData(ctx context.Context, req ReqPutAccountData) (err error)
- func (cli *Client) PutPushRule(ctx context.Context, scope string, kind string, ruleID string, ...) error
- func (cli *Client) RedactEvent(ctx context.Context, roomID, eventID string, req *ReqRedact) (resp *RespSendEvent, err error)
- func (cli *Client) Register(ctx context.Context, req *ReqRegister) (*RespRegister, *RespUserInteractive, error)
- func (cli *Client) RegisterDummy(ctx context.Context, req *ReqRegister) (*RespRegister, error)
- func (cli *Client) RegisterEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)
- func (cli *Client) RegisterGuest(ctx context.Context, req *ReqRegister) (*RespRegister, *RespUserInteractive, error)
- func (cli *Client) RoomAlias(ctx context.Context, roomAlias string) (resp *RespRoomAlias, err error)
- func (cli *Client) SendFormattedText(ctx context.Context, roomID, text, formattedText string) (*RespSendEvent, error)
- func (cli *Client) SendImage(ctx context.Context, roomID, body, url string) (*RespSendEvent, error)
- func (cli *Client) SendMessageEvent(ctx context.Context, roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error)
- func (cli *Client) SendNotice(ctx context.Context, roomID, text string) (*RespSendEvent, error)
- func (cli *Client) SendPowerLevels(ctx context.Context, roomID string, pl PowerLevels) (*RespSendEvent, error)
- func (cli *Client) SendStateEvent(ctx context.Context, roomID, eventType, stateKey string, ...) (resp *RespSendEvent, err error)
- func (cli *Client) SendText(ctx context.Context, roomID, text string) (*RespSendEvent, error)
- func (cli *Client) SendVideo(ctx context.Context, roomID, body, url string) (*RespSendEvent, error)
- func (cli *Client) SetAvatarURL(ctx context.Context, url string) error
- func (cli *Client) SetCredentials(userID, accessToken string)
- func (cli *Client) SetDisplayName(ctx context.Context, displayName string) (err error)
- func (cli *Client) SetStatus(ctx context.Context, presence, status string) (err error)
- func (cli *Client) StateEvent(ctx context.Context, roomID, eventType, stateKey string, ...) (err error)
- func (cli *Client) StopSync()
- func (cli *Client) Sync(ctx context.Context) error
- func (cli *Client) SyncRequest(ctx context.Context, timeout int, since, filterID string, fullState bool, ...) (resp *RespSync, err error)
- func (cli *Client) TurnServer(ctx context.Context) (resp *RespTurnServer, err error)
- func (cli *Client) UnbanUser(ctx context.Context, roomID string, req *ReqUnbanUser) (resp *RespUnbanUser, err error)
- func (cli *Client) UploadLink(ctx context.Context, link string) (*RespMediaUpload, error)
- func (cli *Client) UploadToContentRepo(ctx context.Context, content io.Reader, contentType string, ...) (*RespMediaUpload, error)
- func (cli *Client) UserDirectorySearch(ctx context.Context, req *ReqUserDirectorySearch) (resp RespUserDirectorySearch, err error)
- func (cli *Client) UserTyping(ctx context.Context, roomID string, typing bool, timeout int64) (resp *RespTyping, err error)
- func (cli *Client) Versions(ctx context.Context) (resp *RespVersions, err error)
- func (cli *Client) WhoAmI(ctx context.Context) (resp *RespWhoAmI, err error)
- type Content
- type DefaultSyncer
- func (s *DefaultSyncer) GetFilterJSON(userID string) json.RawMessage
- func (s *DefaultSyncer) OnEventType(eventType string, callback OnEventListener)
- func (s *DefaultSyncer) OnFailedSync(res *RespSync, err error) (time.Duration, error)
- func (s *DefaultSyncer) ProcessResponse(res *RespSync, since string) (err error)
- type Device
- type DiscoveryInformation
- type Event
- type FileInfo
- type FileMessage
- type Filter
- type FilterPart
- type HTMLMessage
- type HTTPError
- type HierarchyRoom
- type Identifier
- type ImageInfo
- type ImageMessage
- type InMemoryStore
- func (s *InMemoryStore) LoadFilterID(userID string) string
- func (s *InMemoryStore) LoadNextBatch(userID string) string
- func (s *InMemoryStore) LoadRoom(roomID string) *Room
- func (s *InMemoryStore) SaveFilterID(userID, filterID string)
- func (s *InMemoryStore) SaveNextBatch(userID, nextBatchToken string)
- func (s *InMemoryStore) SaveRoom(room *Room)
- type LocationMessage
- type NotificationPowerLevels
- type OnEventListener
- type PhoneIdentifier
- type PowerLevels
- type PublicRoom
- type PushActionType
- type PushCondKind
- type PushCondition
- type PushRuleType
- type RelationType
- type ReqAccountPassword
- type ReqBanUser
- type ReqCreateRoom
- type ReqEmailRequestToken
- type ReqGetAccountData
- type ReqHierarchy
- type ReqInvite3PID
- type ReqInviteUser
- type ReqKickUser
- type ReqLogin
- type ReqPostThreePID
- type ReqPutAccountData
- type ReqPutPushRule
- type ReqRedact
- type ReqRegister
- type ReqTyping
- type ReqUnbanUser
- type ReqUserDirectorySearch
- type RespAccountData
- type RespBanUser
- type RespCreateFilter
- type RespCreateRoom
- type RespEmailRequestToken
- type RespError
- type RespForgetRoom
- type RespGetDevices
- type RespGetThreePID
- type RespHierarchy
- type RespInviteUser
- type RespJoinRoom
- type RespJoinedMembers
- type RespJoinedRooms
- type RespKickUser
- type RespLeaveRoom
- type RespLogin
- type RespLogout
- type RespLogoutAll
- type RespMediaUpload
- type RespMembers
- type RespMessages
- type RespPublicRooms
- type RespRegister
- type RespRoomAlias
- type RespSendEvent
- type RespSync
- type RespTurnServer
- type RespTyping
- type RespUnbanUser
- type RespUserDirectorySearch
- type RespUserDisplayName
- type RespUserInteractive
- type RespUserStatus
- type RespVersions
- type RespWhoAmI
- type Result
- type Room
- type RoomFilter
- type Storer
- type Syncer
- type TagContent
- type TagProperties
- type TextMessage
- type ThirdpartyIdentifier
- type ThreePID
- type ThreePIDCreds
- type ThumbnailInfo
- type UserIdentifier
- type VideoInfo
- type VideoMessage
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DecodeUserLocalpart ¶
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").
Example ¶
localpart, err := DecodeUserLocalpart("_alph=40_bet__50up") if err != nil { panic(err) } fmt.Println(localpart)
Output: Alph@Bet_50up
func EncodeUserLocalpart ¶
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
Example ¶
localpart := EncodeUserLocalpart("Alph@Bet_50up") fmt.Println(localpart)
Output: _alph=40_bet__50up
func ExtractUserLocalpart ¶
ExtractUserLocalpart extracts the localpart portion of a user ID. See http://matrix.org/docs/spec/intro.html#user-identifiers
Example ¶
localpart, err := ExtractUserLocalpart("@alice:matrix.org") if err != nil { panic(err) } fmt.Println(localpart)
Output: alice
Types ¶
type AudioInfo ¶
type AudioInfo struct { Mimetype string `json:"mimetype,omitempty"` Size uint `json:"size,omitempty"` //filesize in bytes Duration uint `json:"duration,omitempty"` //audio duration in ms }
AudioInfo contains info about an file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio
type AudioMessage ¶
type AudioMessage struct { MsgType string `json:"msgtype"` Body string `json:"body"` URL string `json:"url"` Info AudioInfo `json:"info,omitempty"` }
AudioMessage is an m.audio event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio
type ChildrenState ¶
type Client ¶
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 RandomizeXForwardedFor bool // If true, client will add a random IP as a X-Forwarded-For header. Used to bypass rate limiting in tests. rand.Seed() is not called. // contains filtered or unexported fields }
Client represents a Matrix client.
func (*Client) Account3PidEmailRequestToken ¶
func (cli *Client) Account3PidEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)
EmailRequestToken requests email from homeserver so that it email be bound to existing account after validation. See https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken
func (*Client) AccountPassword ¶
func (cli *Client) AccountPassword(ctx context.Context, req ReqAccountPassword) (err error)
func (*Client) Available ¶
Available checks to see if a username is available, and valid, for the server. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-register-available
func (*Client) BanUser ¶
func (cli *Client) BanUser(ctx context.Context, 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 ¶
BuildBaseURL builds a URL with the Client's homeserver set already. You must supply the prefix in the path.
Example ¶
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
func (*Client) BuildURL ¶
BuildURL builds a URL with the Client's homeserver/prefix set already.
Example ¶
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
func (*Client) BuildURLWithQuery ¶
BuildURLWithQuery builds a URL with query parameters in addition to the Client's homeserver/prefix set already.
Example ¶
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?filter_id=5
func (*Client) ClearCredentials ¶
func (cli *Client) ClearCredentials()
ClearCredentials removes the user ID and access token on this client instance.
func (*Client) CreateFilter ¶
func (cli *Client) CreateFilter(ctx context.Context, 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 ¶
func (cli *Client) CreateRoom(ctx context.Context, 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
func (*Client) DeletePushRule ¶
func (*Client) ForgetRoom ¶
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) GetAccountData ¶
func (cli *Client) GetAccountData(ctx context.Context, req ReqGetAccountData) (resp RespAccountData, err error)
GetAccountData gets some account_data for the client. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type
func (*Client) GetAvatarURL ¶
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) GetDevices ¶
func (cli *Client) GetDevices(ctx context.Context) (resp RespGetDevices, err error)
GetDevices gets information about all devices for the current user. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-devices
func (*Client) GetDisplayName ¶
func (cli *Client) GetDisplayName(ctx context.Context, 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 ¶
func (cli *Client) GetOwnDisplayName(ctx context.Context) (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) GetOwnStatus ¶
func (cli *Client) GetOwnStatus(ctx context.Context) (resp *RespUserStatus, err error)
GetOwnStatus returns the user's status. See https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status
func (*Client) GetStatus ¶
GetStatus returns the status of the user from the specified MXID. See https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status
func (*Client) GetThreePID ¶
func (cli *Client) GetThreePID(ctx context.Context) (resp RespGetThreePID, err error)
GetThreePID gets a list of the third party identifiers that the homeserver has associated with the user's account. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-3pid
func (*Client) Hierarchy ¶
func (cli *Client) Hierarchy(ctx context.Context, req ReqHierarchy) (resp RespHierarchy, err error)
func (*Client) InviteUser ¶
func (cli *Client) InviteUser(ctx context.Context, 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 ¶
func (cli *Client) InviteUserByThirdParty(ctx context.Context, 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) InvitedMembers ¶
func (*Client) JoinRoom ¶
func (cli *Client) JoinRoom(ctx context.Context, 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.
Example (Alias) ¶
Join a room by alias.
cli, _ := NewClient("http://localhost:8008", "@example:localhost", "abcdef123456") if resp, err := cli.JoinRoom(ctx, "#test:localhost", "", nil); err != nil { panic(err) } else { // Use room ID for something. _ = resp.RoomID }
Output:
Example (Id) ¶
Join a room by ID.
cli, _ := NewClient("http://localhost:8008", "@example:localhost", "abcdef123456") if _, err := cli.JoinRoom(ctx, "!uOILRrqxnsYgQdUzar:localhost", "", nil); err != nil { panic(err) }
Output:
func (*Client) JoinedMembers ¶
func (cli *Client) JoinedMembers(ctx context.Context, 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 ¶
func (cli *Client) JoinedRooms(ctx context.Context) (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 ¶
func (cli *Client) KickUser(ctx context.Context, 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 ¶
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) LeftMembers ¶
func (*Client) Login ¶
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.
Example ¶
Login to a local homeserver and set the user ID and access token on success.
cli, _ := NewClient("http://localhost:8008", "", "") resp, err := cli.Login(ctx, &ReqLogin{ Type: "m.login.password", User: "alice", Password: "wonderland", }) if err != nil { panic(err) } cli.SetCredentials(resp.UserID, resp.AccessToken)
Output:
func (*Client) Logout ¶
func (cli *Client) Logout(ctx context.Context) (resp *RespLogout, err error)
Logout the current user. See http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-logout This does not clear the credentials from the client instance. See ClearCredentials() instead.
func (*Client) LogoutAll ¶
func (cli *Client) LogoutAll(ctx context.Context) (resp *RespLogoutAll, err error)
LogoutAll logs the current user out on all devices. See https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-logout-all This does not clear the credentials from the client instance. See ClearCredentails() instead.
func (*Client) MakeRequest ¶
func (cli *Client) MakeRequest(ctx context.Context, method string, httpURL string, reqBody interface{}, resBody interface{}) error
MakeRequest makes a JSON HTTP request to the given URL. The response body will be stream decoded into an interface. This will automatically stop if the response body is nil.
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, byte contents of the response body and possibly a RespError as the WrappedError, if the HTTP body could be decoded as a RespError.
func (*Client) MarkRead ¶
MarkRead marks eventID in roomID as read, signifying the event, and all before it have been read. See https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-rooms-roomid-receipt-receipttype-eventid
func (*Client) Messages ¶
func (cli *Client) Messages(ctx context.Context, 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) PasswordEmailRequestToken ¶
func (cli *Client) PasswordEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)
func (*Client) PostThreePID ¶
func (cli *Client) PostThreePID(ctx context.Context, req ReqPostThreePID) (err error)
func (*Client) PowerLevels ¶
PowerLevels gets most recent m.room.power_levels event. See https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels
func (*Client) PublicRooms ¶
func (cli *Client) PublicRooms(ctx context.Context, limit int, since string, server string) (resp *RespPublicRooms, err error)
PublicRooms returns the list of public rooms on target server. See https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-unstable-publicrooms
func (*Client) PublicRoomsFiltered ¶
func (cli *Client) PublicRoomsFiltered(ctx context.Context, limit int, since string, server string, filter string) (resp *RespPublicRooms, err error)
PublicRoomsFiltered returns a subset of PublicRooms filtered server side. See https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-unstable-publicrooms
func (*Client) PutAccountData ¶
func (cli *Client) PutAccountData(ctx context.Context, req ReqPutAccountData) (err error)
PutAccountData sets some account_data for the client. See https://matrix.org/docs/spec/client_server/r0.6.1#put-matrix-client-r0-user-userid-account-data-type
func (*Client) PutPushRule ¶
func (*Client) RedactEvent ¶
func (cli *Client) RedactEvent(ctx context.Context, 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 ¶
func (cli *Client) Register(ctx context.Context, 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 ¶
func (cli *Client) RegisterDummy(ctx context.Context, 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) RegisterEmailRequestToken ¶
func (cli *Client) RegisterEmailRequestToken(ctx context.Context, req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error)
func (*Client) RegisterGuest ¶
func (cli *Client) RegisterGuest(ctx context.Context, 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) RoomAlias ¶
func (cli *Client) RoomAlias(ctx context.Context, roomAlias string) (resp *RespRoomAlias, err error)
RoomAlias requests that the server resolve a room alias to a room ID. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-directory-room-roomalias
func (*Client) SendFormattedText ¶
func (cli *Client) SendFormattedText(ctx context.Context, roomID, text, formattedText string) (*RespSendEvent, error)
SendFormattedText sends an m.room.message event into the given room with a msgtype of m.text, supports a subset of HTML for formatting. See https://matrix.org/docs/spec/client_server/r0.6.0#m-text
func (*Client) SendImage ¶
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 ¶
func (cli *Client) SendMessageEvent(ctx context.Context, 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 ¶
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) SendPowerLevels ¶
func (cli *Client) SendPowerLevels(ctx context.Context, roomID string, pl PowerLevels) (*RespSendEvent, error)
SendPowerLevels sends m.room.power_levels event. See https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels
func (*Client) SendStateEvent ¶
func (cli *Client) SendStateEvent(ctx context.Context, 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 ¶
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 ¶
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 ¶
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 ¶
SetCredentials sets the user ID and access token on this client instance.
func (*Client) SetDisplayName ¶
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) SetStatus ¶
SetStatus sets the user's status. See https://matrix.org/docs/spec/client_server/r0.6.0#put-matrix-client-r0-presence-userid-status
func (*Client) StateEvent ¶
func (cli *Client) StateEvent(ctx context.Context, 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
Example ¶
Retrieve the content of a m.room.name state event.
content := struct { Name string `json:"name"` }{} cli, _ := NewClient("https://matrix.org", "@example:matrix.org", "abcdef123456") if err := cli.StateEvent(ctx, "!foo:bar", "m.room.name", "", &content); err != nil { panic(err) }
Output:
func (*Client) StopSync ¶
func (cli *Client) StopSync()
StopSync stops the ongoing sync started by Sync.
func (*Client) Sync ¶
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 ¶
func (cli *Client) SyncRequest(ctx context.Context, 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 ¶
func (cli *Client) TurnServer(ctx context.Context) (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 ¶
func (cli *Client) UnbanUser(ctx context.Context, 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 (*Client) UploadLink ¶
UploadLink uploads an HTTP URL and then returns an MXC URI.
func (*Client) UploadToContentRepo ¶
func (cli *Client) UploadToContentRepo(ctx context.Context, 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) UserDirectorySearch ¶
func (cli *Client) UserDirectorySearch(ctx context.Context, req *ReqUserDirectorySearch) (resp RespUserDirectorySearch, err error)
func (*Client) UserTyping ¶
func (cli *Client) UserTyping(ctx context.Context, 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 ¶
func (cli *Client) Versions(ctx context.Context) (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
func (*Client) WhoAmI ¶
func (cli *Client) WhoAmI(ctx context.Context) (resp *RespWhoAmI, err error)
WhoAmI Gets information about the owner of a given access token. See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-whoami
type Content ¶
type Content struct {
Order string `json:"order"`
}
Order "a" for primary public room, "aaa" default.
type DefaultSyncer ¶
type DefaultSyncer struct { UserID string Store Storer MultiRoomListener func(userId, mrType string, content interface{}, timestamp int64) // 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 ¶
func NewDefaultSyncer(userID string, store Storer) *DefaultSyncer
NewDefaultSyncer returns an instantiated DefaultSyncer
func (*DefaultSyncer) GetFilterJSON ¶
func (s *DefaultSyncer) GetFilterJSON(userID string) json.RawMessage
GetFilterJSON returns a filter with a timeline limit of 50.
func (*DefaultSyncer) OnEventType ¶
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 ¶
OnFailedSync always returns a 10 second wait period between failed /syncs, never a fatal error.
func (*DefaultSyncer) ProcessResponse ¶
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 DiscoveryInformation ¶
type DiscoveryInformation struct { Homeserver struct { BaseURL string `json:"base_url"` } `json:"m.homeserver"` IdentityServer struct { BaseURL string `json:"base_url"` } `json:"m.identitiy_server"` }
DiscoveryInformation is the JSON Response for https://matrix.org/docs/spec/client_server/r0.6.0#get-well-known-matrix-client and a part of the JSON Response for https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-login
type Event ¶
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) Redacts string `json:"redacts,omitempty"` // The event ID that was redacted if a m.room.redaction event Unsigned map[string]interface{} `json:"unsigned"` // The unsigned portions of the event, such as age and prev_content Content map[string]interface{} `json:"content"` // The JSON content of the event. PrevContent map[string]interface{} `json:"prev_content,omitempty"` // The JSON prev_content of the event. }
Event represents a single Matrix event.
func (*Event) Body ¶
Body returns the value of the "body" key in the event content if it is present and is a string.
func (*Event) MessageType ¶
MessageType returns the value of the "msgtype" key in the event content if it is present and is a string.
type FileInfo ¶
type FileInfo struct { Mimetype string `json:"mimetype,omitempty"` Size uint `json:"size,omitempty"` //filesize in bytes }
FileInfo contains info about an file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file
type FileMessage ¶
type FileMessage struct { MsgType string `json:"msgtype"` Body string `json:"body"` URL string `json:"url"` Filename string `json:"filename"` Info FileInfo `json:"info,omitempty"` ThumbnailURL string `json:"thumbnail_url,omitempty"` ThumbnailInfo ImageInfo `json:"thumbnail_info,omitempty"` }
FileMessage is an m.file event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file
type Filter ¶
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 RoomFilter `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
func DefaultFilter ¶
func DefaultFilter() Filter
DefaultFilter returns the default filter used by the Matrix server if no filter is provided in the request
type FilterPart ¶
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"` ContainsURL *bool `json:"contains_url,omitempty"` }
FilterPart is used to define filtering rules for specific categories of events
func DefaultFilterPart ¶
func DefaultFilterPart() FilterPart
DefaultFilterPart returns the default filter part used by the Matrix server if no filter is provided in the request
type HTMLMessage ¶
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 ¶
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 ¶
type HTTPError struct { Contents []byte WrappedError error MatrixError RespError Code int Path string Method string }
HTTPError An HTTP Error response, which may wrap an underlying native Go Error.
type HierarchyRoom ¶
type HierarchyRoom struct { ChildrenState []ChildrenState `json:"children_state"` RoomId string `json:"room_id"` RoomName string `json:"name"` }
type Identifier ¶
type Identifier interface { // Returns the identifier type // https://matrix.org/docs/spec/client_server/r0.6.0#identifier-types Type() string }
Identifier is the interface for https://matrix.org/docs/spec/client_server/r0.6.0#identifier-types
type ImageInfo ¶
type ImageInfo struct { Height uint `json:"h,omitempty"` Width uint `json:"w,omitempty"` Mimetype string `json:"mimetype,omitempty"` Size uint `json:"size,omitempty"` ThumbnailInfo ThumbnailInfo `json:"thumbnail_info,omitempty"` ThumbnailURL string `json:"thumbnail_url,omitempty"` }
ImageInfo contains info about an image - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-image
type ImageMessage ¶
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 ¶
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 ¶
func NewInMemoryStore() *InMemoryStore
NewInMemoryStore constructs a new InMemoryStore.
func (*InMemoryStore) LoadFilterID ¶
func (s *InMemoryStore) LoadFilterID(userID string) string
LoadFilterID from memory.
func (*InMemoryStore) LoadNextBatch ¶
func (s *InMemoryStore) LoadNextBatch(userID string) string
LoadNextBatch from memory.
func (*InMemoryStore) LoadRoom ¶
func (s *InMemoryStore) LoadRoom(roomID string) *Room
LoadRoom from memory.
func (*InMemoryStore) SaveFilterID ¶
func (s *InMemoryStore) SaveFilterID(userID, filterID string)
SaveFilterID to memory.
func (*InMemoryStore) SaveNextBatch ¶
func (s *InMemoryStore) SaveNextBatch(userID, nextBatchToken string)
SaveNextBatch to memory.
type LocationMessage ¶
type LocationMessage struct { MsgType string `json:"msgtype"` Body string `json:"body"` GeoURI string `json:"geo_uri"` ThumbnailURL string `json:"thumbnail_url,omitempty"` ThumbnailInfo ImageInfo `json:"thumbnail_info,omitempty"` }
LocationMessage is an m.location event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-location
type NotificationPowerLevels ¶
type NotificationPowerLevels struct {
Room int `json:"room"`
}
type OnEventListener ¶
type OnEventListener func(*Event)
OnEventListener can be used with DefaultSyncer.OnEventType to be informed of incoming events.
type PhoneIdentifier ¶
type PhoneIdentifier struct { IDType string `json:"type"` // Set by NewPhoneIdentifier Country string `json:"country"` Phone string `json:"phone"` }
PhoneIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#phone-number
func NewPhoneIdentifier ¶
func NewPhoneIdentifier(country, phone string) PhoneIdentifier
NewPhoneIdentifier creates a new UserIdentifier with IDType set to "m.id.user"
func (PhoneIdentifier) Type ¶
func (i PhoneIdentifier) Type() string
Type implements the Identifier interface
type PowerLevels ¶
type PowerLevels struct { Ban int `json:"ban"` Invite int `json:"invite"` Kick int `json:"kick"` Redact int `json:"redact"` Events map[string]int `json:"events"` Users map[string]int `json:"users"` Notifications NotificationPowerLevels `json:"notifications"` EventsDefault int `json:"events_default"` StateDefault int `json:"state_default"` UsersDefault int `json:"users_default"` }
PowerLevels is and m.room.power_levels event - https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels
type PublicRoom ¶
type PublicRoom struct { CanonicalAlias string `json:"canonical_alias"` Name string `json:"name"` WorldReadable bool `json:"world_readable"` Topic string `json:"topic"` NumJoinedMembers int `json:"num_joined_members"` AvatarURL string `json:"avatar_url"` RoomID string `json:"room_id"` GuestCanJoin bool `json:"guest_can_join"` Aliases []string `json:"aliases"` }
PublicRoom represents the information about a public room obtainable from the room directory
type PushActionType ¶
type PushActionType string
PushActionType is the type of a PushAction
const ( ActionNotify PushActionType = "notify" ActionDontNotify PushActionType = "dont_notify" ActionCoalesce PushActionType = "coalesce" ActionSetTweak PushActionType = "set_tweak" )
The allowed push action types as specified in spec section 11.12.1.4.1.
type PushCondKind ¶
type PushCondKind string
PushCondKind is the type of a push condition.
const ( KindEventMatch PushCondKind = "event_match" KindContainsDisplayName PushCondKind = "contains_display_name" KindRoomMemberCount PushCondKind = "room_member_count" KindEventPropertyIs PushCondKind = "event_property_is" KindEventPropertyContains PushCondKind = "event_property_contains" KindRelatedEventMatch PushCondKind = "related_event_match" KindUnstableRelatedEventMatch PushCondKind = "im.nheko.msc3664.related_event_match" )
The allowed push condition kinds as specified in https://spec.matrix.org/v1.2/client-server-api/#conditions-1
type PushCondition ¶
type PushCondition struct { // The type of the condition. Kind PushCondKind `json:"kind"` // The dot-separated field of the event to match. Only applicable if kind is EventMatch. Key string `json:"key,omitempty"` // The glob-style pattern to match the field against. Only applicable if kind is EventMatch. Pattern string `json:"pattern,omitempty"` // The exact value to match the field against. Only applicable if kind is EventPropertyIs or EventPropertyContains. Value any `json:"value,omitempty"` // The condition that needs to be fulfilled for RoomMemberCount-type conditions. // A decimal integer optionally prefixed by ==, <, >, >= or <=. Prefix "==" is assumed if no prefix found. MemberCountCondition string `json:"is,omitempty"` // The relation type for related_event_match from MSC3664 RelType RelationType `json:"rel_type,omitempty"` }
PushCondition wraps a condition that is required for a specific PushRule to be used.
type PushRuleType ¶
type PushRuleType string
const ( OverrideRule PushRuleType = "override" ContentRule PushRuleType = "content" RoomRule PushRuleType = "room" SenderRule PushRuleType = "sender" UnderrideRule PushRuleType = "underride" )
type RelationType ¶
type RelationType string
const ( RelReplace RelationType = "m.replace" RelReference RelationType = "m.reference" RelAnnotation RelationType = "m.annotation" RelThread RelationType = "m.thread" )
type ReqAccountPassword ¶
type ReqBanUser ¶
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 ¶
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"` RoomVersion string `json:"room_version,omitempty"` }
ReqCreateRoom is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom
type ReqEmailRequestToken ¶
type ReqEmailRequestToken struct { IdServer string `json:"id_server,omitempty"` IdAccessToken string `json:"id_access_token,omitempty"` Secret string `json:"client_secret"` Email string `json:"email"` SendAttempt int `json:"send_attempt"` NextLink string `json:"next_link,omitempty"` }
ReqEmailRequestToken is the JSON request for
https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-register-email-requesttoken https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-password-email-requesttoken https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken
type ReqGetAccountData ¶
type ReqGetAccountData struct {
Type string
}
ReqGetAccountData is the JSON request for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type
type ReqHierarchy ¶
type ReqInvite3PID ¶
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 ¶
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 ¶
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 ¶
type ReqLogin struct { Type string `json:"type"` Identifier Identifier `json:"identifier,omitempty"` 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"` InhibitDevice bool `json:"inhibit_device"` TotpSid string `json:"totp_sid"` Passcode string `json:"passcode"` Sid string `json:"sid,omitempty"` }
ReqLogin is the JSON request for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-login
type ReqPostThreePID ¶
type ReqPostThreePID struct {
ThreePIDCredes ThreePIDCreds `json:"three_pid_creds"`
}
type ReqPutAccountData ¶
type ReqPutAccountData struct { ReqGetAccountData Data map[string]interface{} }
ReqPutAccountData is the JSON request for https://matrix.org/docs/spec/client_server/r0.6.1#put-matrix-client-r0-user-userid-account-data-type
type ReqPutPushRule ¶
type ReqPutPushRule struct { Before string `json:"-"` After string `json:"-"` Actions []PushActionType `json:"actions"` Conditions []PushCondition `json:"conditions"` Pattern string `json:"pattern"` }
type ReqRedact ¶
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 ¶
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"` InhibitLogin bool `json:"inhibit_login"` 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 ¶
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 ¶
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 ReqUserDirectorySearch ¶
type RespAccountData ¶
type RespAccountData map[string]interface{}
RespAccountData is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type
type RespBanUser ¶
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 ¶
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 ¶
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 RespEmailRequestToken ¶
RespEmailRequestToken is JSON response for
https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-register-email-requesttoken https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-password-email-requesttoken https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken
type RespError ¶
type RespError struct { ErrCode string `json:"errcode"` Err string `json:"error"` RetryAfterMs int `json:"retry_after_ms"` }
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
type RespForgetRoom ¶
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 RespGetDevices ¶
type RespGetDevices struct {
Devices []Device `json:"devices"`
}
RespGetDevices is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-devices
type RespGetThreePID ¶
type RespGetThreePID struct {
ThreePIDs []ThreePID `json:"threepids"`
}
RespGetThreePID is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-3pid
type RespHierarchy ¶
type RespHierarchy struct {
Rooms []HierarchyRoom `json:"rooms"`
}
type RespInviteUser ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
type RespLogin struct { AccessToken string `json:"access_token"` DeviceID string `json:"device_id"` HomeServer string `json:"home_server"` UserID string `json:"user_id"` WellKnown DiscoveryInformation `json:"well_known"` TotpSid string `json:"totp_sid"` }
RespLogin is the JSON response for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-login
type RespLogout ¶
type RespLogout struct{}
RespLogout is the JSON response for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-logout
type RespLogoutAll ¶
type RespLogoutAll struct{}
RespLogoutAll is the JSON response for https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-logout-all
type RespMediaUpload ¶
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 RespMembers ¶
type RespMembers struct {
Chunk []Event `json:"chunk"`
}
type RespMessages ¶
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 RespPublicRooms ¶
type RespPublicRooms struct { TotalRoomCountEstimate int `json:"total_room_count_estimate"` PrevBatch string `json:"prev_batch"` NextBatch string `json:"next_batch"` Chunk []PublicRoom `json:"chunk"` }
RespPublicRooms is the JSON response for http://matrix.org/speculator/spec/HEAD/client_server/unstable.html#get-matrix-client-unstable-publicrooms
type RespRegister ¶
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 RespRoomAlias ¶
RespRoomAlias is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-directory-room-roomalias
type RespSendEvent ¶
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 ¶
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"` Ephemeral struct { Events []Event `json:"events"` } `json:"ephemeral"` } `json:"join"` Invite map[string]struct { State struct { Events []Event } `json:"invite_state"` } `json:"invite"` } `json:"rooms"` Multiroom map[string]map[string]struct { Content interface{} `json:"content"` Timestamp int64 `json:"timestamp"` } `json:"multiroom"` }
RespSync is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync
type RespTurnServer ¶
type RespTurnServer struct { Username string `json:"username"` Password string `json:"password"` TTL int `json:"ttl"` URIs []string `json:"uris"` }
RespTurnServer is the JSON response from a Turn Server
type RespTyping ¶
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 ¶
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 RespUserDirectorySearch ¶
type RespUserDisplayName ¶
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 ¶
type RespUserInteractive struct { Flows []struct { Stages []string `json:"stages"` } `json:"flows"` Params map[string]interface{} `json:"params"` Session string `json:"session"` 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 ¶
func (r RespUserInteractive) HasSingleStageFlow(stageName string) bool
HasSingleStageFlow returns true if there exists at least 1 Flow with a single stage of stageName.
type RespUserStatus ¶
type RespUserStatus struct { Presence string `json:"presence"` StatusMsg string `json:"status_msg"` LastActiveAgo int `json:"last_active_ago"` CurrentlyActive bool `json:"currently_active"` }
RespUserStatus is the JSON response for https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status
type RespVersions ¶
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 RespWhoAmI ¶
RespWhoAmI is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-whoami
type Room ¶
Room represents a single Matrix room.
func (Room) GetMembershipState ¶
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 ¶
GetStateEvent returns the state event for the given type/state_key combo, or nil.
func (Room) UpdateState ¶
UpdateState updates the room's current state with the given Event. This will clobber events based on the type/state_key combination.
type RoomFilter ¶
type RoomFilter 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"` }
RoomFilter is used to define filtering rules for room events
type Storer ¶
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 ¶
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 TagContent ¶
type TagContent struct {
Tags map[string]TagProperties `json:"tags"`
}
TagContent contains the data for an m.tag message type https://matrix.org/docs/spec/client_server/r0.4.0.html#m-tag
type TagProperties ¶
type TagProperties struct {
Order float32 `json:"order,omitempty"` // Empty values must be neglected
}
TagProperties contains the properties of a Tag
type TextMessage ¶
type TextMessage struct { MsgType string `json:"msgtype"` Body string `json:"body"` FormattedBody string `json:"formatted_body"` Format string `json:"format"` }
TextMessage is the contents of a Matrix formated message event.
type ThirdpartyIdentifier ¶
type ThirdpartyIdentifier struct { IDType string `json:"type"` // Set by NewThirdpartyIdentifier Medium string `json:"medium"` Address string `json:"address"` }
ThirdpartyIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#third-party-id
func NewThirdpartyIdentifier ¶
func NewThirdpartyIdentifier(medium, address string) ThirdpartyIdentifier
NewThirdpartyIdentifier creates a new UserIdentifier with IDType set to "m.id.user"
func (ThirdpartyIdentifier) Type ¶
func (i ThirdpartyIdentifier) Type() string
Type implements the Identifier interface
type ThreePIDCreds ¶
type ThumbnailInfo ¶
type ThumbnailInfo struct { Height uint `json:"h,omitempty"` Width uint `json:"w,omitempty"` Mimetype string `json:"mimetype,omitempty"` Size uint `json:"size,omitempty"` }
ThumbnailInfo contains info about an thumbnail image - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-image
type UserIdentifier ¶
type UserIdentifier struct { IDType string `json:"type"` // Set by NewUserIdentifer User string `json:"user"` }
UserIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#matrix-user-id
func NewUserIdentifier ¶
func NewUserIdentifier(user string) UserIdentifier
NewUserIdentifier creates a new UserIdentifier with IDType set to "m.id.user"
func (UserIdentifier) Type ¶
func (i UserIdentifier) Type() string
Type implements the Identifier interface
type VideoInfo ¶
type VideoInfo struct { Mimetype string `json:"mimetype,omitempty"` ThumbnailInfo ThumbnailInfo `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 ¶
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