...

Source file src/github.com/google/go-github/v45/github/reactions.go

Documentation: github.com/google/go-github/v45/github

     1  // Copyright 2016 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"fmt"
    11  	"net/http"
    12  )
    13  
    14  // ReactionsService provides access to the reactions-related functions in the
    15  // GitHub API.
    16  //
    17  // GitHub API docs: https://docs.github.com/en/rest/reactions
    18  type ReactionsService service
    19  
    20  // Reaction represents a GitHub reaction.
    21  type Reaction struct {
    22  	// ID is the Reaction ID.
    23  	ID     *int64  `json:"id,omitempty"`
    24  	User   *User   `json:"user,omitempty"`
    25  	NodeID *string `json:"node_id,omitempty"`
    26  	// Content is the type of reaction.
    27  	// Possible values are:
    28  	//     "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
    29  	Content *string `json:"content,omitempty"`
    30  }
    31  
    32  // Reactions represents a summary of GitHub reactions.
    33  type Reactions struct {
    34  	TotalCount *int    `json:"total_count,omitempty"`
    35  	PlusOne    *int    `json:"+1,omitempty"`
    36  	MinusOne   *int    `json:"-1,omitempty"`
    37  	Laugh      *int    `json:"laugh,omitempty"`
    38  	Confused   *int    `json:"confused,omitempty"`
    39  	Heart      *int    `json:"heart,omitempty"`
    40  	Hooray     *int    `json:"hooray,omitempty"`
    41  	Rocket     *int    `json:"rocket,omitempty"`
    42  	Eyes       *int    `json:"eyes,omitempty"`
    43  	URL        *string `json:"url,omitempty"`
    44  }
    45  
    46  func (r Reaction) String() string {
    47  	return Stringify(r)
    48  }
    49  
    50  // ListCommentReactionOptions specifies the optional parameters to the
    51  // ReactionsService.ListCommentReactions method.
    52  type ListCommentReactionOptions struct {
    53  	// Content restricts the returned comment reactions to only those with the given type.
    54  	// Omit this parameter to list all reactions to a commit comment.
    55  	// Possible values are: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
    56  	Content string `url:"content,omitempty"`
    57  
    58  	ListOptions
    59  }
    60  
    61  // ListCommentReactions lists the reactions for a commit comment.
    62  //
    63  // GitHub API docs: https://docs.github.com/en/rest/reactions#list-reactions-for-a-commit-comment
    64  func (s *ReactionsService) ListCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListCommentReactionOptions) ([]*Reaction, *Response, error) {
    65  	u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id)
    66  	u, err := addOptions(u, opts)
    67  	if err != nil {
    68  		return nil, nil, err
    69  	}
    70  
    71  	req, err := s.client.NewRequest("GET", u, nil)
    72  	if err != nil {
    73  		return nil, nil, err
    74  	}
    75  
    76  	// TODO: remove custom Accept headers when APIs fully launch.
    77  	req.Header.Set("Accept", mediaTypeReactionsPreview)
    78  
    79  	var m []*Reaction
    80  	resp, err := s.client.Do(ctx, req, &m)
    81  	if err != nil {
    82  		return nil, resp, err
    83  	}
    84  
    85  	return m, resp, nil
    86  }
    87  
    88  // CreateCommentReaction creates a reaction for a commit comment.
    89  // Note that if you have already created a reaction of type content, the
    90  // previously created reaction will be returned with Status: 200 OK.
    91  // The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
    92  //
    93  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-a-commit-comment
    94  func (s *ReactionsService) CreateCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
    95  	u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id)
    96  
    97  	body := &Reaction{Content: String(content)}
    98  	req, err := s.client.NewRequest("POST", u, body)
    99  	if err != nil {
   100  		return nil, nil, err
   101  	}
   102  
   103  	// TODO: remove custom Accept headers when APIs fully launch.
   104  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   105  
   106  	m := &Reaction{}
   107  	resp, err := s.client.Do(ctx, req, m)
   108  	if err != nil {
   109  		return nil, resp, err
   110  	}
   111  
   112  	return m, resp, nil
   113  }
   114  
   115  // DeleteCommentReaction deletes the reaction for a commit comment.
   116  //
   117  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-a-commit-comment-reaction
   118  func (s *ReactionsService) DeleteCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
   119  	u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
   120  
   121  	return s.deleteReaction(ctx, u)
   122  }
   123  
   124  // DeleteCommentReactionByID deletes the reaction for a commit comment by repository ID.
   125  //
   126  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-a-commit-comment-reaction
   127  func (s *ReactionsService) DeleteCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
   128  	u := fmt.Sprintf("repositories/%v/comments/%v/reactions/%v", repoID, commentID, reactionID)
   129  
   130  	return s.deleteReaction(ctx, u)
   131  }
   132  
   133  // ListIssueReactions lists the reactions for an issue.
   134  //
   135  // GitHub API docs: https://docs.github.com/en/rest/reactions#list-reactions-for-an-issue
   136  func (s *ReactionsService) ListIssueReactions(ctx context.Context, owner, repo string, number int, opts *ListOptions) ([]*Reaction, *Response, error) {
   137  	u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number)
   138  	u, err := addOptions(u, opts)
   139  	if err != nil {
   140  		return nil, nil, err
   141  	}
   142  
   143  	req, err := s.client.NewRequest("GET", u, nil)
   144  	if err != nil {
   145  		return nil, nil, err
   146  	}
   147  
   148  	// TODO: remove custom Accept headers when APIs fully launch.
   149  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   150  
   151  	var m []*Reaction
   152  	resp, err := s.client.Do(ctx, req, &m)
   153  	if err != nil {
   154  		return nil, resp, err
   155  	}
   156  
   157  	return m, resp, nil
   158  }
   159  
   160  // CreateIssueReaction creates a reaction for an issue.
   161  // Note that if you have already created a reaction of type content, the
   162  // previously created reaction will be returned with Status: 200 OK.
   163  // The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
   164  //
   165  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-an-issue
   166  func (s *ReactionsService) CreateIssueReaction(ctx context.Context, owner, repo string, number int, content string) (*Reaction, *Response, error) {
   167  	u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number)
   168  
   169  	body := &Reaction{Content: String(content)}
   170  	req, err := s.client.NewRequest("POST", u, body)
   171  	if err != nil {
   172  		return nil, nil, err
   173  	}
   174  
   175  	// TODO: remove custom Accept headers when APIs fully launch.
   176  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   177  
   178  	m := &Reaction{}
   179  	resp, err := s.client.Do(ctx, req, m)
   180  	if err != nil {
   181  		return nil, resp, err
   182  	}
   183  
   184  	return m, resp, nil
   185  }
   186  
   187  // DeleteIssueReaction deletes the reaction to an issue.
   188  //
   189  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-an-issue-reaction
   190  func (s *ReactionsService) DeleteIssueReaction(ctx context.Context, owner, repo string, issueNumber int, reactionID int64) (*Response, error) {
   191  	url := fmt.Sprintf("repos/%v/%v/issues/%v/reactions/%v", owner, repo, issueNumber, reactionID)
   192  
   193  	return s.deleteReaction(ctx, url)
   194  }
   195  
   196  // DeleteIssueReactionByID deletes the reaction to an issue by repository ID.
   197  //
   198  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-an-issue-reaction
   199  func (s *ReactionsService) DeleteIssueReactionByID(ctx context.Context, repoID, issueNumber int, reactionID int64) (*Response, error) {
   200  	url := fmt.Sprintf("repositories/%v/issues/%v/reactions/%v", repoID, issueNumber, reactionID)
   201  
   202  	return s.deleteReaction(ctx, url)
   203  }
   204  
   205  // ListIssueCommentReactions lists the reactions for an issue comment.
   206  //
   207  // GitHub API docs: https://docs.github.com/en/rest/reactions#list-reactions-for-an-issue-comment
   208  func (s *ReactionsService) ListIssueCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListOptions) ([]*Reaction, *Response, error) {
   209  	u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id)
   210  	u, err := addOptions(u, opts)
   211  	if err != nil {
   212  		return nil, nil, err
   213  	}
   214  
   215  	req, err := s.client.NewRequest("GET", u, nil)
   216  	if err != nil {
   217  		return nil, nil, err
   218  	}
   219  
   220  	// TODO: remove custom Accept headers when APIs fully launch.
   221  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   222  
   223  	var m []*Reaction
   224  	resp, err := s.client.Do(ctx, req, &m)
   225  	if err != nil {
   226  		return nil, resp, err
   227  	}
   228  
   229  	return m, resp, nil
   230  }
   231  
   232  // CreateIssueCommentReaction creates a reaction for an issue comment.
   233  // Note that if you have already created a reaction of type content, the
   234  // previously created reaction will be returned with Status: 200 OK.
   235  // The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
   236  //
   237  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-an-issue-comment
   238  func (s *ReactionsService) CreateIssueCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
   239  	u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id)
   240  
   241  	body := &Reaction{Content: String(content)}
   242  	req, err := s.client.NewRequest("POST", u, body)
   243  	if err != nil {
   244  		return nil, nil, err
   245  	}
   246  
   247  	// TODO: remove custom Accept headers when APIs fully launch.
   248  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   249  
   250  	m := &Reaction{}
   251  	resp, err := s.client.Do(ctx, req, m)
   252  	if err != nil {
   253  		return nil, resp, err
   254  	}
   255  
   256  	return m, resp, nil
   257  }
   258  
   259  // DeleteIssueCommentReaction deletes the reaction to an issue comment.
   260  //
   261  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-an-issue-comment-reaction
   262  func (s *ReactionsService) DeleteIssueCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
   263  	url := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
   264  
   265  	return s.deleteReaction(ctx, url)
   266  }
   267  
   268  // DeleteIssueCommentReactionByID deletes the reaction to an issue comment by repository ID.
   269  //
   270  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-an-issue-comment-reaction
   271  func (s *ReactionsService) DeleteIssueCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
   272  	url := fmt.Sprintf("repositories/%v/issues/comments/%v/reactions/%v", repoID, commentID, reactionID)
   273  
   274  	return s.deleteReaction(ctx, url)
   275  }
   276  
   277  // ListPullRequestCommentReactions lists the reactions for a pull request review comment.
   278  //
   279  // GitHub API docs: https://docs.github.com/en/rest/reactions#list-reactions-for-a-pull-request-review-comment
   280  func (s *ReactionsService) ListPullRequestCommentReactions(ctx context.Context, owner, repo string, id int64, opts *ListOptions) ([]*Reaction, *Response, error) {
   281  	u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id)
   282  	u, err := addOptions(u, opts)
   283  	if err != nil {
   284  		return nil, nil, err
   285  	}
   286  
   287  	req, err := s.client.NewRequest("GET", u, nil)
   288  	if err != nil {
   289  		return nil, nil, err
   290  	}
   291  
   292  	// TODO: remove custom Accept headers when APIs fully launch.
   293  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   294  
   295  	var m []*Reaction
   296  	resp, err := s.client.Do(ctx, req, &m)
   297  	if err != nil {
   298  		return nil, resp, err
   299  	}
   300  
   301  	return m, resp, nil
   302  }
   303  
   304  // CreatePullRequestCommentReaction creates a reaction for a pull request review comment.
   305  // Note that if you have already created a reaction of type content, the
   306  // previously created reaction will be returned with Status: 200 OK.
   307  // The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
   308  //
   309  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-a-pull-request-review-comment
   310  func (s *ReactionsService) CreatePullRequestCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) {
   311  	u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id)
   312  
   313  	body := &Reaction{Content: String(content)}
   314  	req, err := s.client.NewRequest("POST", u, body)
   315  	if err != nil {
   316  		return nil, nil, err
   317  	}
   318  
   319  	// TODO: remove custom Accept headers when APIs fully launch.
   320  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   321  
   322  	m := &Reaction{}
   323  	resp, err := s.client.Do(ctx, req, m)
   324  	if err != nil {
   325  		return nil, resp, err
   326  	}
   327  
   328  	return m, resp, nil
   329  }
   330  
   331  // DeletePullRequestCommentReaction deletes the reaction to a pull request review comment.
   332  //
   333  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-a-pull-request-comment-reaction
   334  func (s *ReactionsService) DeletePullRequestCommentReaction(ctx context.Context, owner, repo string, commentID, reactionID int64) (*Response, error) {
   335  	url := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions/%v", owner, repo, commentID, reactionID)
   336  
   337  	return s.deleteReaction(ctx, url)
   338  }
   339  
   340  // DeletePullRequestCommentReactionByID deletes the reaction to a pull request review comment by repository ID.
   341  //
   342  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-a-pull-request-comment-reaction
   343  func (s *ReactionsService) DeletePullRequestCommentReactionByID(ctx context.Context, repoID, commentID, reactionID int64) (*Response, error) {
   344  	url := fmt.Sprintf("repositories/%v/pulls/comments/%v/reactions/%v", repoID, commentID, reactionID)
   345  
   346  	return s.deleteReaction(ctx, url)
   347  }
   348  
   349  // ListTeamDiscussionReactions lists the reactions for a team discussion.
   350  //
   351  // GitHub API docs: https://docs.github.com/en/rest/reactions#list-reactions-for-a-team-discussion-legacy
   352  func (s *ReactionsService) ListTeamDiscussionReactions(ctx context.Context, teamID int64, discussionNumber int, opts *ListOptions) ([]*Reaction, *Response, error) {
   353  	u := fmt.Sprintf("teams/%v/discussions/%v/reactions", teamID, discussionNumber)
   354  	u, err := addOptions(u, opts)
   355  	if err != nil {
   356  		return nil, nil, err
   357  	}
   358  
   359  	req, err := s.client.NewRequest("GET", u, nil)
   360  	if err != nil {
   361  		return nil, nil, err
   362  	}
   363  
   364  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   365  
   366  	var m []*Reaction
   367  	resp, err := s.client.Do(ctx, req, &m)
   368  	if err != nil {
   369  		return nil, resp, err
   370  	}
   371  
   372  	return m, resp, nil
   373  }
   374  
   375  // CreateTeamDiscussionReaction creates a reaction for a team discussion.
   376  // The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
   377  //
   378  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-a-team-discussion-legacy
   379  func (s *ReactionsService) CreateTeamDiscussionReaction(ctx context.Context, teamID int64, discussionNumber int, content string) (*Reaction, *Response, error) {
   380  	u := fmt.Sprintf("teams/%v/discussions/%v/reactions", teamID, discussionNumber)
   381  
   382  	body := &Reaction{Content: String(content)}
   383  	req, err := s.client.NewRequest("POST", u, body)
   384  	if err != nil {
   385  		return nil, nil, err
   386  	}
   387  
   388  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   389  
   390  	m := &Reaction{}
   391  	resp, err := s.client.Do(ctx, req, m)
   392  	if err != nil {
   393  		return nil, resp, err
   394  	}
   395  
   396  	return m, resp, nil
   397  }
   398  
   399  // DeleteTeamDiscussionReaction deletes the reaction to a team discussion.
   400  //
   401  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-team-discussion-reaction
   402  func (s *ReactionsService) DeleteTeamDiscussionReaction(ctx context.Context, org, teamSlug string, discussionNumber int, reactionID int64) (*Response, error) {
   403  	url := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/reactions/%v", org, teamSlug, discussionNumber, reactionID)
   404  
   405  	return s.deleteReaction(ctx, url)
   406  }
   407  
   408  // DeleteTeamDiscussionReactionByOrgIDAndTeamID deletes the reaction to a team discussion by organization ID and team ID.
   409  //
   410  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-a-team-discussion
   411  func (s *ReactionsService) DeleteTeamDiscussionReactionByOrgIDAndTeamID(ctx context.Context, orgID, teamID, discussionNumber int, reactionID int64) (*Response, error) {
   412  	url := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/reactions/%v", orgID, teamID, discussionNumber, reactionID)
   413  
   414  	return s.deleteReaction(ctx, url)
   415  }
   416  
   417  // ListTeamDiscussionCommentReactions lists the reactions for a team discussion comment.
   418  //
   419  // GitHub API docs: https://docs.github.com/en/rest/reactions#list-reactions-for-a-team-discussion-comment-legacy
   420  func (s *ReactionsService) ListTeamDiscussionCommentReactions(ctx context.Context, teamID int64, discussionNumber, commentNumber int, opts *ListOptions) ([]*Reaction, *Response, error) {
   421  	u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v/reactions", teamID, discussionNumber, commentNumber)
   422  	u, err := addOptions(u, opts)
   423  	if err != nil {
   424  		return nil, nil, err
   425  	}
   426  
   427  	req, err := s.client.NewRequest("GET", u, nil)
   428  	if err != nil {
   429  		return nil, nil, err
   430  	}
   431  
   432  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   433  
   434  	var m []*Reaction
   435  	resp, err := s.client.Do(ctx, req, &m)
   436  	if err != nil {
   437  		return nil, resp, err
   438  	}
   439  	return m, resp, nil
   440  }
   441  
   442  // CreateTeamDiscussionCommentReaction creates a reaction for a team discussion comment.
   443  // The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
   444  //
   445  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-a-team-discussion-comment-legacy
   446  func (s *ReactionsService) CreateTeamDiscussionCommentReaction(ctx context.Context, teamID int64, discussionNumber, commentNumber int, content string) (*Reaction, *Response, error) {
   447  	u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v/reactions", teamID, discussionNumber, commentNumber)
   448  
   449  	body := &Reaction{Content: String(content)}
   450  	req, err := s.client.NewRequest("POST", u, body)
   451  	if err != nil {
   452  		return nil, nil, err
   453  	}
   454  
   455  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   456  
   457  	m := &Reaction{}
   458  	resp, err := s.client.Do(ctx, req, m)
   459  	if err != nil {
   460  		return nil, resp, err
   461  	}
   462  
   463  	return m, resp, nil
   464  }
   465  
   466  // DeleteTeamDiscussionCommentReaction deletes the reaction to a team discussion comment.
   467  //
   468  // GitHub API docs: https://docs.github.com/en/rest/reactions#delete-team-discussion-comment-reaction
   469  func (s *ReactionsService) DeleteTeamDiscussionCommentReaction(ctx context.Context, org, teamSlug string, discussionNumber, commentNumber int, reactionID int64) (*Response, error) {
   470  	url := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v/comments/%v/reactions/%v", org, teamSlug, discussionNumber, commentNumber, reactionID)
   471  
   472  	return s.deleteReaction(ctx, url)
   473  }
   474  
   475  // DeleteTeamDiscussionCommentReactionByOrgIDAndTeamID deletes the reaction to a team discussion comment by organization ID and team ID.
   476  //
   477  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-a-team-discussion-comment
   478  func (s *ReactionsService) DeleteTeamDiscussionCommentReactionByOrgIDAndTeamID(ctx context.Context, orgID, teamID, discussionNumber, commentNumber int, reactionID int64) (*Response, error) {
   479  	url := fmt.Sprintf("organizations/%v/team/%v/discussions/%v/comments/%v/reactions/%v", orgID, teamID, discussionNumber, commentNumber, reactionID)
   480  
   481  	return s.deleteReaction(ctx, url)
   482  }
   483  
   484  func (s *ReactionsService) deleteReaction(ctx context.Context, url string) (*Response, error) {
   485  	req, err := s.client.NewRequest(http.MethodDelete, url, nil)
   486  	if err != nil {
   487  		return nil, err
   488  	}
   489  
   490  	// TODO: remove custom Accept headers when APIs fully launch.
   491  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   492  
   493  	return s.client.Do(ctx, req, nil)
   494  }
   495  
   496  // Create a reaction to a release.
   497  // Note that a response with a Status: 200 OK means that you already
   498  // added the reaction type to this release.
   499  // The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
   500  //
   501  // GitHub API docs: https://docs.github.com/en/rest/reactions#create-reaction-for-a-release
   502  func (s *ReactionsService) CreateReleaseReaction(ctx context.Context, owner, repo string, releaseID int64, content string) (*Reaction, *Response, error) {
   503  	u := fmt.Sprintf("repos/%v/%v/releases/%v/reactions", owner, repo, releaseID)
   504  
   505  	body := &Reaction{Content: String(content)}
   506  	req, err := s.client.NewRequest("POST", u, body)
   507  	if err != nil {
   508  		return nil, nil, err
   509  	}
   510  
   511  	req.Header.Set("Accept", mediaTypeReactionsPreview)
   512  
   513  	m := &Reaction{}
   514  	resp, err := s.client.Do(ctx, req, m)
   515  	if err != nil {
   516  		return nil, resp, err
   517  	}
   518  
   519  	return m, resp, nil
   520  }
   521  

View as plain text