go-mastodon/polls.go
2022-11-20 21:31:59 +01:00

58 lines
1.2 KiB
Go

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
}