package mastodon import ( "fmt" "net/http" "net/url" ) // List is metadata for a list of users. type List struct { ID ID `json:"id"` Title string `json:"title"` } func GetLists() ([]*List, error) { var lists []*List err := doAPI(http.MethodGet, "/api/v1/lists", nil, &lists, nil) if err != nil { return nil, err } return lists, nil } // GetAccountLists returns the lists containing a given account. func GetListWithAccount(id ID) ([]*List, error) { var lists []*List err := doAPI(http.MethodGet, fmt.Sprintf("/api/v1/accounts/%s/lists", url.PathEscape(string(id))), nil, &lists, nil) if err != nil { return nil, err } return lists, nil } func GetAccountsInList(list *List) ([]*Account, error) { var accounts []*Account err := doAPI(http.MethodGet, fmt.Sprintf("/api/v1/lists/%s/accounts", url.PathEscape(string(list.ID))), url.Values{"limit": {"0"}}, &accounts, nil) if err != nil { return nil, err } return accounts, nil } func GetList(id ID) (*List, error) { var list List err := doAPI(http.MethodGet, fmt.Sprintf("/api/v1/lists/%s", url.PathEscape(string(id))), nil, &list, nil) if err != nil { return nil, err } return &list, nil } func CreateList(title string) (*List, error) { params := url.Values{} params.Set("title", title) var list List err := doAPI(http.MethodPost, "/api/v1/lists", params, &list, nil) if err != nil { return nil, err } return &list, nil } func RenameList(list *List, newTitle string) error { params := url.Values{} params.Set("title", newTitle) return doAPI(http.MethodPut, fmt.Sprintf("/api/v1/lists/%s", url.PathEscape(string(list.ID))), params, nil, nil) } func DeleteList(id ID) error { return doAPI(http.MethodDelete, fmt.Sprintf("/api/v1/lists/%s", url.PathEscape(string(id))), nil, nil, nil) } // AddToList adds accounts to a list. // // Only accounts already followed by the user can be added to a list. func AddToList(list ID, accounts ...ID) error { params := url.Values{} for _, acct := range accounts { params.Add("account_ids", string(acct)) } return doAPI(http.MethodPost, fmt.Sprintf("/api/v1/lists/%s/accounts", url.PathEscape(string(list))), params, nil, nil) } func RemoveFromList(list ID, accounts ...ID) error { params := url.Values{} for _, acct := range accounts { params.Add("account_ids", string(acct)) } return doAPI(http.MethodDelete, fmt.Sprintf("/api/v1/lists/%s/accounts", url.PathEscape(string(list))), params, nil, nil) }