From 61d225f52fbb54afdd4c3a26bbaafecee8f89655 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 1 Feb 2017 00:43:06 +0900
Subject: [PATCH] =?UTF-8?q?=E3=82=84=E3=81=A3=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/api/service/github.ts | 25 ++++++++++++++++++++++++-
 src/config.ts             |  2 +-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/api/service/github.ts b/src/api/service/github.ts
index 680c02c47a..8f7efc8ad4 100644
--- a/src/api/service/github.ts
+++ b/src/api/service/github.ts
@@ -1,10 +1,22 @@
 import * as express from 'express';
 const createHandler = require('github-webhook-handler');
+import User from '../models/user';
 import config from '../../conf';
 
-module.exports = (app: express.Application) => {
+module.exports = async (app: express.Application) => {
 	if (config.github_bot == null) return;
 
+	const bot = await User.findOne({
+		username_lower: config.github_bot.username.toLowerCase()
+	});
+
+	if (bot == null) {
+		console.warn(`GitHub hook bot specified, but not found: @${config.github_bot.username}`);
+		return;
+	}
+
+	const post = text => require('../endpoints/posts/create')({ text }, bot);
+
 	const handler = createHandler({
 		path: '/hooks/github',
 		secret: config.github_bot.hook_secret
@@ -15,4 +27,15 @@ module.exports = (app: express.Application) => {
 	handler.on('*', event => {
 		console.dir(event);
 	});
+
+	handler.on('issues', event => {
+		let title: string;
+		switch (event.payload.action) {
+			case 'opened': title = 'Issueが立ちました'; break;
+			case 'closed': title = 'Issueが閉じられました'; break;
+			case 'reopened': title = 'Issueが開きました'; break;
+		}
+		const text = `${title}: ${event.payload.issue.number}「${event.payload.issue.title}」\n${event.payload.issue.url}`;
+		post(text);
+	});
 };
diff --git a/src/config.ts b/src/config.ts
index e63e3c05ae..5b043d3498 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -63,7 +63,7 @@ interface ISource {
 	};
 	github_bot?: {
 		hook_secret: string;
-		bot_token: string;
+		username: string;
 	};
 }