package mastodon import ( "context" "net/http" ) // Instance hold information for mastodon instance. type Instance struct { URI string `json:"uri"` Title string `json:"title"` Description string `json:"description"` ShortDescription *string `json:"short_description"` EMail string `json:"email"` Version string `json:"version,omitempty"` Thumbnail string `json:"thumbnail,omitempty"` URLs map[string]string `json:"urls,omitempty"` Stats *InstanceStats `json:"stats,omitempty"` Languages []string `json:"languages"` ContactAccount *Account `json:"account"` PollLimits *PollLimit `json:"poll_limits"` MaxTootChars *int64 `json:"max_toot_chars"` MaxMediaAttachments *int64 `json:"max_media_attachments"` UploadLimit *int64 `json:"upload_limit"` BackgroundUploadLimit *int64 `json:"background_upload_limit"` AvatarUploadLimit *int64 `json:"avatar_upload_limit"` Configuration *InstanceConf `json:"configuration"` Rules *[]map[string]string `json:"rules"` Pleroma *PleromaInstance `json:"pleroma"` } // InstanceStats hold information for mastodon instance stats. type InstanceStats struct { UserCount int64 `json:"user_count"` StatusCount int64 `json:"status_count"` DomainCount int64 `json:"domain_count"` } // InstanceConf hold information for mastodon instances type InstanceConf struct { Statuses StatusesConf `json:"statuses"` } type StatusesConf struct { MaxCharacters int64 `json:"max_characters"` MaxMediaAttachments int64 `json:"max_media_attachments"` } type PollLimit struct { MaxExpiration int64 `json:"max_expiration"` MaxOptionChars int64 `json:"max_option_chars"` MaxOptions int64 `json:"max_options"` MinExpiration int64 `json:"min_expiration"` } // For about instance if this Pleroma type PleromaInstance struct { MetaData MetaData `json:"metadata"` } type MetaData struct { Features *[]string `json:"features"` Federation FederationInfo `json:"federation"` } type FederationInfo struct { Enabled bool `json:"enabled"` MrfPolicies []string `json:"mrf_policies"` MrfSimple MRFSimple `json:"mrf_simple"` } type MRFSimple struct { Reject []string `json:"reject"` MediaNsfw []string `json:"media_nsfw"` FederatedTimelineRemoval []string `json:"federated_timeline_removal"` RejectDeletes []string `json:"reject_deletes"` } // GetInstance return Instance. func (c *Client) GetInstance(ctx context.Context) (*Instance, error) { var instance Instance err := c.doAPI(ctx, http.MethodGet, "/api/v1/instance", nil, &instance, nil) if err != nil { return nil, err } return &instance, nil } // WeeklyActivity hold information for mastodon weekly activity. type WeeklyActivity struct { Week Unixtime `json:"week"` Statuses int64 `json:"statuses,string"` Logins int64 `json:"logins,string"` Registrations int64 `json:"registrations,string"` } // GetInstanceActivity return instance activity. func (c *Client) GetInstanceActivity(ctx context.Context) ([]*WeeklyActivity, error) { var activity []*WeeklyActivity err := c.doAPI(ctx, http.MethodGet, "/api/v1/instance/activity", nil, &activity, nil) if err != nil { return nil, err } return activity, nil } // GetInstancePeers return instance peers. func (c *Client) GetInstancePeers(ctx context.Context) ([]string, error) { var peers []string err := c.doAPI(ctx, http.MethodGet, "/api/v1/instance/peers", nil, &peers, nil) if err != nil { return nil, err } return peers, nil } // GetInstanceEmojis return instance emojis. func (c *Client) GetInstanceEmojis(ctx context.Context) ([]*Emoji, error) { var emojis []*Emoji err := c.doAPI(ctx, http.MethodGet, "/api/v1/custom_emojis", nil, &emojis, nil) if err != nil { return nil, err } return emojis, nil }