mastodon

package module
v0.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 15, 2024 License: MIT Imports: 20 Imported by: 159

README

go-mastodon

Build Status Codecov Go Reference Go Report Card

Usage

Application
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/mattn/go-mastodon"
)

func main() {
	app, err := mastodon.RegisterApp(context.Background(), &mastodon.AppConfig{
		Server:     "https://mstdn.jp",
		ClientName: "client-name",
		Scopes:     "read write follow",
		Website:    "https://github.com/mattn/go-mastodon",
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("client-id    : %s\n", app.ClientID)
	fmt.Printf("client-secret: %s\n", app.ClientSecret)
}
Client
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/mattn/go-mastodon"
)

func main() {
	c := mastodon.NewClient(&mastodon.Config{
		Server:       "https://mstdn.jp",
		ClientID:     "client-id",
		ClientSecret: "client-secret",
	})
	err := c.Authenticate(context.Background(), "your-email", "your-password")
	if err != nil {
		log.Fatal(err)
	}
	timeline, err := c.GetTimelineHome(context.Background(), nil)
	if err != nil {
		log.Fatal(err)
	}
	for i := len(timeline) - 1; i >= 0; i-- {
		fmt.Println(timeline[i])
	}
}
Client with Token

This option lets the user avoid storing login credentials in the application. Instead, the user's Mastodon server provides an access token which is used to authenticate. This token can be stored in the application, but should be guarded.

package main

import (
	"context"
	"fmt"
	"log"
	"net/url"

	"github.com/mattn/go-mastodon"
)

func main() {
	appConfig := &mastodon.AppConfig{
		Server:       "https://stranger.social",
		ClientName:   "client-name",
		Scopes:       "read write follow",
		Website:      "https://github.com/mattn/go-mastodon",
		RedirectURIs: "urn:ietf:wg:oauth:2.0:oob",
	}
	app, err := mastodon.RegisterApp(context.Background(), appConfig)
	if err != nil {
		log.Fatal(err)
	}

	// Have the user manually get the token and send it back to us
	u, err := url.Parse(app.AuthURI)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Open your browser to \n%s\n and copy/paste the given token\n", u)
	var token string
	fmt.Print("Paste the token here:")
	fmt.Scanln(&token)
	config := &mastodon.Config{
		Server:       "https://stranger.social",
		ClientID:     app.ClientID,
		ClientSecret: app.ClientSecret,
		AccessToken:  token,
	}

	c := mastodon.NewClient(config)
	err = c.AuthenticateToken(context.Background(), token, "urn:ietf:wg:oauth:2.0:oob")
	if err != nil {
		log.Fatal(err)
	}

	acct, err := c.GetAccountCurrentUser(context.Background())
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Account is %v\n", acct)

	finalText := "This is the content of my new post!"
	visibility := "public"

	// Post a toot
	toot := mastodon.Toot{
		Status:     finalText,
		Visibility: visibility,
	}
	post, err := c.PostStatus(context.Background(), &toot)

	if err != nil {
		log.Fatalf("%#v\n", err)
	}

	fmt.Printf("My new post is %v\n", post)
}

Status of implementations

  • GET /api/v1/accounts/:id
  • GET /api/v1/accounts/verify_credentials
  • PATCH /api/v1/accounts/update_credentials
  • GET /api/v1/accounts/:id/followers
  • GET /api/v1/accounts/:id/following
  • GET /api/v1/accounts/:id/statuses
  • POST /api/v1/accounts/:id/follow
  • POST /api/v1/accounts/:id/unfollow
  • GET /api/v1/accounts/:id/block
  • GET /api/v1/accounts/:id/unblock
  • GET /api/v1/accounts/:id/mute
  • GET /api/v1/accounts/:id/unmute
  • GET /api/v1/accounts/:id/lists
  • GET /api/v1/accounts/relationships
  • GET /api/v1/accounts/search
  • GET /api/v1/apps/verify_credentials
  • GET /api/v1/bookmarks
  • POST /api/v1/apps
  • GET /api/v1/blocks
  • GET /api/v1/conversations
  • DELETE /api/v1/conversations/:id
  • POST /api/v1/conversations/:id/read
  • GET /api/v1/favourites
  • GET /api/v1/filters
  • POST /api/v1/filters
  • GET /api/v1/filters/:id
  • PUT /api/v1/filters/:id
  • DELETE /api/v1/filters/:id
  • GET /api/v1/follow_requests
  • POST /api/v1/follow_requests/:id/authorize
  • POST /api/v1/follow_requests/:id/reject
  • GET /api/v1/followed_tags
  • POST /api/v1/follows
  • GET /api/v1/instance
  • GET /api/v1/instance/activity
  • GET /api/v1/instance/peers
  • GET /api/v1/lists
  • GET /api/v1/lists/:id/accounts
  • GET /api/v1/lists/:id
  • POST /api/v1/lists
  • PUT /api/v1/lists/:id
  • DELETE /api/v1/lists/:id
  • POST /api/v1/lists/:id/accounts
  • DELETE /api/v1/lists/:id/accounts
  • POST /api/v1/media
  • GET /api/v1/mutes
  • GET /api/v1/notifications
  • GET /api/v1/notifications/:id
  • POST /api/v1/notifications/:id/dismiss
  • POST /api/v1/notifications/clear
  • POST /api/v1/push/subscription
  • GET /api/v1/push/subscription
  • PUT /api/v1/push/subscription
  • DELETE /api/v1/push/subscription
  • GET /api/v1/reports
  • POST /api/v1/reports
  • GET /api/v2/search
  • GET /api/v1/statuses/:id
  • GET /api/v1/statuses/:id/context
  • GET /api/v1/statuses/:id/card
  • GET /api/v1/statuses/:id/history
  • GET /api/v1/statuses/:id/reblogged_by
  • GET /api/v1/statuses/:id/source
  • GET /api/v1/statuses/:id/favourited_by
  • POST /api/v1/statuses
  • PUT /api/v1/statuses/:id
  • DELETE /api/v1/statuses/:id
  • POST /api/v1/statuses/:id/reblog
  • POST /api/v1/statuses/:id/unreblog
  • POST /api/v1/statuses/:id/favourite
  • POST /api/v1/statuses/:id/unfavourite
  • POST /api/v1/statuses/:id/bookmark
  • POST /api/v1/statuses/:id/unbookmark
  • GET /api/v1/timelines/home
  • GET /api/v1/timelines/public
  • GET /api/v1/timelines/tag/:hashtag
  • GET /api/v1/timelines/list/:id
  • GET /api/v1/streaming/user
  • GET /api/v1/streaming/public
  • GET /api/v1/streaming/hashtag?tag=:hashtag
  • GET /api/v1/streaming/hashtag/local?tag=:hashtag
  • GET /api/v1/streaming/list?list=:list_id
  • GET /api/v1/streaming/direct
  • GET /api/v1/endorsements

Installation

go install github.com/mattn/go-mastodon@latest

License

MIT

Author

Yasuhiro Matsumoto (a.k.a. mattn)

Documentation

Overview

Package mastodon provides functions and structs for accessing the mastodon API.

Index

Examples

Constants

View Source
const (
	VisibilityPublic        = "public"
	VisibilityUnlisted      = "unlisted"
	VisibilityFollowersOnly = "private"
	VisibilityDirectMessage = "direct"
)

Convenience constants for Toot.Visibility

Variables

This section is empty.

Functions

func Base64Encode

func Base64Encode(file *os.File) (string, error)

Base64Encode returns the base64 data URI format string of the file.

func Base64EncodeFileName

func Base64EncodeFileName(filename string) (string, error)

Base64EncodeFileName returns the base64 data URI format string of the file with the file name.

func String

func String(v string) *string

String is a helper function to get the pointer value of a string.

Types

type APIError added in v0.0.8

type APIError struct {
	Message    string
	StatusCode int
	// contains filtered or unexported fields
}

func (*APIError) Error added in v0.0.8

func (e *APIError) Error() string

type Account

type Account struct {
	ID             ID             `json:"id"`
	Username       string         `json:"username"`
	Acct           string         `json:"acct"`
	DisplayName    string         `json:"display_name"`
	Locked         bool           `json:"locked"`
	CreatedAt      time.Time      `json:"created_at"`
	FollowersCount int64          `json:"followers_count"`
	FollowingCount int64          `json:"following_count"`
	StatusesCount  int64          `json:"statuses_count"`
	Note           string         `json:"note"`
	URL            string         `json:"url"`
	Avatar         string         `json:"avatar"`
	AvatarStatic   string         `json:"avatar_static"`
	Header         string         `json:"header"`
	HeaderStatic   string         `json:"header_static"`
	Emojis         []Emoji        `json:"emojis"`
	Moved          *Account       `json:"moved"`
	Fields         []Field        `json:"fields"`
	Bot            bool           `json:"bot"`
	Discoverable   bool           `json:"discoverable"`
	Source         *AccountSource `json:"source"`
	FollowedTag    []FollowedTag  `json:"followed_tags"`
}

Account holds information for a mastodon account.

type AccountSource added in v0.0.4

type AccountSource struct {
	Privacy   *string  `json:"privacy"`
	Sensitive *bool    `json:"sensitive"`
	Language  *string  `json:"language"`
	Note      *string  `json:"note"`
	Fields    *[]Field `json:"fields"`
}

AccountSource is a Mastodon account profile field.

type AppConfig

type AppConfig struct {
	http.Client
	Server     string
	ClientName string

	// Where the user should be redirected after authorization (for no redirect, use urn:ietf:wg:oauth:2.0:oob)
	RedirectURIs string

	// This can be a space-separated list of items listed on the /settings/applications/new page of any Mastodon
	// instance. "read", "write", and "follow" are top-level scopes that include all the permissions of the more
	// specific scopes like "read:favourites", "write:statuses", and "write:follows".
	Scopes string

	// Optional.
	Website string
}

AppConfig is a setting for registering applications.

type Application

type Application struct {
	ID           ID     `json:"id"`
	RedirectURI  string `json:"redirect_uri"`
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret"`

	// AuthURI is not part of the Mastodon API; it is generated by go-mastodon.
	AuthURI string `json:"auth_uri,omitempty"`
}

Application is a mastodon application.

func RegisterApp

func RegisterApp(ctx context.Context, appConfig *AppConfig) (*Application, error)

RegisterApp returns the mastodon application.

Example
app, err := mastodon.RegisterApp(context.Background(), &mastodon.AppConfig{
	Server:     "https://mstdn.jp",
	ClientName: "client-name",
	Scopes:     "read write follow",
	Website:    "https://github.com/mattn/go-mastodon",
})
if err != nil {
	log.Fatal(err)
}
fmt.Printf("client-id    : %s\n", app.ClientID)
fmt.Printf("client-secret: %s\n", app.ClientSecret)
Output:

type ApplicationVerification added in v0.0.6

type ApplicationVerification struct {
	Name     string `json:"name"`
	Website  string `json:"website"`
	VapidKey string `json:"vapid_key"`
}

ApplicationVerification is mastodon application.

type Attachment

type Attachment struct {
	ID          ID             `json:"id"`
	Type        string         `json:"type"`
	URL         string         `json:"url"`
	RemoteURL   string         `json:"remote_url"`
	PreviewURL  string         `json:"preview_url"`
	TextURL     string         `json:"text_url"`
	Description string         `json:"description"`
	Meta        AttachmentMeta `json:"meta"`
}

Attachment hold information for attachment.

type AttachmentMeta added in v0.0.4

type AttachmentMeta struct {
	Original AttachmentSize `json:"original"`
	Small    AttachmentSize `json:"small"`
}

AttachmentMeta holds information for attachment metadata.

type AttachmentSize added in v0.0.4

type AttachmentSize struct {
	Width  int64   `json:"width"`
	Height int64   `json:"height"`
	Size   string  `json:"size"`
	Aspect float64 `json:"aspect"`
}

AttachmentSize holds information for attatchment size.

type Card

type Card struct {
	URL          string `json:"url"`
	Title        string `json:"title"`
	Description  string `json:"description"`
	Image        string `json:"image"`
	Type         string `json:"type"`
	AuthorName   string `json:"author_name"`
	AuthorURL    string `json:"author_url"`
	ProviderName string `json:"provider_name"`
	ProviderURL  string `json:"provider_url"`
	HTML         string `json:"html"`
	Width        int64  `json:"width"`
	Height       int64  `json:"height"`
}

Card holds information for a mastodon card.

type Client

type Client struct {
	http.Client
	Config    *Config
	UserAgent string
}

Client is a API client for mastodon.

Example
c := mastodon.NewClient(&mastodon.Config{
	Server:       "https://mstdn.jp",
	ClientID:     "client-id",
	ClientSecret: "client-secret",
})
err := c.Authenticate(context.Background(), "your-email", "your-password")
if err != nil {
	log.Fatal(err)
}
timeline, err := c.GetTimelineHome(context.Background(), nil)
if err != nil {
	log.Fatal(err)
}
for i := len(timeline) - 1; i >= 0; i-- {
	fmt.Println(timeline[i])
}
Output:

func NewClient

func NewClient(config *Config) *Client

NewClient returns a new mastodon API client.

func (*Client) AccountBlock

func (c *Client) AccountBlock(ctx context.Context, id ID) (*Relationship, error)

AccountBlock blocks the account.

func (*Client) AccountFollow

func (c *Client) AccountFollow(ctx context.Context, id ID) (*Relationship, error)

AccountFollow follows the account.

func (*Client) AccountLookup added in v0.0.8

func (c *Client) AccountLookup(ctx context.Context, acct string) (*Account, error)

AccountLookup returns the Account of specified acct uri.

func (*Client) AccountMute

func (c *Client) AccountMute(ctx context.Context, id ID) (*Relationship, error)

AccountMute mutes the account.

func (*Client) AccountUnblock

func (c *Client) AccountUnblock(ctx context.Context, id ID) (*Relationship, error)

AccountUnblock unblocks the account.

func (*Client) AccountUnfollow

func (c *Client) AccountUnfollow(ctx context.Context, id ID) (*Relationship, error)

AccountUnfollow unfollows the account.

func (*Client) AccountUnmute

func (c *Client) AccountUnmute(ctx context.Context, id ID) (*Relationship, error)

AccountUnmute unmutes the account.

func (*Client) AccountUpdate

func (c *Client) AccountUpdate(ctx context.Context, profile *Profile) (*Account, error)

AccountUpdate updates the information of the current user.

func (*Client) AccountsSearch

func (c *Client) AccountsSearch(ctx context.Context, q string, limit int64) ([]*Account, error)

AccountsSearch searches accounts by query.

func (*Client) AddPushSubscription added in v0.0.5

func (c *Client) AddPushSubscription(ctx context.Context, endpoint string, public ecdsa.PublicKey, shared []byte, alerts PushAlerts) (*PushSubscription, error)

AddPushSubscription adds a new push subscription.

func (*Client) AddToList added in v0.0.4

func (c *Client) AddToList(ctx context.Context, list ID, accounts ...ID) error

AddToList adds accounts to a list.

Only accounts already followed by the user can be added to a list.

func (*Client) Authenticate

func (c *Client) Authenticate(ctx context.Context, username, password string) error

Authenticate gets access-token to the API.

func (*Client) AuthenticateApp added in v0.0.6

func (c *Client) AuthenticateApp(ctx context.Context) error

AuthenticateApp logs in using client credentials.

func (*Client) AuthenticateToken added in v0.0.3

func (c *Client) AuthenticateToken(ctx context.Context, authCode, redirectURI string) error

AuthenticateToken logs in using a grant token returned by Application.AuthURI.

redirectURI should be the same as Application.RedirectURI.

func (*Client) Bookmark added in v0.0.5

func (c *Client) Bookmark(ctx context.Context, id ID) (*Status, error)

Bookmark bookmarks the toot of id and returns status of the bookmark toot.

func (*Client) ClearNotifications

func (c *Client) ClearNotifications(ctx context.Context) error

ClearNotifications clears notifications.

func (*Client) CreateFilter added in v0.0.5

func (c *Client) CreateFilter(ctx context.Context, filter *Filter) (*Filter, error)

CreateFilter creates a new filter.

func (*Client) CreateList added in v0.0.4

func (c *Client) CreateList(ctx context.Context, title string) (*List, error)

CreateList creates a new list with a given title.

func (*Client) DeleteConversation added in v0.0.5

func (c *Client) DeleteConversation(ctx context.Context, id ID) error

DeleteConversation delete the conversation specified by id.

func (*Client) DeleteFilter added in v0.0.5

func (c *Client) DeleteFilter(ctx context.Context, id ID) error

DeleteFilter removes a filter.

func (*Client) DeleteList added in v0.0.4

func (c *Client) DeleteList(ctx context.Context, id ID) error

DeleteList removes a list.

func (*Client) DeleteStatus

func (c *Client) DeleteStatus(ctx context.Context, id ID) error

DeleteStatus delete the toot.

func (*Client) DismissNotification added in v0.0.5

func (c *Client) DismissNotification(ctx context.Context, id ID) error

DismissNotification deletes a single notification.

func (*Client) Favourite

func (c *Client) Favourite(ctx context.Context, id ID) (*Status, error)

Favourite favourites the toot of id and returns status of the favourite toot.

func (*Client) FollowRemoteUser

func (c *Client) FollowRemoteUser(ctx context.Context, uri string) (*Account, error)

FollowRemoteUser sends follow-request.

func (*Client) FollowRequestAuthorize

func (c *Client) FollowRequestAuthorize(ctx context.Context, id ID) error

FollowRequestAuthorize authorizes the follow request of user with id.

func (*Client) FollowRequestReject

func (c *Client) FollowRequestReject(ctx context.Context, id ID) error

FollowRequestReject rejects the follow request of user with id.

func (*Client) GetAccount

func (c *Client) GetAccount(ctx context.Context, id ID) (*Account, error)

GetAccount return Account.

func (*Client) GetAccountCurrentUser

func (c *Client) GetAccountCurrentUser(ctx context.Context) (*Account, error)

GetAccountCurrentUser returns the Account of current user.

func (*Client) GetAccountFollowers

func (c *Client) GetAccountFollowers(ctx context.Context, id ID, pg *Pagination) ([]*Account, error)

GetAccountFollowers returns followers list.

func (*Client) GetAccountFollowing

func (c *Client) GetAccountFollowing(ctx context.Context, id ID, pg *Pagination) ([]*Account, error)

GetAccountFollowing returns following list.

func (*Client) GetAccountLists added in v0.0.4

func (c *Client) GetAccountLists(ctx context.Context, id ID) ([]*List, error)

GetAccountLists returns the lists containing a given account.

func (*Client) GetAccountPinnedStatuses added in v0.0.5

func (c *Client) GetAccountPinnedStatuses(ctx context.Context, id ID) ([]*Status, error)

GetAccountPinnedStatuses returns statuses pinned by specified accuont.

func (*Client) GetAccountRelationships

func (c *Client) GetAccountRelationships(ctx context.Context, ids []string) ([]*Relationship, error)

GetAccountRelationships returns relationship for the account.

func (*Client) GetAccountStatuses

func (c *Client) GetAccountStatuses(ctx context.Context, id ID, pg *Pagination) ([]*Status, error)

GetAccountStatuses return statuses by specified account.

func (*Client) GetBlocks

func (c *Client) GetBlocks(ctx context.Context, pg *Pagination) ([]*Account, error)

GetBlocks returns block list.

func (*Client) GetBookmarks added in v0.0.5

func (c *Client) GetBookmarks(ctx context.Context, pg *Pagination) ([]*Status, error)

GetBookmarks returns the bookmark list of the current user.

func (*Client) GetConversations added in v0.0.5

func (c *Client) GetConversations(ctx context.Context, pg *Pagination) ([]*Conversation, error)

GetConversations return direct conversations.

func (*Client) GetEndorsements added in v0.0.8

func (c *Client) GetEndorsements(ctx context.Context, pg *Pagination) ([]*Account, error)

GetEndorsements return accounts that the user is currently featuring on their profile.

func (*Client) GetFavouritedBy

func (c *Client) GetFavouritedBy(ctx context.Context, id ID, pg *Pagination) ([]*Account, error)

GetFavouritedBy returns the account list of the user who liked the toot of id.

func (*Client) GetFavourites

func (c *Client) GetFavourites(ctx context.Context, pg *Pagination) ([]*Status, error)

GetFavourites returns the favorite list of the current user.

func (*Client) GetFilter added in v0.0.5

func (c *Client) GetFilter(ctx context.Context, id ID) (*Filter, error)

GetFilter retrieves a filter by ID.

func (*Client) GetFilters added in v0.0.5

func (c *Client) GetFilters(ctx context.Context) ([]*Filter, error)

GetFilters returns all the filters on the current account.

func (*Client) GetFollowRequests

func (c *Client) GetFollowRequests(ctx context.Context, pg *Pagination) ([]*Account, error)

GetFollowRequests returns follow requests.

func (*Client) GetFollowedTags added in v0.0.8

func (c *Client) GetFollowedTags(ctx context.Context, pg *Pagination) ([]*FollowedTag, error)

GetFollowedTags returns the list of Hashtags followed by the user.

func (*Client) GetInstance

func (c *Client) GetInstance(ctx context.Context) (*Instance, error)

GetInstance returns Instance.

func (*Client) GetInstanceActivity added in v0.0.3

func (c *Client) GetInstanceActivity(ctx context.Context) ([]*WeeklyActivity, error)

GetInstanceActivity returns instance activity.

func (*Client) GetInstancePeers added in v0.0.3

func (c *Client) GetInstancePeers(ctx context.Context) ([]string, error)

GetInstancePeers returns instance peers.

func (*Client) GetList added in v0.0.4

func (c *Client) GetList(ctx context.Context, id ID) (*List, error)

GetList retrieves a list by ID.

func (*Client) GetListAccounts added in v0.0.4

func (c *Client) GetListAccounts(ctx context.Context, id ID) ([]*Account, error)

GetListAccounts returns the accounts in a given list.

func (*Client) GetLists added in v0.0.4

func (c *Client) GetLists(ctx context.Context) ([]*List, error)

GetLists returns all the lists on the current account.

func (*Client) GetMutes

func (c *Client) GetMutes(ctx context.Context, pg *Pagination) ([]*Account, error)

GetMutes returns the list of users muted by the current user.

func (*Client) GetNotification

func (c *Client) GetNotification(ctx context.Context, id ID) (*Notification, error)

GetNotification returns notification.

func (*Client) GetNotifications

func (c *Client) GetNotifications(ctx context.Context, pg *Pagination) ([]*Notification, error)

GetNotifications returns notifications.

func (*Client) GetPoll added in v0.0.5

func (c *Client) GetPoll(ctx context.Context, id ID) (*Poll, error)

GetPoll returns poll specified by id.

func (*Client) GetPushSubscription added in v0.0.5

func (c *Client) GetPushSubscription(ctx context.Context) (*PushSubscription, error)

GetPushSubscription retrieves information about the active push subscription.

func (*Client) GetRebloggedBy

func (c *Client) GetRebloggedBy(ctx context.Context, id ID, pg *Pagination) ([]*Account, error)

GetRebloggedBy returns the account list of the user who reblogged the toot of id.

func (*Client) GetReports

func (c *Client) GetReports(ctx context.Context) ([]*Report, error)

GetReports returns report of the current user.

func (*Client) GetStatus

func (c *Client) GetStatus(ctx context.Context, id ID) (*Status, error)

GetStatus returns status specified by id.

func (*Client) GetStatusCard

func (c *Client) GetStatusCard(ctx context.Context, id ID) (*Card, error)

GetStatusCard returns status specified by id.

func (*Client) GetStatusContext

func (c *Client) GetStatusContext(ctx context.Context, id ID) (*Context, error)

GetStatusContext returns status specified by id.

func (*Client) GetStatusHistory added in v0.0.8

func (c *Client) GetStatusHistory(ctx context.Context, id ID) ([]*StatusHistory, error)

GetStatusHistory returns the status history specified by id.

func (*Client) GetStatusSource added in v0.0.8

func (c *Client) GetStatusSource(ctx context.Context, id ID) (*Source, error)

GetStatusSource returns source data specified by id.

func (*Client) GetTimelineDirect added in v0.0.5

func (c *Client) GetTimelineDirect(ctx context.Context, pg *Pagination) ([]*Status, error)

GetTimelineDirect return statuses from direct timeline.

func (*Client) GetTimelineHashtag

func (c *Client) GetTimelineHashtag(ctx context.Context, tag string, isLocal bool, pg *Pagination) ([]*Status, error)

GetTimelineHashtag return statuses from tagged timeline.

func (*Client) GetTimelineHome

func (c *Client) GetTimelineHome(ctx context.Context, pg *Pagination) ([]*Status, error)

GetTimelineHome return statuses from home timeline.

func (*Client) GetTimelineList added in v0.0.4

func (c *Client) GetTimelineList(ctx context.Context, id ID, pg *Pagination) ([]*Status, error)

GetTimelineList return statuses from a list timeline.

func (*Client) GetTimelineMedia

func (c *Client) GetTimelineMedia(ctx context.Context, isLocal bool, pg *Pagination) ([]*Status, error)

GetTimelineMedia return statuses from media timeline. NOTE: This is an experimental feature of pawoo.net.

func (*Client) GetTimelinePublic

func (c *Client) GetTimelinePublic(ctx context.Context, isLocal bool, pg *Pagination) ([]*Status, error)

GetTimelinePublic return statuses from public timeline.

func (*Client) MarkConversationAsRead added in v0.0.5

func (c *Client) MarkConversationAsRead(ctx context.Context, id ID) error

MarkConversationAsRead mark the conversation as read.

func (*Client) NewWSClient

func (c *Client) NewWSClient() *WSClient

NewWSClient return WebSocket client.

func (*Client) PollVote added in v0.0.5

func (c *Client) PollVote(ctx context.Context, id ID, choices ...int) (*Poll, error)

PollVote votes on a poll specified by id, choices is the Poll.Options index to vote on

func (*Client) PostStatus

func (c *Client) PostStatus(ctx context.Context, toot *Toot) (*Status, error)

PostStatus post the toot.

func (*Client) Reblog

func (c *Client) Reblog(ctx context.Context, id ID) (*Status, error)

Reblog reblogs the toot of id and returns status of reblog.

func (*Client) RemoveFromList added in v0.0.4

func (c *Client) RemoveFromList(ctx context.Context, list ID, accounts ...ID) error

RemoveFromList removes accounts from a list.

func (*Client) RemovePushSubscription added in v0.0.5

func (c *Client) RemovePushSubscription(ctx context.Context) error

RemovePushSubscription deletes the active push subscription.

func (*Client) RenameList added in v0.0.4

func (c *Client) RenameList(ctx context.Context, id ID, title string) (*List, error)

RenameList assigns a new title to a list.

func (*Client) Report

func (c *Client) Report(ctx context.Context, accountID ID, ids []ID, comment string) (*Report, error)

Report reports the report

func (*Client) Search

func (c *Client) Search(ctx context.Context, q string, resolve bool) (*Results, error)

Search search content with query.

func (*Client) StreamingDirect added in v0.0.5

func (c *Client) StreamingDirect(ctx context.Context) (chan Event, error)

StreamingDirect returns a channel to read events on a direct messages.

func (*Client) StreamingHashtag

func (c *Client) StreamingHashtag(ctx context.Context, tag string, isLocal bool) (chan Event, error)

StreamingHashtag returns a channel to read events on tagged timeline.

func (*Client) StreamingList added in v0.0.4

func (c *Client) StreamingList(ctx context.Context, id ID) (chan Event, error)

StreamingList returns a channel to read events on a list.

func (*Client) StreamingPublic

func (c *Client) StreamingPublic(ctx context.Context, isLocal bool) (chan Event, error)

StreamingPublic returns a channel to read events on public.

func (*Client) StreamingUser

func (c *Client) StreamingUser(ctx context.Context) (chan Event, error)

StreamingUser returns a channel to read events on home.

func (*Client) TagUnfollow added in v0.0.8

func (c *Client) TagUnfollow(ctx context.Context, ID string) (*FollowedTag, error)

TagUnfollow unfollows a hashtag.

func (*Client) Unbookmark added in v0.0.5

func (c *Client) Unbookmark(ctx context.Context, id ID) (*Status, error)

Unbookmark is unbookmark the toot of id and return status of the unbookmark toot.

func (*Client) Unfavourite

func (c *Client) Unfavourite(ctx context.Context, id ID) (*Status, error)

Unfavourite unfavourites the toot of id and returns status of the unfavourite toot.

func (*Client) Unreblog

func (c *Client) Unreblog(ctx context.Context, id ID) (*Status, error)

Unreblog unreblogs the toot of id and returns status of the original toot.

func (*Client) UpdateFilter added in v0.0.5

func (c *Client) UpdateFilter(ctx context.Context, id ID, filter *Filter) (*Filter, error)

UpdateFilter updates a filter.

func (*Client) UpdatePushSubscription added in v0.0.5

func (c *Client) UpdatePushSubscription(ctx context.Context, alerts *PushAlerts) (*PushSubscription, error)

UpdatePushSubscription updates which type of notifications are sent for the active push subscription.

func (*Client) UpdateStatus added in v0.0.8

func (c *Client) UpdateStatus(ctx context.Context, toot *Toot, id ID) (*Status, error)

UpdateStatus updates the toot.

func (*Client) UploadMedia

func (c *Client) UploadMedia(ctx context.Context, file string) (*Attachment, error)

UploadMedia upload a media attachment from a file.

func (*Client) UploadMediaFromBytes added in v0.0.6

func (c *Client) UploadMediaFromBytes(ctx context.Context, b []byte) (*Attachment, error)

UploadMediaFromBytes uploads a media attachment from a byte slice.

func (*Client) UploadMediaFromMedia added in v0.0.5

func (c *Client) UploadMediaFromMedia(ctx context.Context, media *Media) (*Attachment, error)

UploadMediaFromMedia uploads a media attachment from a Media struct.

func (*Client) UploadMediaFromReader added in v0.0.4

func (c *Client) UploadMediaFromReader(ctx context.Context, reader io.Reader) (*Attachment, error)

UploadMediaFromReader uploads a media attachment from an io.Reader.

func (*Client) VerifyAppCredentials added in v0.0.6

func (c *Client) VerifyAppCredentials(ctx context.Context) (*ApplicationVerification, error)

VerifyAppCredentials returns the mastodon application.

type Config

type Config struct {
	Server       string
	ClientID     string
	ClientSecret string
	AccessToken  string
}

Config is a setting for access mastodon APIs.

type Context

type Context struct {
	Ancestors   []*Status `json:"ancestors"`
	Descendants []*Status `json:"descendants"`
}

Context holds information for a mastodon context.

type Conversation added in v0.0.5

type Conversation struct {
	ID         ID         `json:"id"`
	Accounts   []*Account `json:"accounts"`
	Unread     bool       `json:"unread"`
	LastStatus *Status    `json:"last_status"`
}

Conversation holds information for a mastodon conversation.

type DeleteEvent

type DeleteEvent struct{ ID ID }

DeleteEvent is a struct for passing deletion event to app.

type Emoji added in v0.0.3

type Emoji struct {
	ShortCode       string `json:"shortcode"`
	StaticURL       string `json:"static_url"`
	URL             string `json:"url"`
	VisibleInPicker bool   `json:"visible_in_picker"`
}

Emoji hold information for CustomEmoji.

type ErrorEvent

type ErrorEvent struct{ Err error }

ErrorEvent is a struct for passing errors to app.

func (*ErrorEvent) Error

func (e *ErrorEvent) Error() string

type Event

type Event interface {
	// contains filtered or unexported methods
}

Event is an interface passing events to app.

type Field added in v0.0.3

type Field struct {
	Name       string    `json:"name"`
	Value      string    `json:"value"`
	VerifiedAt time.Time `json:"verified_at"`
}

Field is a Mastodon account profile field.

type Filter added in v0.0.5

type Filter struct {
	ID           ID        `json:"id"`
	Phrase       string    `json:"phrase"`
	Context      []string  `json:"context"`
	WholeWord    bool      `json:"whole_word"`
	ExpiresAt    time.Time `json:"expires_at"`
	Irreversible bool      `json:"irreversible"`
}

Filter is metadata for a filter of users.

type FollowedTag added in v0.0.8

type FollowedTag struct {
	Name      string               `json:"name,omitempty"`
	URL       string               `json:"url,omitempty"`
	History   []FollowedTagHistory `json:"history,omitempty"`
	Following bool                 `json:"following,omitempty"`
}

FollowedTag is a Hash Tag followed by the user

type FollowedTagHistory added in v0.0.8

type FollowedTagHistory struct {
	Day      UnixTimeString `json:"day,omitempty"`
	Accounts int            `json:"accounts,string,omitempty"`
	Uses     int            `json:"uses,string,omitempty"`
}

History is the history of a followed tag

type History added in v0.0.3

type History struct {
	Day      string `json:"day"`
	Uses     string `json:"uses"`
	Accounts string `json:"accounts"`
}

History hold information for history.

type ID added in v0.0.2

type ID string

func (*ID) UnmarshalJSON added in v0.0.2

func (id *ID) UnmarshalJSON(data []byte) error

type Instance

type Instance struct {
	URI            string            `json:"uri"`
	Title          string            `json:"title"`
	Description    string            `json:"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:"contact_account"`
	Configuration  *InstanceConfig   `json:"configuration"`
}

Instance holds information for a mastodon instance.

func (*Instance) GetConfig added in v0.0.8

func (c *Instance) GetConfig() *InstanceConfig

GetConfig returns InstanceConfig.

type InstanceConfig added in v0.0.8

type InstanceConfig struct {
	Accounts         *InstanceConfigMap     `json:"accounts"`
	Statuses         *InstanceConfigMap     `json:"statuses"`
	MediaAttachments map[string]interface{} `json:"media_attachments"`
	Polls            *InstanceConfigMap     `json:"polls"`
}

InstanceConfig holds configuration accessible for clients.

type InstanceConfigMap added in v0.0.8

type InstanceConfigMap map[string]int

type InstanceStats added in v0.0.3

type InstanceStats struct {
	UserCount   int64 `json:"user_count"`
	StatusCount int64 `json:"status_count"`
	DomainCount int64 `json:"domain_count"`
}

InstanceStats holds information for mastodon instance stats.

type List added in v0.0.4

type List struct {
	ID    ID     `json:"id"`
	Title string `json:"title"`
}

List is metadata for a list of users.

type Media added in v0.0.5

type Media struct {
	File        io.Reader
	Thumbnail   io.Reader
	Description string
	Focus       string
}

Media is struct to hold media.

type Mention

type Mention struct {
	URL      string `json:"url"`
	Username string `json:"username"`
	Acct     string `json:"acct"`
	ID       ID     `json:"id"`
}

Mention hold information for mention.

type Notification

type Notification struct {
	ID        ID        `json:"id"`
	Type      string    `json:"type"`
	CreatedAt time.Time `json:"created_at"`
	Account   Account   `json:"account"`
	Status    *Status   `json:"status"`
}

Notification holds information for a mastodon notification.

type NotificationEvent

type NotificationEvent struct {
	Notification *Notification `json:"notification"`
}

NotificationEvent is a struct for passing notification event to app.

type Pagination

type Pagination struct {
	MaxID   ID
	SinceID ID
	MinID   ID
	Limit   int64
}

Pagination is a struct for specifying the get range.

Example
c := mastodon.NewClient(&mastodon.Config{
	Server:       "https://mstdn.jp",
	ClientID:     "client-id",
	ClientSecret: "client-secret",
})
var followers []*mastodon.Account
var pg mastodon.Pagination
for {
	fs, err := c.GetAccountFollowers(context.Background(), "1", &pg)
	if err != nil {
		log.Fatal(err)
	}
	followers = append(followers, fs...)
	if pg.MaxID == "" {
		break
	}
	time.Sleep(10 * time.Second)
}
for _, f := range followers {
	fmt.Println(f.Acct)
}
Output:

type Poll added in v0.0.5

type Poll struct {
	ID          ID           `json:"id"`
	ExpiresAt   time.Time    `json:"expires_at"`
	Expired     bool         `json:"expired"`
	Multiple    bool         `json:"multiple"`
	VotesCount  int64        `json:"votes_count"`
	VotersCount int64        `json:"voters_count"`
	Options     []PollOption `json:"options"`
	Voted       bool         `json:"voted"`
	OwnVotes    []int        `json:"own_votes"`
	Emojis      []Emoji      `json:"emojis"`
}

Poll holds information for mastodon polls.

type PollOption added in v0.0.5

type PollOption struct {
	Title      string `json:"title"`
	VotesCount int64  `json:"votes_count"`
}

Poll holds information for a mastodon poll option.

type Profile

type Profile struct {
	// If it is nil it will not be updated.
	// If it is empty, update it with empty.
	DisplayName *string
	Note        *string
	Locked      *bool
	Fields      *[]Field
	Source      *AccountSource

	// Set the base64 encoded character string of the image.
	Avatar string
	Header string
}

Profile is a struct for updating profiles.

type PushAlerts added in v0.0.5

type PushAlerts struct {
	Follow    *Sbool `json:"follow"`
	Favourite *Sbool `json:"favourite"`
	Reblog    *Sbool `json:"reblog"`
	Mention   *Sbool `json:"mention"`
}

type PushSubscription added in v0.0.5

type PushSubscription struct {
	ID        ID          `json:"id"`
	Endpoint  string      `json:"endpoint"`
	ServerKey string      `json:"server_key"`
	Alerts    *PushAlerts `json:"alerts"`
}

type Relationship

type Relationship struct {
	ID                  ID   `json:"id"`
	Following           bool `json:"following"`
	FollowedBy          bool `json:"followed_by"`
	Blocking            bool `json:"blocking"`
	Muting              bool `json:"muting"`
	MutingNotifications bool `json:"muting_notifications"`
	Requested           bool `json:"requested"`
	DomainBlocking      bool `json:"domain_blocking"`
	ShowingReblogs      bool `json:"showing_reblogs"`
	Endorsed            bool `json:"endorsed"`
}

Relationship holds information for relationship to the account.

type Report

type Report struct {
	ID          int64 `json:"id"`
	ActionTaken bool  `json:"action_taken"`
}

Report holds information for a mastodon report.

type Results

type Results struct {
	Accounts []*Account `json:"accounts"`
	Statuses []*Status  `json:"statuses"`
	Hashtags []*Tag     `json:"hashtags"`
}

Results hold information for search result.

type Sbool added in v0.0.5

type Sbool bool

func (*Sbool) UnmarshalJSON added in v0.0.5

func (s *Sbool) UnmarshalJSON(data []byte) error

type ScheduledParams added in v0.0.8

type ScheduledParams struct {
	ApplicationID ID          `json:"application_id"`
	Idempotency   string      `json:"idempotency"`
	InReplyToID   interface{} `json:"in_reply_to_id"`
	MediaIDs      []ID        `json:"media_ids"`
	Poll          *Poll       `json:"poll"`
	ScheduledAt   *time.Time  `json:"scheduled_at,omitempty"`
	Sensitive     bool        `json:"sensitive"`
	SpoilerText   string      `json:"spoiler_text"`
	Text          string      `json:"text"`
	Visibility    string      `json:"visibility"`
}

ScheduledStatus holds information returned when ScheduledAt is set on a status

type Source added in v0.0.8

type Source struct {
	ID          ID     `json:"id"`
	Text        string `json:"text"`
	SpoilerText string `json:"spoiler_text"`
}

Source holds source properties so a status can be edited.

type Status

type Status struct {
	ID                 ID              `json:"id"`
	URI                string          `json:"uri"`
	URL                string          `json:"url"`
	Account            Account         `json:"account"`
	InReplyToID        interface{}     `json:"in_reply_to_id"`
	InReplyToAccountID interface{}     `json:"in_reply_to_account_id"`
	Reblog             *Status         `json:"reblog"`
	Content            string          `json:"content"`
	CreatedAt          time.Time       `json:"created_at"`
	EditedAt           time.Time       `json:"edited_at"`
	Emojis             []Emoji         `json:"emojis"`
	RepliesCount       int64           `json:"replies_count"`
	ReblogsCount       int64           `json:"reblogs_count"`
	FavouritesCount    int64           `json:"favourites_count"`
	Reblogged          interface{}     `json:"reblogged"`
	Favourited         interface{}     `json:"favourited"`
	Bookmarked         interface{}     `json:"bookmarked"`
	Muted              interface{}     `json:"muted"`
	Sensitive          bool            `json:"sensitive"`
	SpoilerText        string          `json:"spoiler_text"`
	Visibility         string          `json:"visibility"`
	MediaAttachments   []Attachment    `json:"media_attachments"`
	Mentions           []Mention       `json:"mentions"`
	Tags               []Tag           `json:"tags"`
	Card               *Card           `json:"card"`
	Poll               *Poll           `json:"poll"`
	Application        Application     `json:"application"`
	Language           string          `json:"language"`
	Pinned             interface{}     `json:"pinned"`
	ScheduledParams    ScheduledParams `json:"params"`
}

Status is struct to hold status.

type StatusHistory added in v0.0.8

type StatusHistory struct {
	Content          string       `json:"content"`
	SpoilerText      string       `json:"spoiler_text"`
	Account          Account      `json:"account"`
	Sensitive        bool         `json:"sensitive"`
	CreatedAt        time.Time    `json:"created_at"`
	Emojis           []Emoji      `json:"emojis"`
	MediaAttachments []Attachment `json:"media_attachments"`
}

StatusHistory is a struct to hold status history data.

type Stream

type Stream struct {
	Event   string      `json:"event"`
	Payload interface{} `json:"payload"`
}

Stream is a struct of data that flows in streaming.

type Tag

type Tag struct {
	Name    string    `json:"name"`
	URL     string    `json:"url"`
	History []History `json:"history"`
}

Tag hold information for tag.

type Toot

type Toot struct {
	Status      string     `json:"status"`
	InReplyToID ID         `json:"in_reply_to_id"`
	MediaIDs    []ID       `json:"media_ids"`
	Sensitive   bool       `json:"sensitive"`
	SpoilerText string     `json:"spoiler_text"`
	Visibility  string     `json:"visibility"`
	Language    string     `json:"language"`
	ScheduledAt *time.Time `json:"scheduled_at,omitempty"`
	Poll        *TootPoll  `json:"poll"`
}

Toot is a struct to post status.

type TootPoll added in v0.0.5

type TootPoll struct {
	Options          []string `json:"options"`
	ExpiresInSeconds int64    `json:"expires_in"`
	Multiple         bool     `json:"multiple"`
	HideTotals       bool     `json:"hide_totals"`
}

TootPoll holds information for creating a poll in Toot.

type UnixTimeString added in v0.0.8

type UnixTimeString struct {
	time.Time
}

UnixTimeString represents a time in a Unix Epoch string

func (*UnixTimeString) UnmarshalJSON added in v0.0.8

func (u *UnixTimeString) UnmarshalJSON(b []byte) error

type Unixtime added in v0.0.3

type Unixtime time.Time

func (*Unixtime) UnmarshalJSON added in v0.0.3

func (t *Unixtime) UnmarshalJSON(data []byte) error

type UpdateEditEvent added in v0.0.8

type UpdateEditEvent struct {
	Status *Status `json:"status"`
}

UpdateEditEvent is a struct for passing status edit event to app.

type UpdateEvent

type UpdateEvent struct {
	Status *Status `json:"status"`
}

UpdateEvent is a struct for passing status event to app.

type WSClient

type WSClient struct {
	websocket.Dialer
	// contains filtered or unexported fields
}

WSClient is a WebSocket client.

func (*WSClient) StreamingWSHashtag

func (c *WSClient) StreamingWSHashtag(ctx context.Context, tag string, isLocal bool) (chan Event, error)

StreamingWSHashtag return channel to read events on tagged timeline using WebSocket.

func (*WSClient) StreamingWSList added in v0.0.4

func (c *WSClient) StreamingWSList(ctx context.Context, id ID) (chan Event, error)

StreamingWSList return channel to read events on a list using WebSocket.

func (*WSClient) StreamingWSPublic

func (c *WSClient) StreamingWSPublic(ctx context.Context, isLocal bool) (chan Event, error)

StreamingWSPublic return channel to read events on public using WebSocket.

func (*WSClient) StreamingWSUser

func (c *WSClient) StreamingWSUser(ctx context.Context) (chan Event, error)

StreamingWSUser return channel to read events on home using WebSocket.

type WeeklyActivity added in v0.0.3

type WeeklyActivity struct {
	Week          Unixtime `json:"week"`
	Statuses      int64    `json:"statuses,string"`
	Logins        int64    `json:"logins,string"`
	Registrations int64    `json:"registrations,string"`
}

WeeklyActivity holds information for mastodon weekly activity.

Directories

Path Synopsis
cmd
mstdn Module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL