package mastodon import ( "fmt" "net/http" "net/url" "time" ) 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"` } func (p *Poll) GetID() string { if p != nil { return string(p.ID) } else { return "" } } type PollOption struct { Title string `json:"title"` VotesCount int64 `json:"votes_count"` } func GetPoll(id ID) (*Poll, error) { var poll Poll err := doAPI(http.MethodGet, fmt.Sprintf("/api/v1/polls/%s", id), nil, &poll, nil) if err != nil { return nil, err } return &poll, nil } func (p *Poll) Vote(choices ...int) (*Poll, error) { params := url.Values{} for _, c := range choices { params.Add("choices[]", fmt.Sprintf("%d", c)) } var poll Poll err := doAPI(http.MethodPost, fmt.Sprintf("/api/v1/polls/%s/votes", url.PathEscape(p.GetID())), params, &poll, nil) if err != nil { return nil, err } return &poll, nil }