bloat/mastodon/instance.go

127 lines
4.0 KiB
Go

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
}