{"action":"created","comment":{"url":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/comments/211087299","pull_request_review_id":147442762,"id":211087299,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMTA4NzI5OQ==","diff_hunk":"@@ -0,0 +1,13 @@\n+Meteor.methods({\n+\treplyClientCommand(commandId, response) {\n+\t\tcheck(commandId, String);\n+\t\tcheck(response, Object);\n+\n+\t\tif (!Meteor.userId()) {\n+\t\t\tthrow new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'replyClientCommand' });\n+\t\t}\n+\n+\t\t// emits event with the caller user and the response object\n+\t\tRocketChat.emit(`client-command-response-${ commandId }`, Meteor.user(), response);\n+\t}","path":"packages/rocketchat-client-commands/server/methods/replyClientCommand.js","position":12,"original_position":12,"commit_id":"e84b9d57e8840944d8e29dea91d77bc9c8c520ca","original_commit_id":"e84b9d57e8840944d8e29dea91d77bc9c8c520ca","user":{"login":"codacy-bot","id":19940114,"node_id":"MDQ6VXNlcjE5OTQwMTE0","avatar_url":"https://avatars1.githubusercontent.com/u/19940114?v=4","gravatar_id":"","url":"https://api.github.com/users/codacy-bot","html_url":"https://github.com/codacy-bot","followers_url":"https://api.github.com/users/codacy-bot/followers","following_url":"https://api.github.com/users/codacy-bot/following{/other_user}","gists_url":"https://api.github.com/users/codacy-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/codacy-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codacy-bot/subscriptions","organizations_url":"https://api.github.com/users/codacy-bot/orgs","repos_url":"https://api.github.com/users/codacy-bot/repos","events_url":"https://api.github.com/users/codacy-bot/events{/privacy}","received_events_url":"https://api.github.com/users/codacy-bot/received_events","type":"User","site_admin":false},"body":"![Codacy](https://app.codacy.com/assets/images/favicon.png) Issue found: [Missing trailing comma. (comma-dangle)](https://app.codacy.com/app/RocketChat/Rocket-Chat/pullRequest?prid=1674190)","created_at":"2018-08-18T22:49:35Z","updated_at":"2018-08-18T22:49:35Z","html_url":"https://github.com/RocketChat/Rocket.Chat/pull/10832#discussion_r211087299","pull_request_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/10832","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/comments/211087299"},"html":{"href":"https://github.com/RocketChat/Rocket.Chat/pull/10832#discussion_r211087299"},"pull_request":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/10832"}}},"pull_request":{"url":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/10832","id":189374635,"node_id":"MDExOlB1bGxSZXF1ZXN0MTg5Mzc0NjM1","html_url":"https://github.com/RocketChat/Rocket.Chat/pull/10832","diff_url":"https://github.com/RocketChat/Rocket.Chat/pull/10832.diff","patch_url":"https://github.com/RocketChat/Rocket.Chat/pull/10832.patch","issue_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/issues/10832","number":10832,"state":"open","locked":false,"title":"[NEW] Section to monitor and manage bot accounts on admin interface","user":{"login":"mikaelmello","id":17488630,"node_id":"MDQ6VXNlcjE3NDg4NjMw","avatar_url":"https://avatars3.githubusercontent.com/u/17488630?v=4","gravatar_id":"","url":"https://api.github.com/users/mikaelmello","html_url":"https://github.com/mikaelmello","followers_url":"https://api.github.com/users/mikaelmello/followers","following_url":"https://api.github.com/users/mikaelmello/following{/other_user}","gists_url":"https://api.github.com/users/mikaelmello/gists{/gist_id}","starred_url":"https://api.github.com/users/mikaelmello/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikaelmello/subscriptions","organizations_url":"https://api.github.com/users/mikaelmello/orgs","repos_url":"https://api.github.com/users/mikaelmello/repos","events_url":"https://api.github.com/users/mikaelmello/events{/privacy}","received_events_url":"https://api.github.com/users/mikaelmello/received_events","type":"User","site_admin":false},"body":"This is part of the GSoC project to improve the integration of Rocket.Chat with bots, the discussion about changes on the User model is found [here](https://forums.rocket.chat/t/change-the-architecture-of-bot-accounts/776). Also the utility used to communicate with bots using something else than messages (for server-side admin operations) can be found [here](https://forums.rocket.chat/t/introducing-a-new-utility-to-manage-custom-clients-from-the-server/1411/7). This PR consists of the addition of two features (and packages) to Rocket.Chat\r\n\r\n# 1. ClientCommands\r\n\r\nClient Commands is the name given to a solution created to allow the Rocket.Chat server to trigger actions in subscriber clients (bots and possibly other websocket clients). This is handled at the adapter and/or SDK level, not by final users (e.g. normal bot developers).\r\n\r\nThey are better explained [here](https://forums.rocket.chat/t/introducing-a-new-utility-to-manage-custom-clients-from-the-server/1411)\r\n\r\n## 1.1. customClientData\r\n\r\nSome features depend on which adapter the bot is running on, a bot that does not use the JS SDK might not support a few or all ClientCommands. That's why before showing any of the features, a check is made to see if the account currently supports such feature.\r\n\r\nThe client sets the `customClientData` field with information about its custom client. A client that can reply to `getStatistics` and `pauseBot` sets `customClientData = { canGetStatistics: true, canBePaused: true }`, for example.\r\n\r\nThis field can be used to store any information about the client, such as [text commands implemented by the bot](https://github.com/RocketChat/Rocket.Chat/issues/1086#issuecomment-374465944).\r\n\r\n# 2. Bot Management Admin Panel\r\n\r\nThe package `rocketchat-bot-manager` consists of adding a new section on the administration panel to manage bot accounts, that is, accounts with the `type` attribute set as `'bot'`, as discussed [here](https://forums.rocket.chat/t/change-the-architecture-of-bot-accounts/776).\r\n\r\n## 2.1. List view\r\n\r\nThe list view is a list of all the existing bot accounts. It is accessible from the admin sidenav and shows the following information about an account:\r\n  - Status (online/away/busy/offline)\r\n  - Name\r\n  - Username\r\n  - Framework used by the account\r\n\r\n[Screenshot](https://user-images.githubusercontent.com/17488630/42197042-4f8c168a-7e57-11e8-9fdb-2cb1c483a4b9.png)\r\n\r\n## 2.2. Creation of a bot account\r\n\r\nTo create a bot account, the admin must first go to the list view and then click on the plus button on the right sidetab, opening a form similar to the one used to create a normal account, except for all e-mail related fields that have been removed.\r\n\r\n[Screenshot](https://user-images.githubusercontent.com/17488630/42197061-665419da-7e57-11e8-994d-d40c57db503a.png)\r\n\r\n## 2.3. Visualizing general info about an account\r\n\r\nIn the list view, the admin can click on any listed account and a flextab will be opened on the right side, displaying some information about the clicked account. Currently, it is displayed:\r\n  - Roles of the account\r\n  - Last login\r\n  - Framework used by the account\r\n  - Stack of clients the accounts is running on\r\n  - (Optional) Button to pause or resume the bot\r\n\r\nIf the admin clicks on the 'More Details' button, it will be taken to the Details page.\r\n\r\n[Screenshot 1 - Offline account](https://user-images.githubusercontent.com/17488630/42197056-5efd4f12-7e57-11e8-9e12-0c690cda9d77.png). [Screenshot 2 - Online account](https://user-images.githubusercontent.com/17488630/43169347-0e676d36-8f77-11e8-8342-ff7f700f2b10.png)\r\n\r\n## 2.4. Overview of the newly implemented management features\r\n\r\nThe features listed here were created using ClientCommands.\r\n\r\n### 2.4.1. Pausing or resuming a bot\r\n\r\nPausing or resuming a bot is handled at the JS SDK, not handled by the bot developer. Therefore any bot that uses the SDK can be paused.\r\n\r\nPaused here means that the SDK will unsubscribe itself from the message stream until it is told to resume or is restarted.\r\n\r\n### 2.4.2. Pinging a bot\r\n\r\nAs it has been [previously requested](https://forums.rocket.chat/t/good-ways-to-check-bots-are-alive-and-well/259), whenever the admin is visiting a bot's details page, the server pings the bot each second to check if it is still alive and to also know the response time of the bot.\r\n\r\n### 2.4.3. Getting statistics from a bot\r\n\r\nBesides statistics that can be retrieved from the server, the total number of messages sent by the account for example, the bot client can also have meaningful data to be displayed in the management view. Therefore the admin can choose to load statistics provided by the bot client. What data is retrieved is specific to each Framework/Adapter.\r\n\r\n## 2.5. Bot Details view\r\n\r\nThe main management page of a bot is its details page. It displays:\r\n  - Status (offline/online/pauseOrResume) - Pause of Resume is displayed when the bot is online and can be paused\r\n  - Editable field displaying the account name\r\n  - Editable field displaying the account username\r\n  - Editable field to be filled with a new password, if it is to bechanged\r\n  - Framework/Adapter used by the bot\r\n  - Connection status displaying the bot's IP address and its response time (ping)\r\n  - Uptime of how long the bot has been online and another for how long the bot has been active (not paused)\r\n  - Roles and the possibility to add or remove them\r\n\r\n[Screenshot 1 - Offline](https://user-images.githubusercontent.com/17488630/42197100-a03c7976-7e57-11e8-8371-0c72e25a6870.png). [Screenshot 2 - Online](https://user-images.githubusercontent.com/17488630/42197119-b3f0f500-7e57-11e8-8437-a12e5951f709.png)\r\n\r\nThe admin can also delete the account and convert the account to the user type. Converting it to the user type will simply edit the `type` attribute and ask for an e-mail if the account does not have one.\r\n\r\nRegarding the statistics view, it is displayed when the admin clicks on 'Load' and currently shows:\r\n  - Total number of messages sent by the bot\r\n  - Total number of messages in which the bot is mentioned\r\n  - Total number of rooms that bot has joined\r\n  - [L] - How many times the bot had to reconnect to the server\r\n  - [L] - How many messages the bot has read\r\n  - [L] - Time when the last message was read\r\n  - [L] - How many users are stored in the Hubot brain (Hubot only).\r\n\r\nItems starting with [L] are retrieved live from the bot client. Note that different adapters can display different information.\r\n\r\n--- \r\n\r\nTodo:\r\n- When receiving a response of a ClientCommand, the instance that receives it uses the `RocketChat` global variable, an EventEmitter, to emit the response to the original caller of the command that is now waiting for the response. On multi-instance servers this original caller might be in another instance, using streams the ClientCommand is broadcasted and the receiver does receive the ClientCommand, however it responds to a server that might be different than the one that sent the ClientCommand, and since I am using the RocketChat EventEmitter, which does not broadcast, the server might not receive the response. Help to fix this would be highly appreciated.\r\n\r\nRelated:\r\n- #10459 - Easier to implement with the differentiation between account types.\r\n- #1086 - Possible using the 'customClientData` user attribute, implemented here\r\n- #10688\r\n\r\nCloses:\r\n- #7125\r\n- #8483\r\n\r\nChanges on SDK: https://github.com/RocketChat/Rocket.Chat.js.SDK/pull/15\r\n\r\nSince there are a lot of images, it is better to use a list\r\n- [List of all bot accounts on the server](https://user-images.githubusercontent.com/17488630/42197042-4f8c168a-7e57-11e8-9fdb-2cb1c483a4b9.png)\r\n- [Form to create a new account (no need to use an e-mail)](https://user-images.githubusercontent.com/17488630/42197061-665419da-7e57-11e8-994d-d40c57db503a.png)\r\n- [Info that is shown after clicking on an account](https://user-images.githubusercontent.com/17488630/42197056-5efd4f12-7e57-11e8-9e12-0c690cda9d77.png)\r\n- [Info about a bot that is online](https://user-images.githubusercontent.com/17488630/43169347-0e676d36-8f77-11e8-8342-ff7f700f2b10.png)\r\n- [Details about a bot that is offline](https://user-images.githubusercontent.com/17488630/42197100-a03c7976-7e57-11e8-8371-0c72e25a6870.png)\r\n- [Statistics about a bot, there's a lot to do here](https://user-images.githubusercontent.com/17488630/42297129-6d37ca6c-7fd3-11e8-8b5f-9f63c259648c.png)\r\n- [Details about a bot that is online](https://user-images.githubusercontent.com/17488630/42197119-b3f0f500-7e57-11e8-8437-a12e5951f709.png)\r\n- [After clicking on \"Convert Account\", to convert an account to `'user'` type](https://user-images.githubusercontent.com/17488630/42197341-b5302d90-7e58-11e8-9b19-c7322682c3ae.png)\r\n- [If the bot account does not have an e-mail set, it asks for a new one since users are required to have](https://user-images.githubusercontent.com/17488630/42197351-c45b63a2-7e58-11e8-9f35-4244113be1f1.png)\r\n- [Showing that an user can be converted to a bot account (useful to upgrade bots that were functioning on older versions of RC)](https://user-images.githubusercontent.com/17488630/42197383-df317b9e-7e58-11e8-98f8-3354d9eff2da.png)\r\n- [Warning after clicking on \"Convert to bot\"](https://user-images.githubusercontent.com/17488630/42197392-e4955a38-7e58-11e8-928e-6b32e93e0538.png)\r\n- [Warning after clicking on \"Delete account\" in the Bot Details page](https://user-images.githubusercontent.com/17488630/42197588-e4b1ef3a-7e59-11e8-95a3-5c0d1441ccab.png)\r\n","created_at":"2018-05-21T13:09:45Z","updated_at":"2018-08-18T22:49:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a2e09403d7bdb9b160900447fe32b2991ebb066f","assignee":{"login":"geekgonecrazy","id":51996,"node_id":"MDQ6VXNlcjUxOTk2","avatar_url":"https://avatars0.githubusercontent.com/u/51996?v=4","gravatar_id":"","url":"https://api.github.com/users/geekgonecrazy","html_url":"https://github.com/geekgonecrazy","followers_url":"https://api.github.com/users/geekgonecrazy/followers","following_url":"https://api.github.com/users/geekgonecrazy/following{/other_user}","gists_url":"https://api.github.com/users/geekgonecrazy/gists{/gist_id}","starred_url":"https://api.github.com/users/geekgonecrazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geekgonecrazy/subscriptions","organizations_url":"https://api.github.com/users/geekgonecrazy/orgs","repos_url":"https://api.github.com/users/geekgonecrazy/repos","events_url":"https://api.github.com/users/geekgonecrazy/events{/privacy}","received_events_url":"https://api.github.com/users/geekgonecrazy/received_events","type":"User","site_admin":false},"assignees":[{"login":"geekgonecrazy","id":51996,"node_id":"MDQ6VXNlcjUxOTk2","avatar_url":"https://avatars0.githubusercontent.com/u/51996?v=4","gravatar_id":"","url":"https://api.github.com/users/geekgonecrazy","html_url":"https://github.com/geekgonecrazy","followers_url":"https://api.github.com/users/geekgonecrazy/followers","following_url":"https://api.github.com/users/geekgonecrazy/following{/other_user}","gists_url":"https://api.github.com/users/geekgonecrazy/gists{/gist_id}","starred_url":"https://api.github.com/users/geekgonecrazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geekgonecrazy/subscriptions","organizations_url":"https://api.github.com/users/geekgonecrazy/orgs","repos_url":"https://api.github.com/users/geekgonecrazy/repos","events_url":"https://api.github.com/users/geekgonecrazy/events{/privacy}","received_events_url":"https://api.github.com/users/geekgonecrazy/received_events","type":"User","site_admin":false},{"login":"rodrigok","id":234261,"node_id":"MDQ6VXNlcjIzNDI2MQ==","avatar_url":"https://avatars1.githubusercontent.com/u/234261?v=4","gravatar_id":"","url":"https://api.github.com/users/rodrigok","html_url":"https://github.com/rodrigok","followers_url":"https://api.github.com/users/rodrigok/followers","following_url":"https://api.github.com/users/rodrigok/following{/other_user}","gists_url":"https://api.github.com/users/rodrigok/gists{/gist_id}","starred_url":"https://api.github.com/users/rodrigok/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rodrigok/subscriptions","organizations_url":"https://api.github.com/users/rodrigok/orgs","repos_url":"https://api.github.com/users/rodrigok/repos","events_url":"https://api.github.com/users/rodrigok/events{/privacy}","received_events_url":"https://api.github.com/users/rodrigok/received_events","type":"User","site_admin":false},{"login":"sampaiodiego","id":8591547,"node_id":"MDQ6VXNlcjg1OTE1NDc=","avatar_url":"https://avatars2.githubusercontent.com/u/8591547?v=4","gravatar_id":"","url":"https://api.github.com/users/sampaiodiego","html_url":"https://github.com/sampaiodiego","followers_url":"https://api.github.com/users/sampaiodiego/followers","following_url":"https://api.github.com/users/sampaiodiego/following{/other_user}","gists_url":"https://api.github.com/users/sampaiodiego/gists{/gist_id}","starred_url":"https://api.github.com/users/sampaiodiego/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sampaiodiego/subscriptions","organizations_url":"https://api.github.com/users/sampaiodiego/orgs","repos_url":"https://api.github.com/users/sampaiodiego/repos","events_url":"https://api.github.com/users/sampaiodiego/events{/privacy}","received_events_url":"https://api.github.com/users/sampaiodiego/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"ggazzo","id":5263975,"node_id":"MDQ6VXNlcjUyNjM5NzU=","avatar_url":"https://avatars2.githubusercontent.com/u/5263975?v=4","gravatar_id":"","url":"https://api.github.com/users/ggazzo","html_url":"https://github.com/ggazzo","followers_url":"https://api.github.com/users/ggazzo/followers","following_url":"https://api.github.com/users/ggazzo/following{/other_user}","gists_url":"https://api.github.com/users/ggazzo/gists{/gist_id}","starred_url":"https://api.github.com/users/ggazzo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ggazzo/subscriptions","organizations_url":"https://api.github.com/users/ggazzo/orgs","repos_url":"https://api.github.com/users/ggazzo/repos","events_url":"https://api.github.com/users/ggazzo/events{/privacy}","received_events_url":"https://api.github.com/users/ggazzo/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":960053538,"node_id":"MDU6TGFiZWw5NjAwNTM1Mzg=","url":"https://api.github.com/repos/RocketChat/Rocket.Chat/labels/gsoc-project","name":"gsoc-project","color":"a185d1","default":false},{"id":872853787,"node_id":"MDU6TGFiZWw4NzI4NTM3ODc=","url":"https://api.github.com/repos/RocketChat/Rocket.Chat/labels/subj:%20Bots","name":"subj: Bots","color":"5319e7","default":false}],"milestone":{"url":"https://api.github.com/repos/RocketChat/Rocket.Chat/milestones/124","html_url":"https://github.com/RocketChat/Rocket.Chat/milestone/124","labels_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/milestones/124/labels","id":3525389,"node_id":"MDk6TWlsZXN0b25lMzUyNTM4OQ==","number":124,"title":"0.69.0","description":"","creator":{"login":"rodrigok","id":234261,"node_id":"MDQ6VXNlcjIzNDI2MQ==","avatar_url":"https://avatars1.githubusercontent.com/u/234261?v=4","gravatar_id":"","url":"https://api.github.com/users/rodrigok","html_url":"https://github.com/rodrigok","followers_url":"https://api.github.com/users/rodrigok/followers","following_url":"https://api.github.com/users/rodrigok/following{/other_user}","gists_url":"https://api.github.com/users/rodrigok/gists{/gist_id}","starred_url":"https://api.github.com/users/rodrigok/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rodrigok/subscriptions","organizations_url":"https://api.github.com/users/rodrigok/orgs","repos_url":"https://api.github.com/users/rodrigok/repos","events_url":"https://api.github.com/users/rodrigok/events{/privacy}","received_events_url":"https://api.github.com/users/rodrigok/received_events","type":"User","site_admin":false},"open_issues":63,"closed_issues":48,"state":"open","created_at":"2018-07-26T13:42:50Z","updated_at":"2018-08-17T22:38:13Z","due_on":"2018-08-27T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/10832/commits","review_comments_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/10832/comments","review_comment_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/issues/10832/comments","statuses_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/statuses/e84b9d57e8840944d8e29dea91d77bc9c8c520ca","head":{"label":"mikaelmello:bot-manager-ui","ref":"bot-manager-ui","sha":"e84b9d57e8840944d8e29dea91d77bc9c8c520ca","user":{"login":"mikaelmello","id":17488630,"node_id":"MDQ6VXNlcjE3NDg4NjMw","avatar_url":"https://avatars3.githubusercontent.com/u/17488630?v=4","gravatar_id":"","url":"https://api.github.com/users/mikaelmello","html_url":"https://github.com/mikaelmello","followers_url":"https://api.github.com/users/mikaelmello/followers","following_url":"https://api.github.com/users/mikaelmello/following{/other_user}","gists_url":"https://api.github.com/users/mikaelmello/gists{/gist_id}","starred_url":"https://api.github.com/users/mikaelmello/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikaelmello/subscriptions","organizations_url":"https://api.github.com/users/mikaelmello/orgs","repos_url":"https://api.github.com/users/mikaelmello/repos","events_url":"https://api.github.com/users/mikaelmello/events{/privacy}","received_events_url":"https://api.github.com/users/mikaelmello/received_events","type":"User","site_admin":false},"repo":{"id":132779439,"node_id":"MDEwOlJlcG9zaXRvcnkxMzI3Nzk0Mzk=","name":"Rocket.Chat","full_name":"mikaelmello/Rocket.Chat","owner":{"login":"mikaelmello","id":17488630,"node_id":"MDQ6VXNlcjE3NDg4NjMw","avatar_url":"https://avatars3.githubusercontent.com/u/17488630?v=4","gravatar_id":"","url":"https://api.github.com/users/mikaelmello","html_url":"https://github.com/mikaelmello","followers_url":"https://api.github.com/users/mikaelmello/followers","following_url":"https://api.github.com/users/mikaelmello/following{/other_user}","gists_url":"https://api.github.com/users/mikaelmello/gists{/gist_id}","starred_url":"https://api.github.com/users/mikaelmello/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikaelmello/subscriptions","organizations_url":"https://api.github.com/users/mikaelmello/orgs","repos_url":"https://api.github.com/users/mikaelmello/repos","events_url":"https://api.github.com/users/mikaelmello/events{/privacy}","received_events_url":"https://api.github.com/users/mikaelmello/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikaelmello/Rocket.Chat","description":"Have your own Slack like online chat, built with Meteor.","fork":true,"url":"https://api.github.com/repos/mikaelmello/Rocket.Chat","forks_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/forks","keys_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/teams","hooks_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/hooks","issue_events_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/issues/events{/number}","events_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/events","assignees_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/assignees{/user}","branches_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/branches{/branch}","tags_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/tags","blobs_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/statuses/{sha}","languages_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/languages","stargazers_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/stargazers","contributors_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/contributors","subscribers_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/subscribers","subscription_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/subscription","commits_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/contents/{+path}","compare_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/merges","archive_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/downloads","issues_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/issues{/number}","pulls_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/pulls{/number}","milestones_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/milestones{/number}","notifications_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/labels{/name}","releases_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/releases{/id}","deployments_url":"https://api.github.com/repos/mikaelmello/Rocket.Chat/deployments","created_at":"2018-05-09T15:46:51Z","updated_at":"2018-06-11T00:54:46Z","pushed_at":"2018-08-18T22:45:02Z","git_url":"git://github.com/mikaelmello/Rocket.Chat.git","ssh_url":"git@github.com:mikaelmello/Rocket.Chat.git","clone_url":"https://github.com/mikaelmello/Rocket.Chat.git","svn_url":"https://github.com/mikaelmello/Rocket.Chat","homepage":"https://rocket.chat/","size":72043,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"RocketChat:develop","ref":"develop","sha":"350738bcd1cf6e5becfa951dd76d25c60b05a004","user":{"login":"RocketChat","id":12508788,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyNTA4Nzg4","avatar_url":"https://avatars1.githubusercontent.com/u/12508788?v=4","gravatar_id":"","url":"https://api.github.com/users/RocketChat","html_url":"https://github.com/RocketChat","followers_url":"https://api.github.com/users/RocketChat/followers","following_url":"https://api.github.com/users/RocketChat/following{/other_user}","gists_url":"https://api.github.com/users/RocketChat/gists{/gist_id}","starred_url":"https://api.github.com/users/RocketChat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RocketChat/subscriptions","organizations_url":"https://api.github.com/users/RocketChat/orgs","repos_url":"https://api.github.com/users/RocketChat/repos","events_url":"https://api.github.com/users/RocketChat/events{/privacy}","received_events_url":"https://api.github.com/users/RocketChat/received_events","type":"Organization","site_admin":false},"repo":{"id":35866694,"node_id":"MDEwOlJlcG9zaXRvcnkzNTg2NjY5NA==","name":"Rocket.Chat","full_name":"RocketChat/Rocket.Chat","owner":{"login":"RocketChat","id":12508788,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyNTA4Nzg4","avatar_url":"https://avatars1.githubusercontent.com/u/12508788?v=4","gravatar_id":"","url":"https://api.github.com/users/RocketChat","html_url":"https://github.com/RocketChat","followers_url":"https://api.github.com/users/RocketChat/followers","following_url":"https://api.github.com/users/RocketChat/following{/other_user}","gists_url":"https://api.github.com/users/RocketChat/gists{/gist_id}","starred_url":"https://api.github.com/users/RocketChat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RocketChat/subscriptions","organizations_url":"https://api.github.com/users/RocketChat/orgs","repos_url":"https://api.github.com/users/RocketChat/repos","events_url":"https://api.github.com/users/RocketChat/events{/privacy}","received_events_url":"https://api.github.com/users/RocketChat/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RocketChat/Rocket.Chat","description":"Have your own Slack like online chat, built with Meteor.","fork":false,"url":"https://api.github.com/repos/RocketChat/Rocket.Chat","forks_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/forks","keys_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/teams","hooks_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/hooks","issue_events_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/issues/events{/number}","events_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/events","assignees_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/assignees{/user}","branches_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/branches{/branch}","tags_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/tags","blobs_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/git/refs{/sha}","trees_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/statuses/{sha}","languages_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/languages","stargazers_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/stargazers","contributors_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/contributors","subscribers_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/subscribers","subscription_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/subscription","commits_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/commits{/sha}","git_commits_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/git/commits{/sha}","comments_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/comments{/number}","issue_comment_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/issues/comments{/number}","contents_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/contents/{+path}","compare_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/merges","archive_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/downloads","issues_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/issues{/number}","pulls_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls{/number}","milestones_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/milestones{/number}","notifications_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/labels{/name}","releases_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/releases{/id}","deployments_url":"https://api.github.com/repos/RocketChat/Rocket.Chat/deployments","created_at":"2015-05-19T07:36:09Z","updated_at":"2018-08-18T14:39:34Z","pushed_at":"2018-08-18T22:45:09Z","git_url":"git://github.com/RocketChat/Rocket.Chat.git","ssh_url":"git@github.com:RocketChat/Rocket.Chat.git","clone_url":"https://github.com/RocketChat/Rocket.Chat.git","svn_url":"https://github.com/RocketChat/Rocket.Chat","homepage":"https://rocket.chat/","size":76734,"stargazers_count":19460,"watchers_count":19460,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":4116,"mirror_url":null,"archived":false,"open_issues_count":2088,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":4116,"open_issues":2088,"watchers":19460,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/10832"},"html":{"href":"https://github.com/RocketChat/Rocket.Chat/pull/10832"},"issue":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/issues/10832"},"comments":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/issues/10832/comments"},"review_comments":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/10832/comments"},"review_comment":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/pulls/10832/commits"},"statuses":{"href":"https://api.github.com/repos/RocketChat/Rocket.Chat/statuses/e84b9d57e8840944d8e29dea91d77bc9c8c520ca"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"codacy-bot"}}