2019-01-14 15:14:22 +00:00
|
|
|
import autobind from 'autobind-decorator';
|
|
|
|
import 藍, { InstallerResult } from './ai';
|
|
|
|
|
|
|
|
export default abstract class Module {
|
2019-01-15 01:26:48 +00:00
|
|
|
public abstract readonly name: string;
|
2019-01-14 15:14:22 +00:00
|
|
|
|
|
|
|
protected ai: 藍;
|
2019-05-10 02:55:07 +00:00
|
|
|
private doc: any;
|
2019-01-14 15:14:22 +00:00
|
|
|
|
2019-01-15 17:10:42 +00:00
|
|
|
public init(ai: 藍) {
|
2019-01-14 15:14:22 +00:00
|
|
|
this.ai = ai;
|
2019-05-10 02:55:07 +00:00
|
|
|
|
|
|
|
this.doc = this.ai.moduleData.findOne({
|
|
|
|
module: this.name
|
|
|
|
});
|
|
|
|
|
|
|
|
if (this.doc == null) {
|
|
|
|
this.doc = this.ai.moduleData.insertOne({
|
|
|
|
module: this.name,
|
|
|
|
data: {}
|
|
|
|
});
|
|
|
|
}
|
2019-01-14 15:14:22 +00:00
|
|
|
}
|
2018-09-18 23:52:06 +00:00
|
|
|
|
2019-01-14 15:14:22 +00:00
|
|
|
public abstract install(): InstallerResult;
|
|
|
|
|
|
|
|
@autobind
|
|
|
|
protected log(msg: string) {
|
2019-01-24 08:47:13 +00:00
|
|
|
this.ai.log(`[${this.name}]: ${msg}`);
|
2019-01-14 15:14:22 +00:00
|
|
|
}
|
|
|
|
|
2019-02-01 16:53:06 +00:00
|
|
|
/**
|
|
|
|
* コンテキストを生成し、ユーザーからの返信を待ち受けます
|
|
|
|
* @param key コンテキストを識別するためのキー
|
|
|
|
* @param isDm トークメッセージ上のコンテキストかどうか
|
|
|
|
* @param id トークメッセージ上のコンテキストならばトーク相手のID、そうでないなら待ち受ける投稿のID
|
|
|
|
* @param data コンテキストに保存するオプションのデータ
|
|
|
|
*/
|
2019-01-14 15:14:22 +00:00
|
|
|
@autobind
|
2019-01-15 09:47:22 +00:00
|
|
|
protected subscribeReply(key: string, isDm: boolean, id: string, data?: any) {
|
|
|
|
this.ai.subscribeReply(this, key, isDm, id, data);
|
2019-01-14 15:14:22 +00:00
|
|
|
}
|
|
|
|
|
2019-02-01 16:53:06 +00:00
|
|
|
/**
|
|
|
|
* 返信の待ち受けを解除します
|
|
|
|
* @param key コンテキストを識別するためのキー
|
|
|
|
*/
|
2019-01-14 15:14:22 +00:00
|
|
|
@autobind
|
2019-01-15 01:10:41 +00:00
|
|
|
protected unsubscribeReply(key: string) {
|
2019-01-14 15:14:22 +00:00
|
|
|
this.ai.unsubscribeReply(this, key);
|
|
|
|
}
|
2019-02-01 17:06:51 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 指定したミリ秒経過後に、タイムアウトコールバックを呼び出します。
|
|
|
|
* このタイマーは記憶に永続化されるので、途中でプロセスを再起動しても有効です。
|
|
|
|
* @param delay ミリ秒
|
|
|
|
* @param data オプションのデータ
|
|
|
|
*/
|
|
|
|
@autobind
|
|
|
|
public setTimeoutWithPersistence(delay: number, data?: any) {
|
|
|
|
this.ai.setTimeoutWithPersistence(this, delay, data);
|
|
|
|
}
|
2019-05-10 02:55:07 +00:00
|
|
|
|
|
|
|
@autobind
|
|
|
|
protected getData() {
|
|
|
|
return this.doc.data;
|
|
|
|
}
|
|
|
|
|
|
|
|
@autobind
|
|
|
|
protected setData(data: any) {
|
|
|
|
this.doc.data = data;
|
|
|
|
this.ai.moduleData.update(this.doc);
|
|
|
|
}
|
2019-01-14 15:14:22 +00:00
|
|
|
}
|