{"action":"created","comment":{"url":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/comments/192579105","pull_request_review_id":125385307,"id":192579105,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5MjU3OTEwNQ==","diff_hunk":"@@ -0,0 +1,186 @@\n+import Discord = require(\"discord.js\");\n+import fetch from \"node-fetch\";\n+import { fileBackedObject } from \"./FileBackedObject\";\n+import { PersonalSettings, SharedSettings } from \"./SharedSettings\";\n+\n+type EndpointName = string;\n+type Endpoints = EndpointName[];\n+\n+interface EndpointsState {\n+    endpoints: Endpoints;\n+    lastUpdate: Date;\n+}\n+\n+/**\n+ *  Posts links to api endpoints\n+ *\n+ */\n+export default class Endpoint {\n+    private endpoints: EndpointsState;\n+    private baseUrl: string;\n+    private maxDistance: number;\n+    private aliases: { [key: string]: string[] };\n+\n+    public constructor(sharedSettings: SharedSettings, endpointFile: string) {\n+        console.log(\"Requested Endpoint extension.\");\n+        this.baseUrl = sharedSettings.endpoint.baseUrl;\n+        this.maxDistance = sharedSettings.endpoint.maxDistance;\n+        this.aliases = sharedSettings.endpoint.aliases || {};\n+        this.endpoints = fileBackedObject(endpointFile);\n+        this.updateEndpoints();\n+    }\n+\n+    public onEndpoint(message: Discord.Message, isAdmin: boolean, command: string, args: string[]) {\n+        if (this.endpoints.endpoints === undefined) {\n+            message.reply(\"Sorry, endpoints are not yet initialized!\");\n+            return;\n+        }\n+        const argsString = args.reduce((prev, current) => prev + current, \"\");\n+        let minDist = Infinity;\n+        let minEndpoint = null;\n+\n+        for (const endpoint of this.endpoints.endpoints) {\n+            const dist = this.calculateEndpointAndSynonymsDist(endpoint, argsString);\n+            if (dist < minDist) {\n+                minDist = dist;\n+                minEndpoint = endpoint;\n+            }\n+        }\n+\n+        if (minEndpoint != null && minDist < this.maxDistance) {\n+            message.reply(this.baseUrl + minEndpoint);\n+        } else {\n+            message.reply(\"Could not find requested endpoint!\");\n+        }\n+    }\n+\n+    /**\n+     * Levenshtein Distance with some simple modifications for endpoint & input\n+     * @param endpoint\n+     * @param input\n+     */\n+    private calculateDistance(endpoint: string, input: string): number {\n+        endpoint = endpoint.replace(new RegExp(\"-\", \"g\"), \" \");\n+        input = input.replace(new RegExp(\"-\", \"g\"), \" \");\n+\n+        const d = new Array(endpoint.length + 1);\n+\n+        for (let i = 0; i < d.length; i++) {\n+            d[i] = new Array(input.length + 1);\n+        }\n+\n+        for (let i = 1; i <= endpoint.length; i++) {\n+            d[i][0] = i;\n+        }\n+\n+        for (let j = 1; j <= input.length; j++) {\n+            d[0][j] = j;\n+        }\n+\n+        d[0][0] = 0;\n+        for (let j = 1;  j <= input.length; j++) {\n+            for (let i = 1; i <= endpoint.length; i++) {\n+\n+                let substitutionCost = 0;\n+                if (endpoint[i - 1] !== input[j - 1]) {\n+                    substitutionCost = 1;\n+                }\n+\n+                // deal with swapped chars\n+                if (i > 1 && j > 1 && endpoint[i - 1] === input[j - 2] && endpoint[i - 2] === input[j - 1]) {\n+                    d[i][j] = Math.min(\n+                            d[i - 1][j] + 1, // delete\n+                            d[i][j - 1] + 1, // insertion\n+                            d[i - 1][j - 1] + substitutionCost, // substitution\n+                            d[i - 2][j - 2] + 1 // transposition\n+                        );\n+                } else {\n+                    d[i][j] = Math.min(\n+                            d[i - 1][j] + 1, // deletion\n+                            d[i][j - 1] + 1, // insertion\n+                            d[i - 1][j - 1] + substitutionCost // substitution\n+                        );\n+                }\n+\n+            }\n+        }\n+\n+        const result = d[endpoint.length][input.length];\n+        return result;\n+    }\n+\n+    /**\n+     *\n+     * @param endpoint\n+     * @param compareString\n+     * @returns minimum distance between endpoint/endpoint synonym and compare string\n+     */\n+    private calculateEndpointAndSynonymsDist(endpoint: string, argsString: string): number {\n+        const endpointComponents = endpoint.split(\"-\");\n+        const version = endpointComponents[endpointComponents.length - 1];\n+        let compareString = argsString;\n+        if (!argsString.endsWith(version)) {\n+            compareString = argsString + \"-\" + version;\n+        }\n+\n+        let dist = this.calculateDistance(endpoint, compareString);\n+\n+        if (endpoint.startsWith(\"lol\")) {\n+            const aliasDist = this.calculateDistance(endpoint.replace(\"lol\", \"\"), compareString);\n+            dist = Math.min(dist, aliasDist);\n+        }\n+\n+        // check for manually defined aliases\n+        if (!this.aliases || !this.aliases[endpoint]) {\n+            return dist;\n+        }\n+\n+        for (const alias of this.aliases[endpoint]) {\n+            const aliasDist = this.calculateDistance(alias + \"-\" + version, compareString);\n+            dist = Math.min(dist, aliasDist);\n+        }\n+        return dist;\n+    }\n+\n+    private async updateEndpoints() {\n+        try {\n+            const response = await fetch(`http://www.mingweisamuel.com/riotapi-schema/openapi-3.0.0.json`, {\n+                method: \"GET\",\n+                headers: {\n+                    \"Accept\": \"application/json\",\n+                    \"Content-Type\": \"application/json\"\n+                }\n+            });\n+\n+            if (response.status !== 200) {\n+                console.error(\"HTTP Error trying to get schema: \" + response.status);\n+                return;\n+            }\n+\n+            const schema = await response.json();\n+            const paths = schema.paths;\n+\n+            const endpointSet = new Set<EndpointName>();\n+\n+            for (const path in paths) {\n+                const endpointName = paths[path][\"x-endpoint\"]; // match-v3\n+                endpointSet.add(endpointName);\n+            }\n+\n+            this.endpoints.lastUpdate = new Date();","path":"src/Endpoint.ts","position":170,"original_position":170,"commit_id":"372c4a0d662048f3793046a0aa774f821188b8b3","original_commit_id":"372c4a0d662048f3793046a0aa774f821188b8b3","user":{"login":"Querijn","id":3397066,"node_id":"MDQ6VXNlcjMzOTcwNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/3397066?v=4","gravatar_id":"","url":"https://api.github.com/users/Querijn","html_url":"https://github.com/Querijn","followers_url":"https://api.github.com/users/Querijn/followers","following_url":"https://api.github.com/users/Querijn/following{/other_user}","gists_url":"https://api.github.com/users/Querijn/gists{/gist_id}","starred_url":"https://api.github.com/users/Querijn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Querijn/subscriptions","organizations_url":"https://api.github.com/users/Querijn/orgs","repos_url":"https://api.github.com/users/Querijn/repos","events_url":"https://api.github.com/users/Querijn/events{/privacy}","received_events_url":"https://api.github.com/users/Querijn/received_events","type":"User","site_admin":false},"body":"Unused?","created_at":"2018-06-03T06:51:58Z","updated_at":"2018-06-03T06:53:51Z","html_url":"https://github.com/Querijn/BottyMcBotface/pull/88#discussion_r192579105","pull_request_url":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/88","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/comments/192579105"},"html":{"href":"https://github.com/Querijn/BottyMcBotface/pull/88#discussion_r192579105"},"pull_request":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/88"}}},"pull_request":{"url":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/88","id":192222117,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkyMjIyMTE3","html_url":"https://github.com/Querijn/BottyMcBotface/pull/88","diff_url":"https://github.com/Querijn/BottyMcBotface/pull/88.diff","patch_url":"https://github.com/Querijn/BottyMcBotface/pull/88.patch","issue_url":"https://api.github.com/repos/Querijn/BottyMcBotface/issues/88","number":88,"state":"open","locked":false,"title":"Implemented endpoint command","user":{"login":"TiFu","id":5977959,"node_id":"MDQ6VXNlcjU5Nzc5NTk=","avatar_url":"https://avatars2.githubusercontent.com/u/5977959?v=4","gravatar_id":"","url":"https://api.github.com/users/TiFu","html_url":"https://github.com/TiFu","followers_url":"https://api.github.com/users/TiFu/followers","following_url":"https://api.github.com/users/TiFu/following{/other_user}","gists_url":"https://api.github.com/users/TiFu/gists{/gist_id}","starred_url":"https://api.github.com/users/TiFu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TiFu/subscriptions","organizations_url":"https://api.github.com/users/TiFu/orgs","repos_url":"https://api.github.com/users/TiFu/repos","events_url":"https://api.github.com/users/TiFu/events{/privacy}","received_events_url":"https://api.github.com/users/TiFu/received_events","type":"User","site_admin":false},"body":"See #76. \r\nThis PR introduces a new `!endpoint [endpoint name]` command. The bot then answers with a direct link to the endpoint e.g. \r\n\r\nCommand:\r\n```\r\n!endpoint status\r\n```\r\nResponse:\r\n```\r\n@TiFu, https://developer.riotgames.com/api-methods/#lol-status-v3\r\n```\r\n","created_at":"2018-06-02T23:12:03Z","updated_at":"2018-06-03T06:53:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":"349d524c6d1ff7d30a078de654601dbfc2cc6e47","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/88/commits","review_comments_url":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/88/comments","review_comment_url":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Querijn/BottyMcBotface/issues/88/comments","statuses_url":"https://api.github.com/repos/Querijn/BottyMcBotface/statuses/372c4a0d662048f3793046a0aa774f821188b8b3","head":{"label":"TiFu:endpoint-command","ref":"endpoint-command","sha":"372c4a0d662048f3793046a0aa774f821188b8b3","user":{"login":"TiFu","id":5977959,"node_id":"MDQ6VXNlcjU5Nzc5NTk=","avatar_url":"https://avatars2.githubusercontent.com/u/5977959?v=4","gravatar_id":"","url":"https://api.github.com/users/TiFu","html_url":"https://github.com/TiFu","followers_url":"https://api.github.com/users/TiFu/followers","following_url":"https://api.github.com/users/TiFu/following{/other_user}","gists_url":"https://api.github.com/users/TiFu/gists{/gist_id}","starred_url":"https://api.github.com/users/TiFu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TiFu/subscriptions","organizations_url":"https://api.github.com/users/TiFu/orgs","repos_url":"https://api.github.com/users/TiFu/repos","events_url":"https://api.github.com/users/TiFu/events{/privacy}","received_events_url":"https://api.github.com/users/TiFu/received_events","type":"User","site_admin":false},"repo":{"id":106102715,"node_id":"MDEwOlJlcG9zaXRvcnkxMDYxMDI3MTU=","name":"BottyMcBotface","full_name":"TiFu/BottyMcBotface","owner":{"login":"TiFu","id":5977959,"node_id":"MDQ6VXNlcjU5Nzc5NTk=","avatar_url":"https://avatars2.githubusercontent.com/u/5977959?v=4","gravatar_id":"","url":"https://api.github.com/users/TiFu","html_url":"https://github.com/TiFu","followers_url":"https://api.github.com/users/TiFu/followers","following_url":"https://api.github.com/users/TiFu/following{/other_user}","gists_url":"https://api.github.com/users/TiFu/gists{/gist_id}","starred_url":"https://api.github.com/users/TiFu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TiFu/subscriptions","organizations_url":"https://api.github.com/users/TiFu/orgs","repos_url":"https://api.github.com/users/TiFu/repos","events_url":"https://api.github.com/users/TiFu/events{/privacy}","received_events_url":"https://api.github.com/users/TiFu/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/TiFu/BottyMcBotface","description":"The Riot Games API Bot","fork":true,"url":"https://api.github.com/repos/TiFu/BottyMcBotface","forks_url":"https://api.github.com/repos/TiFu/BottyMcBotface/forks","keys_url":"https://api.github.com/repos/TiFu/BottyMcBotface/keys{/key_id}","collaborators_url":"https://api.github.com/repos/TiFu/BottyMcBotface/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/TiFu/BottyMcBotface/teams","hooks_url":"https://api.github.com/repos/TiFu/BottyMcBotface/hooks","issue_events_url":"https://api.github.com/repos/TiFu/BottyMcBotface/issues/events{/number}","events_url":"https://api.github.com/repos/TiFu/BottyMcBotface/events","assignees_url":"https://api.github.com/repos/TiFu/BottyMcBotface/assignees{/user}","branches_url":"https://api.github.com/repos/TiFu/BottyMcBotface/branches{/branch}","tags_url":"https://api.github.com/repos/TiFu/BottyMcBotface/tags","blobs_url":"https://api.github.com/repos/TiFu/BottyMcBotface/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/TiFu/BottyMcBotface/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/TiFu/BottyMcBotface/git/refs{/sha}","trees_url":"https://api.github.com/repos/TiFu/BottyMcBotface/git/trees{/sha}","statuses_url":"https://api.github.com/repos/TiFu/BottyMcBotface/statuses/{sha}","languages_url":"https://api.github.com/repos/TiFu/BottyMcBotface/languages","stargazers_url":"https://api.github.com/repos/TiFu/BottyMcBotface/stargazers","contributors_url":"https://api.github.com/repos/TiFu/BottyMcBotface/contributors","subscribers_url":"https://api.github.com/repos/TiFu/BottyMcBotface/subscribers","subscription_url":"https://api.github.com/repos/TiFu/BottyMcBotface/subscription","commits_url":"https://api.github.com/repos/TiFu/BottyMcBotface/commits{/sha}","git_commits_url":"https://api.github.com/repos/TiFu/BottyMcBotface/git/commits{/sha}","comments_url":"https://api.github.com/repos/TiFu/BottyMcBotface/comments{/number}","issue_comment_url":"https://api.github.com/repos/TiFu/BottyMcBotface/issues/comments{/number}","contents_url":"https://api.github.com/repos/TiFu/BottyMcBotface/contents/{+path}","compare_url":"https://api.github.com/repos/TiFu/BottyMcBotface/compare/{base}...{head}","merges_url":"https://api.github.com/repos/TiFu/BottyMcBotface/merges","archive_url":"https://api.github.com/repos/TiFu/BottyMcBotface/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/TiFu/BottyMcBotface/downloads","issues_url":"https://api.github.com/repos/TiFu/BottyMcBotface/issues{/number}","pulls_url":"https://api.github.com/repos/TiFu/BottyMcBotface/pulls{/number}","milestones_url":"https://api.github.com/repos/TiFu/BottyMcBotface/milestones{/number}","notifications_url":"https://api.github.com/repos/TiFu/BottyMcBotface/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/TiFu/BottyMcBotface/labels{/name}","releases_url":"https://api.github.com/repos/TiFu/BottyMcBotface/releases{/id}","deployments_url":"https://api.github.com/repos/TiFu/BottyMcBotface/deployments","created_at":"2017-10-07T14:07:30Z","updated_at":"2018-06-02T21:06:44Z","pushed_at":"2018-06-02T23:09:14Z","git_url":"git://github.com/TiFu/BottyMcBotface.git","ssh_url":"git@github.com:TiFu/BottyMcBotface.git","clone_url":"https://github.com/TiFu/BottyMcBotface.git","svn_url":"https://github.com/TiFu/BottyMcBotface","homepage":null,"size":354,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Querijn:master","ref":"master","sha":"91e47cbad6d799516085404867a99bb24d3cbce2","user":{"login":"Querijn","id":3397066,"node_id":"MDQ6VXNlcjMzOTcwNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/3397066?v=4","gravatar_id":"","url":"https://api.github.com/users/Querijn","html_url":"https://github.com/Querijn","followers_url":"https://api.github.com/users/Querijn/followers","following_url":"https://api.github.com/users/Querijn/following{/other_user}","gists_url":"https://api.github.com/users/Querijn/gists{/gist_id}","starred_url":"https://api.github.com/users/Querijn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Querijn/subscriptions","organizations_url":"https://api.github.com/users/Querijn/orgs","repos_url":"https://api.github.com/users/Querijn/repos","events_url":"https://api.github.com/users/Querijn/events{/privacy}","received_events_url":"https://api.github.com/users/Querijn/received_events","type":"User","site_admin":false},"repo":{"id":99312539,"node_id":"MDEwOlJlcG9zaXRvcnk5OTMxMjUzOQ==","name":"BottyMcBotface","full_name":"Querijn/BottyMcBotface","owner":{"login":"Querijn","id":3397066,"node_id":"MDQ6VXNlcjMzOTcwNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/3397066?v=4","gravatar_id":"","url":"https://api.github.com/users/Querijn","html_url":"https://github.com/Querijn","followers_url":"https://api.github.com/users/Querijn/followers","following_url":"https://api.github.com/users/Querijn/following{/other_user}","gists_url":"https://api.github.com/users/Querijn/gists{/gist_id}","starred_url":"https://api.github.com/users/Querijn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Querijn/subscriptions","organizations_url":"https://api.github.com/users/Querijn/orgs","repos_url":"https://api.github.com/users/Querijn/repos","events_url":"https://api.github.com/users/Querijn/events{/privacy}","received_events_url":"https://api.github.com/users/Querijn/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Querijn/BottyMcBotface","description":"The Riot Games API Bot","fork":false,"url":"https://api.github.com/repos/Querijn/BottyMcBotface","forks_url":"https://api.github.com/repos/Querijn/BottyMcBotface/forks","keys_url":"https://api.github.com/repos/Querijn/BottyMcBotface/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Querijn/BottyMcBotface/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Querijn/BottyMcBotface/teams","hooks_url":"https://api.github.com/repos/Querijn/BottyMcBotface/hooks","issue_events_url":"https://api.github.com/repos/Querijn/BottyMcBotface/issues/events{/number}","events_url":"https://api.github.com/repos/Querijn/BottyMcBotface/events","assignees_url":"https://api.github.com/repos/Querijn/BottyMcBotface/assignees{/user}","branches_url":"https://api.github.com/repos/Querijn/BottyMcBotface/branches{/branch}","tags_url":"https://api.github.com/repos/Querijn/BottyMcBotface/tags","blobs_url":"https://api.github.com/repos/Querijn/BottyMcBotface/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Querijn/BottyMcBotface/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Querijn/BottyMcBotface/git/refs{/sha}","trees_url":"https://api.github.com/repos/Querijn/BottyMcBotface/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Querijn/BottyMcBotface/statuses/{sha}","languages_url":"https://api.github.com/repos/Querijn/BottyMcBotface/languages","stargazers_url":"https://api.github.com/repos/Querijn/BottyMcBotface/stargazers","contributors_url":"https://api.github.com/repos/Querijn/BottyMcBotface/contributors","subscribers_url":"https://api.github.com/repos/Querijn/BottyMcBotface/subscribers","subscription_url":"https://api.github.com/repos/Querijn/BottyMcBotface/subscription","commits_url":"https://api.github.com/repos/Querijn/BottyMcBotface/commits{/sha}","git_commits_url":"https://api.github.com/repos/Querijn/BottyMcBotface/git/commits{/sha}","comments_url":"https://api.github.com/repos/Querijn/BottyMcBotface/comments{/number}","issue_comment_url":"https://api.github.com/repos/Querijn/BottyMcBotface/issues/comments{/number}","contents_url":"https://api.github.com/repos/Querijn/BottyMcBotface/contents/{+path}","compare_url":"https://api.github.com/repos/Querijn/BottyMcBotface/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Querijn/BottyMcBotface/merges","archive_url":"https://api.github.com/repos/Querijn/BottyMcBotface/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Querijn/BottyMcBotface/downloads","issues_url":"https://api.github.com/repos/Querijn/BottyMcBotface/issues{/number}","pulls_url":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls{/number}","milestones_url":"https://api.github.com/repos/Querijn/BottyMcBotface/milestones{/number}","notifications_url":"https://api.github.com/repos/Querijn/BottyMcBotface/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Querijn/BottyMcBotface/labels{/name}","releases_url":"https://api.github.com/repos/Querijn/BottyMcBotface/releases{/id}","deployments_url":"https://api.github.com/repos/Querijn/BottyMcBotface/deployments","created_at":"2017-08-04T06:47:34Z","updated_at":"2018-05-23T05:00:52Z","pushed_at":"2018-06-02T23:12:04Z","git_url":"git://github.com/Querijn/BottyMcBotface.git","ssh_url":"git@github.com:Querijn/BottyMcBotface.git","clone_url":"https://github.com/Querijn/BottyMcBotface.git","svn_url":"https://github.com/Querijn/BottyMcBotface","homepage":null,"size":342,"stargazers_count":7,"watchers_count":7,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":9,"mirror_url":null,"archived":false,"open_issues_count":16,"license":null,"forks":9,"open_issues":16,"watchers":7,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/88"},"html":{"href":"https://github.com/Querijn/BottyMcBotface/pull/88"},"issue":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/issues/88"},"comments":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/issues/88/comments"},"review_comments":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/88/comments"},"review_comment":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/pulls/88/commits"},"statuses":{"href":"https://api.github.com/repos/Querijn/BottyMcBotface/statuses/372c4a0d662048f3793046a0aa774f821188b8b3"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Querijn"}}