{"action":"created","comment":{"url":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/comments/30027130","id":30027130,"diff_hunk":"@@ -1,66 +1,120 @@\n-kcsrv\n+kcsrv (aka Kan'tColle Server)\n =====\n-\n-**kcsrv** is a project to try to implement an open source KanColle server.  \n-It's currently under very heavy development. Check back later.\n+**kcsrv** is a project to try to implement an open source KanColle server using Python 3.x.  \n+It's currently under very heavy development. Check back later, but if you're really curious, read on and get yourself a copy.\n \n What Currently Works\n --------------------\n-- Actually logging in (this is an achievement because of how temperamental KanColle is when it doesn't get the exact response it works back\n+- Game login\n+- First ship enlistment (Fubuki and friends)\n - Main port screen\n - Resources things (furniture, sound, etc)\n \n+What Doesn't Work\n+--------------------\n+- Anything not listed above.\n \n FAQ\n ---\n \n-### Q: Will I be able to import my data from an official server?\n-\n-Theoretically, yes. The only downside is it will require your API key to import your ships2 data and your admiral information. This may get your account banned.\n-\n-### Q: Why is it built on Python?\n+### Q: Will I be able to import my data from an official DMM server?\n+Theoretically, yes.   \n+The only downside is it will require your API key to import your ships2 data and your admiral information. This may get your account banned for whatever lame DMM reason.  \n+It is recommended you start fresh on your copy of this server. \n \n-There aren't actually that many things you can build a web application on, and most of them were out from the start.\n+### Q: What is the recommended requirements?\n+- Debian or Ubuntu based distro. Fedora and friends may work, but please, YMMV.\n+- Python 3.x and knowledge about virtualenv (setup and activate).\n+- Internet connection to download the DMM assets.\n \n-* PHP is [an ungodly clusterfuck](http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/) that's insanely unwieldly, performs about as well as a football team in Antarctica and is a nightmare to maintain.  \n-  I've written large applications in PHP before, and I'm not going there again.\n+Protip: Use a VM (VMWare, VirtualBox). If you mess up, simply hose it and start squeaky clean. Or you can use an ARM based linux box (R-Pi, ODROID, etc).\n \n-* Ruby and Java are both massive resource hogs, and this server needs to be able to scale well, preferably without me having me hire another server I can't pay for.  \n-  I run a JIRA (Java) and a Discourse (Ruby) instance, and they both chew up nearly everything their servers have to give.\n+### Q: Why is it built on Python?\n+There aren't actually that many things you can build a web application on, and most of them were out from the start.    \n+There was a large rant by one the kcsrv owner, I (SoftwareGuy) who improved this FAQ have condensed it down to make it less ranty.\n \n+* PHP is [an ungodly clusterfuck](http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/).\n+* Ruby / Java are both massive resource hogs, and this server needs to be able to scale well.  \n+They seem to eat the server alive.\n * NodeJS is actually a good candidate, mostly thanks to being blazing fast.  \n-  Unfortunately, nearly everything around it (including the runtime itself) is in beta, and many things (such as database abstraction layers) simply aren't mature enough for me to want to depend on it - I have yet to see a robust migration system, for instance.  \n-  One day I might even port over at least parts of the server to it (the game API comes to mind), but not right now.\n+  Unfortunately, nearly everything around it (including the runtime itself) is in beta.\n \n-Python isn't the fastest thing around, but both it and its ecosystem are very stable and mature. SQLAlchemy + Alembic alone makes an incredibly robust database abstraction layer, that nothing I've seen in NodeJS can match. (Do feel free to prove me wrong though.)\n+Python isn't the fastest thing around, but both it and its ecosystem are very stable and mature. SQLAlchemy + Alembic alone makes an incredibly robust database abstraction layer, that nothing I've seen in NodeJS can match. \n \n+### Q: Why PostgreSQL?\n+* ***MySQL*** is [notoriously awful](http://grimoire.ca/mysql/choose-something-else), with the most important piece of incompetent nonsense being the lack of Transactional DDL… which means a failed migration (for whatever reason) may leave the database in an inconsistent state.\n+* ***SQLite*** is a good second choice, but it sometimes behaves oddly, and lacks some more advanced features. It'll also slow down with a lot of data, not that a development server is really in any danger of hitting that point.\n+* ***lol MS SQL and Oracle***, I hope you like enterprise nonsense.\n \n Development Setup\n ---\n \n-Probably only works on Linux. Screw Ansible/Vagrant, too hard for me.\n-\n-1.  **Set up the environment.**  \n-\n-        pip install -r requirements.txt\n-        sudo -u postgre createuser -s $USER\n-        sudo -u postgre createdb kcsrv\n+Ingredients:\n+---  \n+* Python 3\n+* ```virtualenv```\n+* PostgreSQL (+ development headers)\n+\n+Cooking Instructions:\n+---  \n+1.  **Set up the environment.**\n+\n+    \tgit clone http://github.com/kancolletool/kcsrv.git kcsrv\n+    \tcd kcsrv\n+    \tvirtualenv -p /usr/bin/python3 .\n+    \tsource ./bin/activate\n+        \n+    Now, enter the project's Virtual Environment. This contraption allows you to install packages locally, without conflicting with system packages. It's activated per-terminal, and must be activated before interacting with the project in any way:\n+  \n+        # Not a typo; `.` is an alias for `source`  \n+        . bin/activate\n+        \n+    If you wish to exit it again, simply run:\n+\n+        deactivate\n+        \n+1. **Install dependencies.**  \n+    Inside the virtualenv, simply run:\n+\n+    \tpip install -r requirements.txt\n+\n+    If you ever get issues with things not being found, try re-running this and seeing what happens.\n+    \n+1. **Set up the database***  \n+    First, make sure you have a database user for the account you plan on running the server as. Postgres can automatically authorize as the user a process is running as, which means there's no need to put passwords in configuration files.\n \n+        sudo -u postgres createuser --superuser $USER\n+        \n+    Then, create a database for kcsrv to use:\n+        sudo -u postgres createdb kcsrv  \n \n-1.  **Create the database.**  \n-    Repeat this to upgrade it later.\n+    Change postgres to what user the server installs as. On Debian/Ubuntu it's postgres.\n+    And fill it with data - repeat this after every upgrade:\n+    \n+        ./manage.py db upgrade   # Run migrations\n+        ./manage.py db update_db # Imports ship data into the database\n+        \n+    First Boot? You'll need to set up a few things.\n     \n-        ./manage.py db upgrade\n         ./manage.py setup\n-        ./manage.py update_db\n+\n+1. **Download the DMM assets.**  \n+    This will take a while... you may want to re-run it after game patches, to stay up-to-date. At this point, grab a coffee.\n+\n+    Please note that this won't pull new ships automatically, you'll need to feed the server a new api_start2.json every time DMM introduces more ships to collect. Gotta ship 'em all!\n+\n+        ./manage.py dlassets\n \n 1.  **Create an account for yourself.**  \n     Be sure to give yourself the `admin` and `staff` roles!\n-    \n-        ./manage.py user create\n+    Depending on your terminal, you may need to put the email address in quotation marks.\n \n+        ./manage.py user create <username> <email>\n+        # Example: ./manage.py user create MyAdmiralName \"you@localhost\"","path":"README.md","position":144,"original_position":144,"commit_id":"69145ae710736789a9a97e5641a156b9eedd00ad","original_commit_id":"69145ae710736789a9a97e5641a156b9eedd00ad","user":{"login":"uppfinnarn","id":428026,"avatar_url":"https://avatars.githubusercontent.com/u/428026?v=3","gravatar_id":"","url":"https://api.github.com/users/uppfinnarn","html_url":"https://github.com/uppfinnarn","followers_url":"https://api.github.com/users/uppfinnarn/followers","following_url":"https://api.github.com/users/uppfinnarn/following{/other_user}","gists_url":"https://api.github.com/users/uppfinnarn/gists{/gist_id}","starred_url":"https://api.github.com/users/uppfinnarn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/uppfinnarn/subscriptions","organizations_url":"https://api.github.com/users/uppfinnarn/orgs","repos_url":"https://api.github.com/users/uppfinnarn/repos","events_url":"https://api.github.com/users/uppfinnarn/events{/privacy}","received_events_url":"https://api.github.com/users/uppfinnarn/received_events","type":"User","site_admin":false},"body":"Actually, where do you even need to quote @-signs? Both `zsh` and `bash` swallow it unquoted no problem on my machine.","created_at":"2015-05-11T10:17:59Z","updated_at":"2015-05-11T10:17:59Z","html_url":"https://github.com/KanColleTool/kcsrv/pull/18#discussion_r30027130","pull_request_url":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/18","_links":{"self":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/comments/30027130"},"html":{"href":"https://github.com/KanColleTool/kcsrv/pull/18#discussion_r30027130"},"pull_request":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/18"}}},"pull_request":{"url":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/18","id":35058175,"html_url":"https://github.com/KanColleTool/kcsrv/pull/18","diff_url":"https://github.com/KanColleTool/kcsrv/pull/18.diff","patch_url":"https://github.com/KanColleTool/kcsrv/pull/18.patch","issue_url":"https://api.github.com/repos/KanColleTool/kcsrv/issues/18","number":18,"state":"open","locked":false,"title":"New improved verbose shiny README file","user":{"login":"SoftwareGuy","id":1762115,"avatar_url":"https://avatars.githubusercontent.com/u/1762115?v=3","gravatar_id":"","url":"https://api.github.com/users/SoftwareGuy","html_url":"https://github.com/SoftwareGuy","followers_url":"https://api.github.com/users/SoftwareGuy/followers","following_url":"https://api.github.com/users/SoftwareGuy/following{/other_user}","gists_url":"https://api.github.com/users/SoftwareGuy/gists{/gist_id}","starred_url":"https://api.github.com/users/SoftwareGuy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SoftwareGuy/subscriptions","organizations_url":"https://api.github.com/users/SoftwareGuy/orgs","repos_url":"https://api.github.com/users/SoftwareGuy/repos","events_url":"https://api.github.com/users/SoftwareGuy/events{/privacy}","received_events_url":"https://api.github.com/users/SoftwareGuy/received_events","type":"User","site_admin":false},"body":"Explains more than the current README plus better instructions for setting up the game server.\r\nWill help newcomers get started quickly, rather than asking questions or bashing around in the bush.","created_at":"2015-05-09T00:53:22Z","updated_at":"2015-05-11T10:17:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"785e61b3b1b5b481fba82f917a4290ed513b8459","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/18/commits","review_comments_url":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/18/comments","review_comment_url":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/comments{/number}","comments_url":"https://api.github.com/repos/KanColleTool/kcsrv/issues/18/comments","statuses_url":"https://api.github.com/repos/KanColleTool/kcsrv/statuses/69145ae710736789a9a97e5641a156b9eedd00ad","head":{"label":"SoftwareGuy:patch-1","ref":"patch-1","sha":"69145ae710736789a9a97e5641a156b9eedd00ad","user":{"login":"SoftwareGuy","id":1762115,"avatar_url":"https://avatars.githubusercontent.com/u/1762115?v=3","gravatar_id":"","url":"https://api.github.com/users/SoftwareGuy","html_url":"https://github.com/SoftwareGuy","followers_url":"https://api.github.com/users/SoftwareGuy/followers","following_url":"https://api.github.com/users/SoftwareGuy/following{/other_user}","gists_url":"https://api.github.com/users/SoftwareGuy/gists{/gist_id}","starred_url":"https://api.github.com/users/SoftwareGuy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SoftwareGuy/subscriptions","organizations_url":"https://api.github.com/users/SoftwareGuy/orgs","repos_url":"https://api.github.com/users/SoftwareGuy/repos","events_url":"https://api.github.com/users/SoftwareGuy/events{/privacy}","received_events_url":"https://api.github.com/users/SoftwareGuy/received_events","type":"User","site_admin":false},"repo":{"id":35193519,"name":"kcsrv","full_name":"SoftwareGuy/kcsrv","owner":{"login":"SoftwareGuy","id":1762115,"avatar_url":"https://avatars.githubusercontent.com/u/1762115?v=3","gravatar_id":"","url":"https://api.github.com/users/SoftwareGuy","html_url":"https://github.com/SoftwareGuy","followers_url":"https://api.github.com/users/SoftwareGuy/followers","following_url":"https://api.github.com/users/SoftwareGuy/following{/other_user}","gists_url":"https://api.github.com/users/SoftwareGuy/gists{/gist_id}","starred_url":"https://api.github.com/users/SoftwareGuy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SoftwareGuy/subscriptions","organizations_url":"https://api.github.com/users/SoftwareGuy/orgs","repos_url":"https://api.github.com/users/SoftwareGuy/repos","events_url":"https://api.github.com/users/SoftwareGuy/events{/privacy}","received_events_url":"https://api.github.com/users/SoftwareGuy/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/SoftwareGuy/kcsrv","description":"An open source KanColle server","fork":true,"url":"https://api.github.com/repos/SoftwareGuy/kcsrv","forks_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/forks","keys_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/teams","hooks_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/hooks","issue_events_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/issues/events{/number}","events_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/events","assignees_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/assignees{/user}","branches_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/branches{/branch}","tags_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/tags","blobs_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/git/refs{/sha}","trees_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/statuses/{sha}","languages_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/languages","stargazers_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/stargazers","contributors_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/contributors","subscribers_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/subscribers","subscription_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/subscription","commits_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/commits{/sha}","git_commits_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/git/commits{/sha}","comments_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/comments{/number}","issue_comment_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/issues/comments{/number}","contents_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/contents/{+path}","compare_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/merges","archive_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/downloads","issues_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/issues{/number}","pulls_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/pulls{/number}","milestones_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/milestones{/number}","notifications_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/labels{/name}","releases_url":"https://api.github.com/repos/SoftwareGuy/kcsrv/releases{/id}","created_at":"2015-05-07T02:06:52Z","updated_at":"2015-05-08T06:08:06Z","pushed_at":"2015-05-11T01:23:46Z","git_url":"git://github.com/SoftwareGuy/kcsrv.git","ssh_url":"git@github.com:SoftwareGuy/kcsrv.git","clone_url":"https://github.com/SoftwareGuy/kcsrv.git","svn_url":"https://github.com/SoftwareGuy/kcsrv","homepage":null,"size":26548,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"KanColleTool:master","ref":"master","sha":"729e610929fbab4341228ca4006f55e1252020c6","user":{"login":"KanColleTool","id":6275764,"avatar_url":"https://avatars.githubusercontent.com/u/6275764?v=3","gravatar_id":"","url":"https://api.github.com/users/KanColleTool","html_url":"https://github.com/KanColleTool","followers_url":"https://api.github.com/users/KanColleTool/followers","following_url":"https://api.github.com/users/KanColleTool/following{/other_user}","gists_url":"https://api.github.com/users/KanColleTool/gists{/gist_id}","starred_url":"https://api.github.com/users/KanColleTool/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KanColleTool/subscriptions","organizations_url":"https://api.github.com/users/KanColleTool/orgs","repos_url":"https://api.github.com/users/KanColleTool/repos","events_url":"https://api.github.com/users/KanColleTool/events{/privacy}","received_events_url":"https://api.github.com/users/KanColleTool/received_events","type":"Organization","site_admin":false},"repo":{"id":22546113,"name":"kcsrv","full_name":"KanColleTool/kcsrv","owner":{"login":"KanColleTool","id":6275764,"avatar_url":"https://avatars.githubusercontent.com/u/6275764?v=3","gravatar_id":"","url":"https://api.github.com/users/KanColleTool","html_url":"https://github.com/KanColleTool","followers_url":"https://api.github.com/users/KanColleTool/followers","following_url":"https://api.github.com/users/KanColleTool/following{/other_user}","gists_url":"https://api.github.com/users/KanColleTool/gists{/gist_id}","starred_url":"https://api.github.com/users/KanColleTool/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KanColleTool/subscriptions","organizations_url":"https://api.github.com/users/KanColleTool/orgs","repos_url":"https://api.github.com/users/KanColleTool/repos","events_url":"https://api.github.com/users/KanColleTool/events{/privacy}","received_events_url":"https://api.github.com/users/KanColleTool/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/KanColleTool/kcsrv","description":"An open source KanColle server","fork":false,"url":"https://api.github.com/repos/KanColleTool/kcsrv","forks_url":"https://api.github.com/repos/KanColleTool/kcsrv/forks","keys_url":"https://api.github.com/repos/KanColleTool/kcsrv/keys{/key_id}","collaborators_url":"https://api.github.com/repos/KanColleTool/kcsrv/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/KanColleTool/kcsrv/teams","hooks_url":"https://api.github.com/repos/KanColleTool/kcsrv/hooks","issue_events_url":"https://api.github.com/repos/KanColleTool/kcsrv/issues/events{/number}","events_url":"https://api.github.com/repos/KanColleTool/kcsrv/events","assignees_url":"https://api.github.com/repos/KanColleTool/kcsrv/assignees{/user}","branches_url":"https://api.github.com/repos/KanColleTool/kcsrv/branches{/branch}","tags_url":"https://api.github.com/repos/KanColleTool/kcsrv/tags","blobs_url":"https://api.github.com/repos/KanColleTool/kcsrv/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/KanColleTool/kcsrv/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/KanColleTool/kcsrv/git/refs{/sha}","trees_url":"https://api.github.com/repos/KanColleTool/kcsrv/git/trees{/sha}","statuses_url":"https://api.github.com/repos/KanColleTool/kcsrv/statuses/{sha}","languages_url":"https://api.github.com/repos/KanColleTool/kcsrv/languages","stargazers_url":"https://api.github.com/repos/KanColleTool/kcsrv/stargazers","contributors_url":"https://api.github.com/repos/KanColleTool/kcsrv/contributors","subscribers_url":"https://api.github.com/repos/KanColleTool/kcsrv/subscribers","subscription_url":"https://api.github.com/repos/KanColleTool/kcsrv/subscription","commits_url":"https://api.github.com/repos/KanColleTool/kcsrv/commits{/sha}","git_commits_url":"https://api.github.com/repos/KanColleTool/kcsrv/git/commits{/sha}","comments_url":"https://api.github.com/repos/KanColleTool/kcsrv/comments{/number}","issue_comment_url":"https://api.github.com/repos/KanColleTool/kcsrv/issues/comments{/number}","contents_url":"https://api.github.com/repos/KanColleTool/kcsrv/contents/{+path}","compare_url":"https://api.github.com/repos/KanColleTool/kcsrv/compare/{base}...{head}","merges_url":"https://api.github.com/repos/KanColleTool/kcsrv/merges","archive_url":"https://api.github.com/repos/KanColleTool/kcsrv/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/KanColleTool/kcsrv/downloads","issues_url":"https://api.github.com/repos/KanColleTool/kcsrv/issues{/number}","pulls_url":"https://api.github.com/repos/KanColleTool/kcsrv/pulls{/number}","milestones_url":"https://api.github.com/repos/KanColleTool/kcsrv/milestones{/number}","notifications_url":"https://api.github.com/repos/KanColleTool/kcsrv/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/KanColleTool/kcsrv/labels{/name}","releases_url":"https://api.github.com/repos/KanColleTool/kcsrv/releases{/id}","created_at":"2014-08-02T12:54:55Z","updated_at":"2015-05-09T17:20:45Z","pushed_at":"2015-05-11T05:59:36Z","git_url":"git://github.com/KanColleTool/kcsrv.git","ssh_url":"git@github.com:KanColleTool/kcsrv.git","clone_url":"https://github.com/KanColleTool/kcsrv.git","svn_url":"https://github.com/KanColleTool/kcsrv","homepage":null,"size":26643,"stargazers_count":15,"watchers_count":15,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"open_issues_count":4,"forks":8,"open_issues":4,"watchers":15,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/18"},"html":{"href":"https://github.com/KanColleTool/kcsrv/pull/18"},"issue":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/issues/18"},"comments":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/issues/18/comments"},"review_comments":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/18/comments"},"review_comment":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/pulls/18/commits"},"statuses":{"href":"https://api.github.com/repos/KanColleTool/kcsrv/statuses/69145ae710736789a9a97e5641a156b9eedd00ad"}}}}