aboutsummaryrefslogtreecommitdiff
path: root/mastodon/poll.go
diff options
context:
space:
mode:
Diffstat (limited to 'mastodon/poll.go')
-rw-r--r--mastodon/poll.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/mastodon/poll.go b/mastodon/poll.go
new file mode 100644
index 0000000..274b95e
--- /dev/null
+++ b/mastodon/poll.go
@@ -0,0 +1,38 @@
+package mastodon
+
+import (
+ "context"
+ "fmt"
+ "net/http"
+ "net/url"
+ "time"
+)
+
+type Poll struct {
+ ID string `json:"id"`
+ ExpiresAt time.Time `json:"expires_at"`
+ Expired bool `json:"expired"`
+ Multiple bool `json:"multiple"`
+ VotesCount int64 `json:"votes_count"`
+ Voted bool `json:"voted"`
+ Emojis []Emoji `json:"emojis"`
+ Options []PollOption `json:"options"`
+}
+
+// Poll hold information for a mastodon poll option.
+type PollOption struct {
+ Title string `json:"title"`
+ VotesCount int64 `json:"votes_count"`
+}
+
+// Vote submits a vote with given choices to the poll specified by id.
+func (c *Client) Vote(ctx context.Context, id string, choices []string) (*Poll, error) {
+ var poll Poll
+ params := make(url.Values)
+ params["choices[]"] = choices
+ err := c.doAPI(ctx, http.MethodPost, fmt.Sprintf("/api/v1/polls/%s/votes", id), params, &poll, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &poll, nil
+}