aboutsummaryrefslogtreecommitdiff
path: root/mastodon/filter.go
blob: 55beac1b87090fe6d07dc535fdfea92220c354c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package mastodon

import (
	"context"
	"fmt"
	"net/http"
	"net/url"
	"strconv"
	"time"
)

type Filter struct {
	ID           string     `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"`
}

func (c *Client) GetFilters(ctx context.Context) ([]*Filter, error) {
	var filters []*Filter
	err := c.doAPI(ctx, http.MethodGet, "/api/v1/filters", nil, &filters, nil)
	if err != nil {
		return nil, err
	}
	return filters, nil
}

func (c *Client) AddFilter(ctx context.Context, phrase string, context []string, irreversible bool, wholeWord bool, expiresIn *time.Time) error {
	params := url.Values{}
	params.Set("phrase", phrase)
	for i := range context {
		params.Add("context[]", context[i])
	}
	params.Set("irreversible", strconv.FormatBool(irreversible))
	params.Set("whole_word", strconv.FormatBool(wholeWord))
	if expiresIn != nil {
		params.Set("expires_in", expiresIn.Format(time.RFC3339))
	}
	err := c.doAPI(ctx, http.MethodPost, "/api/v1/filters", params, nil, nil)
	if err != nil {
		return err
	}
	return nil
}

func (c *Client) RemoveFilter(ctx context.Context, id string) error {
	return c.doAPI(ctx, http.MethodDelete, fmt.Sprintf("/api/v1/filters/%s", id), nil, nil, nil)
}