summaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-11-11 00:27:02 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-11-11 00:27:02 +0900
commit3f0f307104300e148b02f05fd51ac833f9b75b01 (patch)
tree131ad6c84bcbad684d0fac285915953045e30627 /src/api
parentv2996 (diff)
downloadsharkey-3f0f307104300e148b02f05fd51ac833f9b75b01.tar.gz
sharkey-3f0f307104300e148b02f05fd51ac833f9b75b01.tar.bz2
sharkey-3f0f307104300e148b02f05fd51ac833f9b75b01.zip
[LINE] 通知の表示に対応
Diffstat (limited to 'src/api')
-rw-r--r--src/api/bot/core.ts24
-rw-r--r--src/api/models/notification.ts39
2 files changed, 62 insertions, 1 deletions
diff --git a/src/api/bot/core.ts b/src/api/bot/core.ts
index 8324390880..ff3f681804 100644
--- a/src/api/bot/core.ts
+++ b/src/api/bot/core.ts
@@ -5,6 +5,7 @@ import User, { IUser, init as initUser } from '../models/user';
import getPostSummary from '../../common/get-post-summary';
import getUserSummary from '../../common/get-user-summary';
+import getNotificationSummary from '../../common/get-notification-summary';
import Othello, { ai as othelloAi } from '../../common/othello';
@@ -84,6 +85,7 @@ export default class BotCore extends EventEmitter {
'logout, signout: サインアウトします\n' +
'post: 投稿します\n' +
'tl: タイムラインを見ます\n' +
+ 'no: 通知を見ます\n' +
'@<ユーザー名>: ユーザーを表示します';
case 'me':
@@ -115,6 +117,11 @@ export default class BotCore extends EventEmitter {
case 'タイムライン':
return await this.tlCommand();
+ case 'no':
+ case 'notifications':
+ case '通知':
+ return await this.notificationsCommand();
+
case 'guessing-game':
case '数当てゲーム':
this.setContext(new GuessingGameContext(this));
@@ -155,6 +162,7 @@ export default class BotCore extends EventEmitter {
this.emit('updated');
}
+ // TODO: if (this.user == null) return 'まずサインインしてください。'; を @signinRequired みたいなデコレータでいい感じにする
public async tlCommand(): Promise<string | void> {
if (this.user == null) return 'まずサインインしてください。';
@@ -163,7 +171,21 @@ export default class BotCore extends EventEmitter {
}, this.user);
const text = tl
- .map(post => getPostSummary(post))
+ .map(post => post.user.name + ': ' + getPostSummary(post))
+ .join('\n-----\n');
+
+ return text;
+ }
+
+ public async notificationsCommand(): Promise<string | void> {
+ if (this.user == null) return 'まずサインインしてください。';
+
+ const notifications = await require('../endpoints/i/notifications')({
+ limit: 5
+ }, this.user);
+
+ const text = notifications
+ .map(notification => getNotificationSummary(notification))
.join('\n-----\n');
return text;
diff --git a/src/api/models/notification.ts b/src/api/models/notification.ts
index 1065e8baaa..ecd1c25e10 100644
--- a/src/api/models/notification.ts
+++ b/src/api/models/notification.ts
@@ -1,8 +1,47 @@
import * as mongo from 'mongodb';
import db from '../../db/mongodb';
+import { IUser } from './user';
export default db.get('notifications') as any; // fuck type definition
export interface INotification {
_id: mongo.ObjectID;
+ created_at: Date;
+
+ /**
+ * 通知の受信者
+ */
+ notifiee?: IUser;
+
+ /**
+ * 通知の受信者
+ */
+ notifiee_id: mongo.ObjectID;
+
+ /**
+ * イニシエータ(initiator)。通知を行う原因となったユーザー
+ */
+ notifier?: IUser;
+
+ /**
+ * イニシエータ(initiator)。通知を行う原因となったユーザー
+ */
+ notifier_id: mongo.ObjectID;
+
+ /**
+ * 通知の種類。
+ * follow - フォローされた
+ * mention - 投稿で自分が言及された
+ * reply - (自分または自分がWatchしている)投稿が返信された
+ * repost - (自分または自分がWatchしている)投稿がRepostされた
+ * quote - (自分または自分がWatchしている)投稿が引用Repostされた
+ * reaction - (自分または自分がWatchしている)投稿にリアクションされた
+ * poll_vote - (自分または自分がWatchしている)投稿の投票に投票された
+ */
+ type: 'follow' | 'mention' | 'reply' | 'repost' | 'quote' | 'reaction' | 'poll_vote';
+
+ /**
+ * 通知が読まれたかどうか
+ */
+ is_read: Boolean;
}