diff --git a/reddit/moderation.go b/reddit/moderation.go index 679f3aa..9300d9a 100644 --- a/reddit/moderation.go +++ b/reddit/moderation.go @@ -438,3 +438,57 @@ func (s *ModerationService) deleteRelationship(ctx context.Context, subreddit, u return s.client.Do(ctx, req, nil) } + +// Distinguish your post or comment via its full ID, adding a moderator tag to it. +// todo: add how=admin and how=special? They require special privileges. +func (s *ModerationService) Distinguish(ctx context.Context, id string) (*Response, error) { + path := "api/distinguish" + + form := url.Values{} + form.Set("api_type", "json") + form.Set("how", "yes") + form.Set("id", id) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// DistinguishAndSticky your comment via its full ID, adding a moderator tag to it +// and stickying the comment at the top of the thread. +func (s *ModerationService) DistinguishAndSticky(ctx context.Context, id string) (*Response, error) { + path := "api/distinguish" + + form := url.Values{} + form.Set("api_type", "json") + form.Set("how", "yes") + form.Set("sticky", "true") + form.Set("id", id) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// Undistinguish your post or comment via its full ID, removing the moderator tag from it. +func (s *ModerationService) Undistinguish(ctx context.Context, id string) (*Response, error) { + path := "api/distinguish" + + form := url.Values{} + form.Set("api_type", "json") + form.Set("how", "no") + form.Set("id", id) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/reddit/moderation_test.go b/reddit/moderation_test.go index 7ed4806..7d59afa 100644 --- a/reddit/moderation_test.go +++ b/reddit/moderation_test.go @@ -666,3 +666,67 @@ func TestModerationService_UnapproveUserWiki(t *testing.T) { _, err := client.Moderation.UnapproveUserWiki(ctx, "testsubreddit", "testuser") require.NoError(t, err) } + +func TestModerationService_Distinguish(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc("/api/distinguish", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("how", "yes") + form.Set("id", "t1_123") + + err := r.ParseForm() + require.NoError(t, err) + require.Equal(t, form, r.PostForm) + }) + + _, err := client.Moderation.Distinguish(ctx, "t1_123") + require.NoError(t, err) +} + +func TestModerationService_DistinguishAndSticky(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc("/api/distinguish", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("how", "yes") + form.Set("sticky", "true") + form.Set("id", "t1_123") + + err := r.ParseForm() + require.NoError(t, err) + require.Equal(t, form, r.PostForm) + }) + + _, err := client.Moderation.DistinguishAndSticky(ctx, "t1_123") + require.NoError(t, err) +} + +func TestModerationService_Undistinguish(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc("/api/distinguish", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("how", "no") + form.Set("id", "t1_123") + + err := r.ParseForm() + require.NoError(t, err) + require.Equal(t, form, r.PostForm) + }) + + _, err := client.Moderation.Undistinguish(ctx, "t1_123") + require.NoError(t, err) +}