bloat/mastodon/filter.go

51 lines
1.3 KiB
Go

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)
}