Repository: hub4j/github-api
Pull request #1319 (2021-11-23 12:35:30)

Add support for the Discussion payload
One thing that is a bit specific is that the Discussion object present
in the payload is coming from the GraphQL API and the Discussions API is
only available in the GraphQL API.

Note: I haven't implemented `discussion_comment` for now as the object is more complex and I don't really need it for now.

codecov[bot]: # [Codecov](https://codecov.io/gh/hub4j/github-api/pull/1319?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j) Report
> Merging [#1319](https://codecov.io/gh/hub4j/github-api/pull/1319?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j) (d1b1dbe) into [main](https://codecov.io/gh/hub4j/github-api/commit/7df326e6d4d4e9dbfe52c01a070adbe1cfedd8b4?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j) (7df326e) will **increase** coverage by `0.09%`.
> The diff coverage is `87.80%`.

[![Impacted file tree graph](https://codecov.io/gh/hub4j/github-api/pull/1319/graphs/tree.svg?width=650&height=150&src=pr&token=j1jQqydZLJ&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j)](https://codecov.io/gh/hub4j/github-api/pull/1319?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j)

```diff
@@             Coverage Diff              @@
##               main    #1319      +/-   ##
============================================
+ Coverage     78.02%   78.11%   +0.09%     
- Complexity     2027     2048      +21     
============================================
  Files           199      200       +1     
  Lines          6243     6284      +41     
  Branches        356      356              
============================================
+ Hits           4871     4909      +38     
- Misses         1162     1166       +4     
+ Partials        210      209       -1     
```


| [Impacted Files](https://codecov.io/gh/hub4j/github-api/pull/1319?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j) | Coverage Δ | |
|---|---|---|
| [...ain/java/org/kohsuke/github/GraphQLDiscussion.java](https://codecov.io/gh/hub4j/github-api/pull/1319/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j#diff-c3JjL21haW4vamF2YS9vcmcva29oc3VrZS9naXRodWIvR3JhcGhRTERpc2N1c3Npb24uamF2YQ==) | `86.84% <86.84%> (ø)` | |
| [...c/main/java/org/kohsuke/github/GHEventPayload.java](https://codecov.io/gh/hub4j/github-api/pull/1319/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j#diff-c3JjL21haW4vamF2YS9vcmcva29oc3VrZS9naXRodWIvR0hFdmVudFBheWxvYWQuamF2YQ==) | `79.91% <100.00%> (+0.26%)` | :arrow_up: |
| [src/main/java/org/kohsuke/github/GitHub.java](https://codecov.io/gh/hub4j/github-api/pull/1319/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j#diff-c3JjL21haW4vamF2YS9vcmcva29oc3VrZS9naXRodWIvR2l0SHViLmphdmE=) | `82.35% <0.00%> (+0.90%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/hub4j/github-api/pull/1319?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/hub4j/github-api/pull/1319?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j). Last update [7df326e...d1b1dbe](https://codecov.io/gh/hub4j/github-api/pull/1319?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=hub4j).

bitwiseman: Side note: 
The objects returned here are NOT the same as the GraphQL Discussion in some key ways - https://docs.github.com/en/graphql/reference/objects#discussion .  

For example, GraphQL has `id` as `ID!` which is a string - https://docs.github.com/en/graphql/reference/scalars#id  but these return `id` as `long` and have `node_id`. 😠 And you can't mix and match - REST API requires numeric ids while GraphQL requires `ID!` ids.  😡 😡 
gsmet: @bitwiseman I pushed some adjustments.

Patch:
diff --git a/src/main/java/org/kohsuke/github/GHEventPayload.java b/src/main/java/org/kohsuke/github/GHEventPayload.java
index 54f2a59ed..4d47264aa 100644
--- a/src/main/java/org/kohsuke/github/GHEventPayload.java
+++ b/src/main/java/org/kohsuke/github/GHEventPayload.java
@@ -1477,4 +1477,39 @@ public abstract class GHEventPayload extends GitHubInteractiveObject {
             return changes;
         }
     }
+
+    /**
+     * A discussion was created, edited, deleted, pinned, unpinned, locked, unlocked, transferred, category_changed,
+     * answered, or unanswered.
+     *
+     * @see <a href=
+     *      "https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#discussion">
+     *      discussion event</a>
+     */
+    public static class Discussion extends GHEventPayload {
+
+        private GHRepositoryDiscussion discussion;
+
+        private GHLabel label;
+
+        /**
+         * Gets discussion.
+         *
+         * @return the discussion
+         */
+        @SuppressFBWarnings(value = { "EI_EXPOSE_REP" }, justification = "Expected")
+        public GHRepositoryDiscussion getDiscussion() {
+            return discussion;
+        }
+
+        /**
+         * Gets the added or removed label for labeled/unlabeled events.
+         *
+         * @return label the added or removed label
+         */
+        @SuppressFBWarnings(value = { "EI_EXPOSE_REP" }, justification = "Expected")
+        public GHLabel getLabel() {
+            return label;
+        }
+    }
 }
diff --git a/src/main/java/org/kohsuke/github/GHRepositoryDiscussion.java b/src/main/java/org/kohsuke/github/GHRepositoryDiscussion.java
new file mode 100644
index 000000000..48abbd8e9
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHRepositoryDiscussion.java
@@ -0,0 +1,165 @@
+package org.kohsuke.github;
+
+import org.kohsuke.github.internal.EnumUtils;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Date;
+
+/**
+ * A discussion in the repository.
+ * <p>
+ * This is different from Teams discussions (see {@link GHDiscussion}).
+ * <p>
+ * The discussion event exposes the GraphQL object (more or less - the ids are handled differently for instance)
+ * directly. The new Discussions API is only available through GraphQL so for now you cannot execute any actions on this
+ * object.
+ *
+ * @author Guillaume Smet
+ * @see <a href="https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions#discussion">The GraphQL
+ *      API for Discussions</a>
+ */
+public class GHRepositoryDiscussion extends GHObject {
+
+    private Category category;
+
+    private String answerHtmlUrl;
+
+    private String answerChosenAt;
+    private GHUser answerChosenBy;
+    private String htmlUrl;
+
+    private int number;
+    private String title;
+    private GHUser user;
+    private String state;
+    private boolean locked;
+    private int comments;
+    private GHCommentAuthorAssociation authorAssociation;
+    private String activeLockReason;
+    private String body;
+    private String timelineUrl;
+
+    public Category getCategory() {
+        return category;
+    }
+
+    public URL getAnswerHtmlUrl() {
+        return GitHubClient.parseURL(answerHtmlUrl);
+    }
+
+    public Date getAnswerChosenAt() {
+        return GitHubClient.parseDate(answerChosenAt);
+    }
+
+    public GHUser getAnswerChosenBy() throws IOException {
+        return root().intern(answerChosenBy);
+    }
+
+    public URL getHtmlUrl() {
+        return GitHubClient.parseURL(htmlUrl);
+    }
+
+    public int getNumber() {
+        return number;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public GHUser getUser() throws IOException {
+        return root().intern(user);
+    }
+
+    public State getState() {
+        return EnumUtils.getEnumOrDefault(State.class, state, State.UNKNOWN);
+    }
+
+    public boolean isLocked() {
+        return locked;
+    }
+
+    public int getComments() {
+        return comments;
+    }
+
+    public GHCommentAuthorAssociation getAuthorAssociation() {
+        return authorAssociation;
+    }
+
+    public String getActiveLockReason() {
+        return activeLockReason;
+    }
+
+    public String getBody() {
+        return body;
+    }
+
+    public String getTimelineUrl() {
+        return timelineUrl;
+    }
+
+    /**
+     * Category of a discussion.
+     * <p>
+     * Note that while it is relatively close to the GraphQL objects, some of the fields such as the id are handled
+     * differently.
+     *
+     * @see <a href=
+     *      "https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions#discussioncategory">The
+     *      GraphQL API for Discussions</a>
+     */
+    public static class Category {
+
+        private long id;
+        private long repositoryId;
+        private String emoji;
+        private String name;
+        private String description;
+        private String createdAt;
+        private String updatedAt;
+        private String slug;
+        private boolean isAnswerable;
+
+        public long getId() {
+            return id;
+        }
+
+        public long getRepositoryId() {
+            return repositoryId;
+        }
+
+        public String getEmoji() {
+            return emoji;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public Date getCreatedAt() {
+            return GitHubClient.parseDate(createdAt);
+        }
+
+        public Date getUpdatedAt() {
+            return GitHubClient.parseDate(updatedAt);
+        }
+
+        public String getSlug() {
+            return slug;
+        }
+
+        public boolean isAnswerable() {
+            return isAnswerable;
+        }
+    }
+
+    public enum State {
+        OPEN, LOCKED, UNKNOWN;
+    }
+}


Test patch:
diff --git a/src/test/java/org/kohsuke/github/GHEventPayloadTest.java b/src/test/java/org/kohsuke/github/GHEventPayloadTest.java
index 44aa17884..ffc1c6bcd 100644
--- a/src/test/java/org/kohsuke/github/GHEventPayloadTest.java
+++ b/src/test/java/org/kohsuke/github/GHEventPayloadTest.java
@@ -919,4 +919,156 @@ public class GHEventPayloadTest extends AbstractGitHubWireMockTest {
         assertThat(label.isDefault(), is(false));
         assertThat(label.getDescription(), is("description"));
     }
+
+    @Test
+    public void discussion_created() throws Exception {
+        final GHEventPayload.Discussion discussionPayload = GitHub.offline()
+                .parseEventPayload(payload.asReader(), GHEventPayload.Discussion.class);
+
+        assertThat(discussionPayload.getAction(), is("created"));
+        assertThat(discussionPayload.getRepository().getFullName(), is("gsmet/quarkus-bot-java-playground"));
+        assertThat(discussionPayload.getSender().getLogin(), is("gsmet"));
+
+        GHRepositoryDiscussion discussion = discussionPayload.getDiscussion();
+
+        GHRepositoryDiscussion.Category category = discussion.getCategory();
+
+        assertThat(category.getId(), is(33522033L));
+        assertThat(category.getEmoji(), is(":pray:"));
+        assertThat(category.getName(), is("Q&A"));
+        assertThat(category.getDescription(), is("Ask the community for help"));
+        assertThat(category.getCreatedAt().getTime(), is(1636991431000L));
+        assertThat(category.getUpdatedAt().getTime(), is(1636991431000L));
+        assertThat(category.getSlug(), is("q-a"));
+        assertThat(category.isAnswerable(), is(true));
+
+        assertThat(discussion.getAnswerHtmlUrl(), is(nullValue()));
+        assertThat(discussion.getAnswerChosenAt(), is(nullValue()));
+        assertThat(discussion.getAnswerChosenBy(), is(nullValue()));
+
+        assertThat(discussion.getHtmlUrl().toString(),
+                is("https://github.com/gsmet/quarkus-bot-java-playground/discussions/78"));
+        assertThat(discussion.getId(), is(3698909L));
+        assertThat(discussion.getNodeId(), is("D_kwDOEq3cwc4AOHDd"));
+        assertThat(discussion.getNumber(), is(78));
+        assertThat(discussion.getTitle(), is("Title of discussion"));
+
+        assertThat(discussion.getUser().getLogin(), is("gsmet"));
+        assertThat(discussion.getUser().getId(), is(1279749L));
+        assertThat(discussion.getUser().getNodeId(), is("MDQ6VXNlcjEyNzk3NDk="));
+
+        assertThat(discussion.getState(), is(GHRepositoryDiscussion.State.OPEN));
+        assertThat(discussion.isLocked(), is(false));
+        assertThat(discussion.getComments(), is(0));
+        assertThat(discussion.getCreatedAt().getTime(), is(1637584949000L));
+        assertThat(discussion.getUpdatedAt().getTime(), is(1637584949000L));
+        assertThat(discussion.getAuthorAssociation(), is(GHCommentAuthorAssociation.OWNER));
+        assertThat(discussion.getActiveLockReason(), is(nullValue()));
+        assertThat(discussion.getBody(), is("Body of discussion."));
+    }
+
+    @Test
+    public void discussion_answered() throws Exception {
+        final GHEventPayload.Discussion discussionPayload = GitHub.offline()
+                .parseEventPayload(payload.asReader(), GHEventPayload.Discussion.class);
+
+        assertThat(discussionPayload.getAction(), is("answered"));
+        assertThat(discussionPayload.getRepository().getFullName(), is("gsmet/quarkus-bot-java-playground"));
+        assertThat(discussionPayload.getSender().getLogin(), is("gsmet"));
+
+        GHRepositoryDiscussion discussion = discussionPayload.getDiscussion();
+
+        GHRepositoryDiscussion.Category category = discussion.getCategory();
+
+        assertThat(category.getId(), is(33522033L));
+        assertThat(category.getEmoji(), is(":pray:"));
+        assertThat(category.getName(), is("Q&A"));
+        assertThat(category.getDescription(), is("Ask the community for help"));
+        assertThat(category.getCreatedAt().getTime(), is(1636991431000L));
+        assertThat(category.getUpdatedAt().getTime(), is(1636991431000L));
+        assertThat(category.getSlug(), is("q-a"));
+        assertThat(category.isAnswerable(), is(true));
+
+        assertThat(discussion.getAnswerHtmlUrl().toString(),
+                is("https://github.com/gsmet/quarkus-bot-java-playground/discussions/78#discussioncomment-1681242"));
+        assertThat(discussion.getAnswerChosenAt().getTime(), is(1637585047000L));
+        assertThat(discussion.getAnswerChosenBy().getLogin(), is("gsmet"));
+
+        assertThat(discussion.getHtmlUrl().toString(),
+                is("https://github.com/gsmet/quarkus-bot-java-playground/discussions/78"));
+        assertThat(discussion.getId(), is(3698909L));
+        assertThat(discussion.getNodeId(), is("D_kwDOEq3cwc4AOHDd"));
+        assertThat(discussion.getNumber(), is(78));
+        assertThat(discussion.getTitle(), is("Title of discussion"));
+
+        assertThat(discussion.getUser().getLogin(), is("gsmet"));
+        assertThat(discussion.getUser().getId(), is(1279749L));
+        assertThat(discussion.getUser().getNodeId(), is("MDQ6VXNlcjEyNzk3NDk="));
+
+        assertThat(discussion.getState(), is(GHRepositoryDiscussion.State.OPEN));
+        assertThat(discussion.isLocked(), is(false));
+        assertThat(discussion.getComments(), is(1));
+        assertThat(discussion.getCreatedAt().getTime(), is(1637584949000L));
+        assertThat(discussion.getUpdatedAt().getTime(), is(1637585047000L));
+        assertThat(discussion.getAuthorAssociation(), is(GHCommentAuthorAssociation.OWNER));
+        assertThat(discussion.getActiveLockReason(), is(nullValue()));
+        assertThat(discussion.getBody(), is("Body of discussion."));
+    }
+
+    @Test
+    public void discussion_labeled() throws Exception {
+        final GHEventPayload.Discussion discussionPayload = GitHub.offline()
+                .parseEventPayload(payload.asReader(), GHEventPayload.Discussion.class);
+
+        assertThat(discussionPayload.getAction(), is("labeled"));
+        assertThat(discussionPayload.getRepository().getFullName(), is("gsmet/quarkus-bot-java-playground"));
+        assertThat(discussionPayload.getSender().getLogin(), is("gsmet"));
+
+        GHRepositoryDiscussion discussion = discussionPayload.getDiscussion();
+
+        GHRepositoryDiscussion.Category category = discussion.getCategory();
+
+        assertThat(category.getId(), is(33522033L));
+        assertThat(category.getEmoji(), is(":pray:"));
+        assertThat(category.getName(), is("Q&A"));
+        assertThat(category.getDescription(), is("Ask the community for help"));
+        assertThat(category.getCreatedAt().getTime(), is(1636991431000L));
+        assertThat(category.getUpdatedAt().getTime(), is(1636991431000L));
+        assertThat(category.getSlug(), is("q-a"));
+        assertThat(category.isAnswerable(), is(true));
+
+        assertThat(discussion.getAnswerHtmlUrl(), is(nullValue()));
+        assertThat(discussion.getAnswerChosenAt(), is(nullValue()));
+        assertThat(discussion.getAnswerChosenBy(), is(nullValue()));
+
+        assertThat(discussion.getHtmlUrl().toString(),
+                is("https://github.com/gsmet/quarkus-bot-java-playground/discussions/78"));
+        assertThat(discussion.getId(), is(3698909L));
+        assertThat(discussion.getNodeId(), is("D_kwDOEq3cwc4AOHDd"));
+        assertThat(discussion.getNumber(), is(78));
+        assertThat(discussion.getTitle(), is("Title of discussion"));
+
+        assertThat(discussion.getUser().getLogin(), is("gsmet"));
+        assertThat(discussion.getUser().getId(), is(1279749L));
+        assertThat(discussion.getUser().getNodeId(), is("MDQ6VXNlcjEyNzk3NDk="));
+
+        assertThat(discussion.getState(), is(GHRepositoryDiscussion.State.OPEN));
+        assertThat(discussion.isLocked(), is(false));
+        assertThat(discussion.getComments(), is(0));
+        assertThat(discussion.getCreatedAt().getTime(), is(1637584949000L));
+        assertThat(discussion.getUpdatedAt().getTime(), is(1637584961000L));
+        assertThat(discussion.getAuthorAssociation(), is(GHCommentAuthorAssociation.OWNER));
+        assertThat(discussion.getActiveLockReason(), is(nullValue()));
+        assertThat(discussion.getBody(), is("Body of discussion."));
+
+        GHLabel label = discussionPayload.getLabel();
+        assertThat(label.getId(), is(2543373314L));
+        assertThat(label.getNodeId(), is("MDU6TGFiZWwyNTQzMzczMzE0"));
+        assertThat(label.getUrl().toString(),
+                is("https://api.github.com/repos/gsmet/quarkus-bot-java-playground/labels/area/hibernate-validator"));
+        assertThat(label.getName(), is("area/hibernate-validator"));
+        assertThat(label.getColor(), is("ededed"));
+        assertThat(label.isDefault(), is(false));
+        assertThat(label.getDescription(), is(nullValue()));
+    }
 }
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_answered.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_answered.json
new file mode 100644
index 000000000..84e060efb
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_answered.json
@@ -0,0 +1,252 @@
+{
+    "action": "answered",
+    "discussion": {
+        "repository_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground",
+        "category": {
+            "id": 33522033,
+            "repository_id": 313384129,
+            "emoji": ":pray:",
+            "name": "Q&A",
+            "description": "Ask the community for help",
+            "created_at": "2021-11-15T16:50:31.000+01:00",
+            "updated_at": "2021-11-15T16:50:31.000+01:00",
+            "slug": "q-a",
+            "is_answerable": true
+        },
+        "answer_html_url": "https://github.com/gsmet/quarkus-bot-java-playground/discussions/78#discussioncomment-1681242",
+        "answer_chosen_at": "2021-11-22T13:44:07.000+01:00",
+        "answer_chosen_by": {
+            "login": "gsmet",
+            "id": 1279749,
+            "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+            "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+            "gravatar_id": "",
+            "url": "https://api.github.com/users/gsmet",
+            "html_url": "https://github.com/gsmet",
+            "followers_url": "https://api.github.com/users/gsmet/followers",
+            "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+            "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+            "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+            "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+            "organizations_url": "https://api.github.com/users/gsmet/orgs",
+            "repos_url": "https://api.github.com/users/gsmet/repos",
+            "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+            "received_events_url": "https://api.github.com/users/gsmet/received_events",
+            "type": "User",
+            "site_admin": false
+        },
+        "html_url": "https://github.com/gsmet/quarkus-bot-java-playground/discussions/78",
+        "id": 3698909,
+        "node_id": "D_kwDOEq3cwc4AOHDd",
+        "number": 78,
+        "title": "Title of discussion",
+        "user": {
+            "login": "gsmet",
+            "id": 1279749,
+            "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+            "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+            "gravatar_id": "",
+            "url": "https://api.github.com/users/gsmet",
+            "html_url": "https://github.com/gsmet",
+            "followers_url": "https://api.github.com/users/gsmet/followers",
+            "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+            "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+            "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+            "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+            "organizations_url": "https://api.github.com/users/gsmet/orgs",
+            "repos_url": "https://api.github.com/users/gsmet/repos",
+            "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+            "received_events_url": "https://api.github.com/users/gsmet/received_events",
+            "type": "User",
+            "site_admin": false
+        },
+        "state": "open",
+        "locked": false,
+        "comments": 1,
+        "created_at": "2021-11-22T12:42:29Z",
+        "updated_at": "2021-11-22T12:44:07Z",
+        "author_association": "OWNER",
+        "active_lock_reason": null,
+        "body": "Body of discussion.",
+        "reactions": {
+            "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/discussions/78/reactions",
+            "total_count": 0,
+            "+1": 0,
+            "-1": 0,
+            "laugh": 0,
+            "hooray": 0,
+            "confused": 0,
+            "heart": 0,
+            "rocket": 0,
+            "eyes": 0
+        },
+        "timeline_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/discussions/78/timeline"
+    },
+    "answer": {
+        "id": 1681242,
+        "node_id": "DC_kwDOEq3cwc4AGada",
+        "html_url": "https://github.com/gsmet/quarkus-bot-java-playground/discussions/78#discussioncomment-1681242",
+        "parent_id": null,
+        "child_comment_count": 0,
+        "repository_url": "gsmet/quarkus-bot-java-playground",
+        "discussion_id": 3698909,
+        "author_association": "OWNER",
+        "user": {
+            "login": "gsmet",
+            "id": 1279749,
+            "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+            "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+            "gravatar_id": "",
+            "url": "https://api.github.com/users/gsmet",
+            "html_url": "https://github.com/gsmet",
+            "followers_url": "https://api.github.com/users/gsmet/followers",
+            "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+            "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+            "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+            "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+            "organizations_url": "https://api.github.com/users/gsmet/orgs",
+            "repos_url": "https://api.github.com/users/gsmet/repos",
+            "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+            "received_events_url": "https://api.github.com/users/gsmet/received_events",
+            "type": "User",
+            "site_admin": false
+        },
+        "created_at": "2021-11-22T12:44:04Z",
+        "updated_at": "2021-11-22T12:44:04Z",
+        "body": "An answer.",
+        "reactions": {
+            "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/comments/1681242/reactions",
+            "total_count": 0,
+            "+1": 0,
+            "-1": 0,
+            "laugh": 0,
+            "hooray": 0,
+            "confused": 0,
+            "heart": 0,
+            "rocket": 0,
+            "eyes": 0
+        }
+    },
+    "repository": {
+        "id": 313384129,
+        "node_id": "MDEwOlJlcG9zaXRvcnkzMTMzODQxMjk=",
+        "name": "quarkus-bot-java-playground",
+        "full_name": "gsmet/quarkus-bot-java-playground",
+        "private": false,
+        "owner": {
+            "login": "gsmet",
+            "id": 1279749,
+            "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+            "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+            "gravatar_id": "",
+            "url": "https://api.github.com/users/gsmet",
+            "html_url": "https://github.com/gsmet",
+            "followers_url": "https://api.github.com/users/gsmet/followers",
+            "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+            "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+            "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+            "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+            "organizations_url": "https://api.github.com/users/gsmet/orgs",
+            "repos_url": "https://api.github.com/users/gsmet/repos",
+            "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+            "received_events_url": "https://api.github.com/users/gsmet/received_events",
+            "type": "User",
+            "site_admin": false
+        },
+        "html_url": "https://github.com/gsmet/quarkus-bot-java-playground",
+        "description": null,
+        "fork": false,
+        "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground",
+        "forks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/forks",
+        "keys_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/keys{/key_id}",
+        "collaborators_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/collaborators{/collaborator}",
+        "teams_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/teams",
+        "hooks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/hooks",
+        "issue_events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/events{/number}",
+        "events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/events",
+        "assignees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/assignees{/user}",
+        "branches_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/branches{/branch}",
+        "tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/tags",
+        "blobs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/blobs{/sha}",
+        "git_tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/tags{/sha}",
+        "git_refs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/refs{/sha}",
+        "trees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/trees{/sha}",
+        "statuses_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/statuses/{sha}",
+        "languages_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/languages",
+        "stargazers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/stargazers",
+        "contributors_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contributors",
+        "subscribers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscribers",
+        "subscription_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscription",
+        "commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/commits{/sha}",
+        "git_commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/commits{/sha}",
+        "comments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/comments{/number}",
+        "issue_comment_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/comments{/number}",
+        "contents_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contents/{+path}",
+        "compare_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/compare/{base}...{head}",
+        "merges_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/merges",
+        "archive_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/{archive_format}{/ref}",
+        "downloads_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/downloads",
+        "issues_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues{/number}",
+        "pulls_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/pulls{/number}",
+        "milestones_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/milestones{/number}",
+        "notifications_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/notifications{?since,all,participating}",
+        "labels_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/labels{/name}",
+        "releases_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/releases{/id}",
+        "deployments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/deployments",
+        "created_at": "2020-11-16T17:55:53Z",
+        "updated_at": "2021-08-26T15:20:53Z",
+        "pushed_at": "2021-08-30T17:54:07Z",
+        "git_url": "git://github.com/gsmet/quarkus-bot-java-playground.git",
+        "ssh_url": "git@github.com:gsmet/quarkus-bot-java-playground.git",
+        "clone_url": "https://github.com/gsmet/quarkus-bot-java-playground.git",
+        "svn_url": "https://github.com/gsmet/quarkus-bot-java-playground",
+        "homepage": null,
+        "size": 51,
+        "stargazers_count": 0,
+        "watchers_count": 0,
+        "language": "Java",
+        "has_issues": true,
+        "has_projects": true,
+        "has_downloads": true,
+        "has_wiki": true,
+        "has_pages": false,
+        "forks_count": 2,
+        "mirror_url": null,
+        "archived": false,
+        "disabled": false,
+        "open_issues_count": 29,
+        "license": null,
+        "allow_forking": true,
+        "is_template": false,
+        "topics": [],
+        "visibility": "public",
+        "forks": 2,
+        "open_issues": 29,
+        "watchers": 0,
+        "default_branch": "main"
+    },
+    "sender": {
+        "login": "gsmet",
+        "id": 1279749,
+        "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+        "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+        "gravatar_id": "",
+        "url": "https://api.github.com/users/gsmet",
+        "html_url": "https://github.com/gsmet",
+        "followers_url": "https://api.github.com/users/gsmet/followers",
+        "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+        "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+        "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+        "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+        "organizations_url": "https://api.github.com/users/gsmet/orgs",
+        "repos_url": "https://api.github.com/users/gsmet/repos",
+        "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+        "received_events_url": "https://api.github.com/users/gsmet/received_events",
+        "type": "User",
+        "site_admin": false
+    },
+    "installation": {
+        "id": 13005535,
+        "node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMwMDU1MzU="
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_created.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_created.json
new file mode 100644
index 000000000..ec28d686c
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_created.json
@@ -0,0 +1,188 @@
+{
+    "action": "created",
+    "discussion": {
+        "repository_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground",
+        "category": {
+            "id": 33522033,
+            "repository_id": 313384129,
+            "emoji": ":pray:",
+            "name": "Q&A",
+            "description": "Ask the community for help",
+            "created_at": "2021-11-15T16:50:31.000+01:00",
+            "updated_at": "2021-11-15T16:50:31.000+01:00",
+            "slug": "q-a",
+            "is_answerable": true
+        },
+        "answer_html_url": null,
+        "answer_chosen_at": null,
+        "answer_chosen_by": null,
+        "html_url": "https://github.com/gsmet/quarkus-bot-java-playground/discussions/78",
+        "id": 3698909,
+        "node_id": "D_kwDOEq3cwc4AOHDd",
+        "number": 78,
+        "title": "Title of discussion",
+        "user": {
+            "login": "gsmet",
+            "id": 1279749,
+            "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+            "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+            "gravatar_id": "",
+            "url": "https://api.github.com/users/gsmet",
+            "html_url": "https://github.com/gsmet",
+            "followers_url": "https://api.github.com/users/gsmet/followers",
+            "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+            "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+            "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+            "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+            "organizations_url": "https://api.github.com/users/gsmet/orgs",
+            "repos_url": "https://api.github.com/users/gsmet/repos",
+            "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+            "received_events_url": "https://api.github.com/users/gsmet/received_events",
+            "type": "User",
+            "site_admin": false
+        },
+        "state": "open",
+        "locked": false,
+        "comments": 0,
+        "created_at": "2021-11-22T12:42:29Z",
+        "updated_at": "2021-11-22T12:42:29Z",
+        "author_association": "OWNER",
+        "active_lock_reason": null,
+        "body": "Body of discussion.",
+        "reactions": {
+            "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/discussions/78/reactions",
+            "total_count": 0,
+            "+1": 0,
+            "-1": 0,
+            "laugh": 0,
+            "hooray": 0,
+            "confused": 0,
+            "heart": 0,
+            "rocket": 0,
+            "eyes": 0
+        },
+        "timeline_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/discussions/78/timeline"
+    },
+    "repository": {
+        "id": 313384129,
+        "node_id": "MDEwOlJlcG9zaXRvcnkzMTMzODQxMjk=",
+        "name": "quarkus-bot-java-playground",
+        "full_name": "gsmet/quarkus-bot-java-playground",
+        "private": false,
+        "owner": {
+            "login": "gsmet",
+            "id": 1279749,
+            "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+            "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+            "gravatar_id": "",
+            "url": "https://api.github.com/users/gsmet",
+            "html_url": "https://github.com/gsmet",
+            "followers_url": "https://api.github.com/users/gsmet/followers",
+            "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+            "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+            "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+            "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+            "organizations_url": "https://api.github.com/users/gsmet/orgs",
+            "repos_url": "https://api.github.com/users/gsmet/repos",
+            "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+            "received_events_url": "https://api.github.com/users/gsmet/received_events",
+            "type": "User",
+            "site_admin": false
+        },
+        "html_url": "https://github.com/gsmet/quarkus-bot-java-playground",
+        "description": null,
+        "fork": false,
+        "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground",
+        "forks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/forks",
+        "keys_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/keys{/key_id}",
+        "collaborators_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/collaborators{/collaborator}",
+        "teams_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/teams",
+        "hooks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/hooks",
+        "issue_events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/events{/number}",
+        "events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/events",
+        "assignees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/assignees{/user}",
+        "branches_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/branches{/branch}",
+        "tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/tags",
+        "blobs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/blobs{/sha}",
+        "git_tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/tags{/sha}",
+        "git_refs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/refs{/sha}",
+        "trees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/trees{/sha}",
+        "statuses_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/statuses/{sha}",
+        "languages_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/languages",
+        "stargazers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/stargazers",
+        "contributors_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contributors",
+        "subscribers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscribers",
+        "subscription_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscription",
+        "commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/commits{/sha}",
+        "git_commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/commits{/sha}",
+        "comments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/comments{/number}",
+        "issue_comment_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/comments{/number}",
+        "contents_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contents/{+path}",
+        "compare_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/compare/{base}...{head}",
+        "merges_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/merges",
+        "archive_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/{archive_format}{/ref}",
+        "downloads_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/downloads",
+        "issues_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues{/number}",
+        "pulls_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/pulls{/number}",
+        "milestones_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/milestones{/number}",
+        "notifications_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/notifications{?since,all,participating}",
+        "labels_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/labels{/name}",
+        "releases_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/releases{/id}",
+        "deployments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/deployments",
+        "created_at": "2020-11-16T17:55:53Z",
+        "updated_at": "2021-08-26T15:20:53Z",
+        "pushed_at": "2021-08-30T17:54:07Z",
+        "git_url": "git://github.com/gsmet/quarkus-bot-java-playground.git",
+        "ssh_url": "git@github.com:gsmet/quarkus-bot-java-playground.git",
+        "clone_url": "https://github.com/gsmet/quarkus-bot-java-playground.git",
+        "svn_url": "https://github.com/gsmet/quarkus-bot-java-playground",
+        "homepage": null,
+        "size": 51,
+        "stargazers_count": 0,
+        "watchers_count": 0,
+        "language": "Java",
+        "has_issues": true,
+        "has_projects": true,
+        "has_downloads": true,
+        "has_wiki": true,
+        "has_pages": false,
+        "forks_count": 2,
+        "mirror_url": null,
+        "archived": false,
+        "disabled": false,
+        "open_issues_count": 29,
+        "license": null,
+        "allow_forking": true,
+        "is_template": false,
+        "topics": [],
+        "visibility": "public",
+        "forks": 2,
+        "open_issues": 29,
+        "watchers": 0,
+        "default_branch": "main"
+    },
+    "sender": {
+        "login": "gsmet",
+        "id": 1279749,
+        "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+        "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+        "gravatar_id": "",
+        "url": "https://api.github.com/users/gsmet",
+        "html_url": "https://github.com/gsmet",
+        "followers_url": "https://api.github.com/users/gsmet/followers",
+        "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+        "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+        "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+        "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+        "organizations_url": "https://api.github.com/users/gsmet/orgs",
+        "repos_url": "https://api.github.com/users/gsmet/repos",
+        "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+        "received_events_url": "https://api.github.com/users/gsmet/received_events",
+        "type": "User",
+        "site_admin": false
+    },
+    "installation": {
+        "id": 13005535,
+        "node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMwMDU1MzU="
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_labeled.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_labeled.json
new file mode 100644
index 000000000..565714409
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/discussion_labeled.json
@@ -0,0 +1,197 @@
+{
+    "action": "labeled",
+    "discussion": {
+        "repository_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground",
+        "category": {
+            "id": 33522033,
+            "repository_id": 313384129,
+            "emoji": ":pray:",
+            "name": "Q&A",
+            "description": "Ask the community for help",
+            "created_at": "2021-11-15T16:50:31.000+01:00",
+            "updated_at": "2021-11-15T16:50:31.000+01:00",
+            "slug": "q-a",
+            "is_answerable": true
+        },
+        "answer_html_url": null,
+        "answer_chosen_at": null,
+        "answer_chosen_by": null,
+        "html_url": "https://github.com/gsmet/quarkus-bot-java-playground/discussions/78",
+        "id": 3698909,
+        "node_id": "D_kwDOEq3cwc4AOHDd",
+        "number": 78,
+        "title": "Title of discussion",
+        "user": {
+            "login": "gsmet",
+            "id": 1279749,
+            "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+            "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+            "gravatar_id": "",
+            "url": "https://api.github.com/users/gsmet",
+            "html_url": "https://github.com/gsmet",
+            "followers_url": "https://api.github.com/users/gsmet/followers",
+            "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+            "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+            "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+            "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+            "organizations_url": "https://api.github.com/users/gsmet/orgs",
+            "repos_url": "https://api.github.com/users/gsmet/repos",
+            "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+            "received_events_url": "https://api.github.com/users/gsmet/received_events",
+            "type": "User",
+            "site_admin": false
+        },
+        "state": "open",
+        "locked": false,
+        "comments": 0,
+        "created_at": "2021-11-22T12:42:29Z",
+        "updated_at": "2021-11-22T12:42:41Z",
+        "author_association": "OWNER",
+        "active_lock_reason": null,
+        "body": "Body of discussion.",
+        "reactions": {
+            "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/discussions/78/reactions",
+            "total_count": 0,
+            "+1": 0,
+            "-1": 0,
+            "laugh": 0,
+            "hooray": 0,
+            "confused": 0,
+            "heart": 0,
+            "rocket": 0,
+            "eyes": 0
+        },
+        "timeline_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/discussions/78/timeline"
+    },
+    "label": {
+        "id": 2543373314,
+        "node_id": "MDU6TGFiZWwyNTQzMzczMzE0",
+        "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/labels/area/hibernate-validator",
+        "name": "area/hibernate-validator",
+        "color": "ededed",
+        "default": false,
+        "description": null
+    },
+    "repository": {
+        "id": 313384129,
+        "node_id": "MDEwOlJlcG9zaXRvcnkzMTMzODQxMjk=",
+        "name": "quarkus-bot-java-playground",
+        "full_name": "gsmet/quarkus-bot-java-playground",
+        "private": false,
+        "owner": {
+            "login": "gsmet",
+            "id": 1279749,
+            "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+            "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+            "gravatar_id": "",
+            "url": "https://api.github.com/users/gsmet",
+            "html_url": "https://github.com/gsmet",
+            "followers_url": "https://api.github.com/users/gsmet/followers",
+            "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+            "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+            "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+            "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+            "organizations_url": "https://api.github.com/users/gsmet/orgs",
+            "repos_url": "https://api.github.com/users/gsmet/repos",
+            "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+            "received_events_url": "https://api.github.com/users/gsmet/received_events",
+            "type": "User",
+            "site_admin": false
+        },
+        "html_url": "https://github.com/gsmet/quarkus-bot-java-playground",
+        "description": null,
+        "fork": false,
+        "url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground",
+        "forks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/forks",
+        "keys_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/keys{/key_id}",
+        "collaborators_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/collaborators{/collaborator}",
+        "teams_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/teams",
+        "hooks_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/hooks",
+        "issue_events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/events{/number}",
+        "events_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/events",
+        "assignees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/assignees{/user}",
+        "branches_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/branches{/branch}",
+        "tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/tags",
+        "blobs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/blobs{/sha}",
+        "git_tags_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/tags{/sha}",
+        "git_refs_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/refs{/sha}",
+        "trees_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/trees{/sha}",
+        "statuses_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/statuses/{sha}",
+        "languages_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/languages",
+        "stargazers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/stargazers",
+        "contributors_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contributors",
+        "subscribers_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscribers",
+        "subscription_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/subscription",
+        "commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/commits{/sha}",
+        "git_commits_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/git/commits{/sha}",
+        "comments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/comments{/number}",
+        "issue_comment_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues/comments{/number}",
+        "contents_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/contents/{+path}",
+        "compare_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/compare/{base}...{head}",
+        "merges_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/merges",
+        "archive_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/{archive_format}{/ref}",
+        "downloads_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/downloads",
+        "issues_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/issues{/number}",
+        "pulls_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/pulls{/number}",
+        "milestones_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/milestones{/number}",
+        "notifications_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/notifications{?since,all,participating}",
+        "labels_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/labels{/name}",
+        "releases_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/releases{/id}",
+        "deployments_url": "https://api.github.com/repos/gsmet/quarkus-bot-java-playground/deployments",
+        "created_at": "2020-11-16T17:55:53Z",
+        "updated_at": "2021-08-26T15:20:53Z",
+        "pushed_at": "2021-08-30T17:54:07Z",
+        "git_url": "git://github.com/gsmet/quarkus-bot-java-playground.git",
+        "ssh_url": "git@github.com:gsmet/quarkus-bot-java-playground.git",
+        "clone_url": "https://github.com/gsmet/quarkus-bot-java-playground.git",
+        "svn_url": "https://github.com/gsmet/quarkus-bot-java-playground",
+        "homepage": null,
+        "size": 51,
+        "stargazers_count": 0,
+        "watchers_count": 0,
+        "language": "Java",
+        "has_issues": true,
+        "has_projects": true,
+        "has_downloads": true,
+        "has_wiki": true,
+        "has_pages": false,
+        "forks_count": 2,
+        "mirror_url": null,
+        "archived": false,
+        "disabled": false,
+        "open_issues_count": 29,
+        "license": null,
+        "allow_forking": true,
+        "is_template": false,
+        "topics": [],
+        "visibility": "public",
+        "forks": 2,
+        "open_issues": 29,
+        "watchers": 0,
+        "default_branch": "main"
+    },
+    "sender": {
+        "login": "gsmet",
+        "id": 1279749,
+        "node_id": "MDQ6VXNlcjEyNzk3NDk=",
+        "avatar_url": "https://avatars.githubusercontent.com/u/1279749?v=4",
+        "gravatar_id": "",
+        "url": "https://api.github.com/users/gsmet",
+        "html_url": "https://github.com/gsmet",
+        "followers_url": "https://api.github.com/users/gsmet/followers",
+        "following_url": "https://api.github.com/users/gsmet/following{/other_user}",
+        "gists_url": "https://api.github.com/users/gsmet/gists{/gist_id}",
+        "starred_url": "https://api.github.com/users/gsmet/starred{/owner}{/repo}",
+        "subscriptions_url": "https://api.github.com/users/gsmet/subscriptions",
+        "organizations_url": "https://api.github.com/users/gsmet/orgs",
+        "repos_url": "https://api.github.com/users/gsmet/repos",
+        "events_url": "https://api.github.com/users/gsmet/events{/privacy}",
+        "received_events_url": "https://api.github.com/users/gsmet/received_events",
+        "type": "User",
+        "site_admin": false
+    },
+    "installation": {
+        "id": 13005535,
+        "node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMwMDU1MzU="
+    }
+}
\ No newline at end of file