ai/src/message.ts

90 lines
1.9 KiB
TypeScript
Raw Normal View History

2019-01-15 03:29:11 +00:00
import autobind from 'autobind-decorator';
2018-08-11 06:26:25 +00:00
import from './ai';
2018-08-27 11:22:59 +00:00
import Friend from './friend';
2018-08-28 21:37:14 +00:00
import { User } from './misskey/user';
2018-09-02 12:50:57 +00:00
import includes from './utils/includes';
2018-09-02 13:35:38 +00:00
import or from './utils/or';
2019-01-15 03:29:11 +00:00
import chalk from 'chalk';
const delay = require('timeout-as-promise');
2018-08-11 01:42:06 +00:00
2019-01-15 09:47:22 +00:00
export default class Message {
2018-08-11 01:42:06 +00:00
private ai: ;
private messageOrNote: any;
2019-01-15 09:47:22 +00:00
public isDm: boolean;
2018-08-11 01:42:06 +00:00
2018-08-28 21:37:14 +00:00
public get id(): string {
2018-08-11 01:42:06 +00:00
return this.messageOrNote.id;
}
2018-08-28 21:37:14 +00:00
public get user(): User {
return this.messageOrNote.user;
}
2018-08-28 21:37:14 +00:00
public get userId(): string {
2018-08-11 01:42:06 +00:00
return this.messageOrNote.userId;
}
2018-08-28 21:37:14 +00:00
public get text(): string {
2018-08-11 01:42:06 +00:00
return this.messageOrNote.text;
}
2019-01-23 16:21:40 +00:00
public get extractedText(): string {
return this.text
.replace(new RegExp(`^@${this.ai.account.username}(@.+?)?\s?`, 'i'), '')
.trim();
}
2018-08-28 21:37:14 +00:00
public get replyId(): string {
return this.messageOrNote.replyId;
}
2018-08-27 11:22:59 +00:00
public friend: Friend;
2018-08-27 10:04:09 +00:00
2019-01-15 09:47:22 +00:00
constructor(ai: , messageOrNote: any, isDm: boolean) {
2018-08-11 01:42:06 +00:00
this.ai = ai;
this.messageOrNote = messageOrNote;
2019-01-15 09:47:22 +00:00
this.isDm = isDm;
2018-08-27 10:04:09 +00:00
2018-08-27 11:22:59 +00:00
this.friend = new Friend(ai, { user: this.user });
// メッセージなどに付いているユーザー情報は省略されている場合があるので完全なユーザー情報を持ってくる
this.ai.api('users/show', {
2018-08-27 10:04:09 +00:00
userId: this.userId
2018-08-27 11:22:59 +00:00
}).then(user => {
this.friend.updateUser(user);
2018-08-27 10:04:09 +00:00
});
2018-08-11 01:42:06 +00:00
}
2019-01-15 03:29:11 +00:00
@autobind
2019-01-23 13:18:02 +00:00
public async reply(text: string, cw?: string, renote?: string) {
2018-09-02 13:23:10 +00:00
if (text == null) return;
2019-01-15 03:29:11 +00:00
this.ai.log(`>>> Sending reply to ${chalk.underline(this.id)}`);
2018-08-11 03:34:24 +00:00
await delay(2000);
2019-01-15 09:47:22 +00:00
if (this.isDm) {
return await this.ai.sendMessage(this.messageOrNote.userId, {
text: text
});
} else {
return await this.ai.post({
replyId: this.messageOrNote.id,
text: text,
2019-01-23 13:18:02 +00:00
cw: cw,
renoteId: renote
});
}
2018-08-11 01:42:06 +00:00
}
2018-09-02 12:50:57 +00:00
2019-01-15 03:29:11 +00:00
@autobind
public includes(words: string[]): boolean {
2018-09-02 12:50:57 +00:00
return includes(this.text, words);
}
2018-09-02 13:23:10 +00:00
2019-01-15 03:29:11 +00:00
@autobind
public or(words: (string | RegExp)[]): boolean {
2018-09-02 13:23:10 +00:00
return or(this.text, words);
}
2018-08-11 01:42:06 +00:00
}