mirror of
https://github.com/syuilo/ai.git
synced 2024-11-22 05:08:00 +00:00
Refactor
This commit is contained in:
parent
c95c2c76ef
commit
140d3c324d
10
src/ai.ts
10
src/ai.ts
|
@ -11,6 +11,7 @@ import { FriendDoc } from './friend';
|
||||||
import { User } from './misskey/user';
|
import { User } from './misskey/user';
|
||||||
import getCollection from './utils/get-collection';
|
import getCollection from './utils/get-collection';
|
||||||
import Stream from './stream';
|
import Stream from './stream';
|
||||||
|
import log from './log';
|
||||||
|
|
||||||
type MentionHook = (msg: MessageLike) => boolean | HandlerResult;
|
type MentionHook = (msg: MessageLike) => boolean | HandlerResult;
|
||||||
type ContextHook = (msg: MessageLike, data?: any) => void | HandlerResult;
|
type ContextHook = (msg: MessageLike, data?: any) => void | HandlerResult;
|
||||||
|
@ -49,14 +50,17 @@ export default class 藍 {
|
||||||
constructor(account: User, ready: (run: Function) => void) {
|
constructor(account: User, ready: (run: Function) => void) {
|
||||||
this.account = account;
|
this.account = account;
|
||||||
|
|
||||||
|
this.log('Lodaing the memory...');
|
||||||
|
|
||||||
this.db = new loki('memory.json', {
|
this.db = new loki('memory.json', {
|
||||||
autoload: true,
|
autoload: true,
|
||||||
autosave: true,
|
autosave: true,
|
||||||
autosaveInterval: 1000,
|
autosaveInterval: 1000,
|
||||||
autoloadCallback: err => {
|
autoloadCallback: err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
this.log(chalk.red(`Failed to load DB: ${err}`));
|
this.log(chalk.red(`Failed to load the memory: ${err}`));
|
||||||
} else {
|
} else {
|
||||||
|
this.log(chalk.green('The memory loaded successfully'));
|
||||||
ready(this.run);
|
ready(this.run);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,7 +69,7 @@ export default class 藍 {
|
||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
public log(msg: string) {
|
public log(msg: string) {
|
||||||
console.log(`[AiOS]: ${msg}`);
|
log(chalk`[{magenta AiOS}]: ${msg}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
|
@ -122,7 +126,7 @@ export default class 藍 {
|
||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
private onMention(msg: MessageLike) {
|
private onMention(msg: MessageLike) {
|
||||||
this.log(`mention received: ${msg.id}`);
|
this.log(chalk.gray(`<<< An message received: ${chalk.underline(msg.id)}`));
|
||||||
|
|
||||||
const context = !msg.isMessage && msg.replyId == null ? null : this.contexts.findOne(msg.isMessage ? {
|
const context = !msg.isMessage && msg.replyId == null ? null : this.contexts.findOne(msg.isMessage ? {
|
||||||
isMessage: true,
|
isMessage: true,
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import autobind from 'autobind-decorator';
|
||||||
import 藍 from './ai';
|
import 藍 from './ai';
|
||||||
import IModule from './module';
|
import IModule from './module';
|
||||||
import getDate from './utils/get-date';
|
import getDate from './utils/get-date';
|
||||||
|
@ -52,12 +53,14 @@ export default class Friend {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public updateUser = (user: User) => {
|
@autobind
|
||||||
|
public updateUser(user: User) {
|
||||||
this.doc.user = user;
|
this.doc.user = user;
|
||||||
this.save();
|
this.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public getPerModulesData = (module: IModule) => {
|
@autobind
|
||||||
|
public getPerModulesData(module: IModule) {
|
||||||
if (this.doc.perModulesData == null) {
|
if (this.doc.perModulesData == null) {
|
||||||
this.doc.perModulesData = {};
|
this.doc.perModulesData = {};
|
||||||
this.doc.perModulesData[module.name] = {};
|
this.doc.perModulesData[module.name] = {};
|
||||||
|
@ -70,7 +73,8 @@ export default class Friend {
|
||||||
return this.doc.perModulesData[module.name];
|
return this.doc.perModulesData[module.name];
|
||||||
}
|
}
|
||||||
|
|
||||||
public setPerModulesData = (module: IModule, data: any) => {
|
@autobind
|
||||||
|
public setPerModulesData(module: IModule, data: any) {
|
||||||
if (this.doc.perModulesData == null) {
|
if (this.doc.perModulesData == null) {
|
||||||
this.doc.perModulesData = {};
|
this.doc.perModulesData = {};
|
||||||
}
|
}
|
||||||
|
@ -80,7 +84,8 @@ export default class Friend {
|
||||||
this.save();
|
this.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public incLove = () => {
|
@autobind
|
||||||
|
public incLove() {
|
||||||
const today = getDate();
|
const today = getDate();
|
||||||
|
|
||||||
if (this.doc.lastLoveIncrementedAt != today) {
|
if (this.doc.lastLoveIncrementedAt != today) {
|
||||||
|
@ -101,7 +106,8 @@ export default class Friend {
|
||||||
this.save();
|
this.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public decLove = () => {
|
@autobind
|
||||||
|
public decLove() {
|
||||||
if (this.doc.love == null) this.doc.love = 0;
|
if (this.doc.love == null) this.doc.love = 0;
|
||||||
this.doc.love--;
|
this.doc.love--;
|
||||||
|
|
||||||
|
@ -116,12 +122,14 @@ export default class Friend {
|
||||||
this.save();
|
this.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public updateName = (name: string) => {
|
@autobind
|
||||||
|
public updateName(name: string) {
|
||||||
this.doc.name = name;
|
this.doc.name = name;
|
||||||
this.save();
|
this.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public save = () => {
|
@autobind
|
||||||
|
public save() {
|
||||||
this.ai.friends.update(this.doc);
|
this.ai.friends.update(this.doc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 藍 from './ai';
|
import 藍 from './ai';
|
||||||
import config from './config';
|
import config from './config';
|
||||||
|
import _log from './log';
|
||||||
|
|
||||||
import CoreModule from './modules/core';
|
import CoreModule from './modules/core';
|
||||||
import BirthdayModule from './modules/birthday';
|
import BirthdayModule from './modules/birthday';
|
||||||
|
@ -21,13 +22,13 @@ import * as request from 'request-promise-native';
|
||||||
const promiseRetry = require('promise-retry');
|
const promiseRetry = require('promise-retry');
|
||||||
|
|
||||||
function log(msg: string): void {
|
function log(msg: string): void {
|
||||||
console.log(`[Boot]: ${msg}`);
|
_log(`[Boot]: ${msg}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
log(chalk.bold('Ai v1.0'));
|
log(chalk.bold('Ai v1.0'));
|
||||||
|
|
||||||
promiseRetry(retry => {
|
promiseRetry(retry => {
|
||||||
log(`Account fetching... >>> ${config.host}`);
|
log(`Account fetching... (${config.host})`);
|
||||||
return request.post(`${config.apiUrl}/i`, {
|
return request.post(`${config.apiUrl}/i`, {
|
||||||
json: {
|
json: {
|
||||||
i: config.i
|
i: config.i
|
||||||
|
|
9
src/log.ts
Normal file
9
src/log.ts
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
export default function(msg: string) {
|
||||||
|
const now = new Date();
|
||||||
|
const date = `${zeroPad(now.getHours())}:${zeroPad(now.getMinutes())}:${zeroPad(now.getSeconds())}`;
|
||||||
|
console.log(`${date} ${msg}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function zeroPad(num: number, length: number = 2): string {
|
||||||
|
return ('0000000000' + num).slice(-length);
|
||||||
|
}
|
|
@ -1,8 +1,10 @@
|
||||||
|
import autobind from 'autobind-decorator';
|
||||||
import 藍 from './ai';
|
import 藍 from './ai';
|
||||||
import Friend from './friend';
|
import Friend from './friend';
|
||||||
import { User } from './misskey/user';
|
import { User } from './misskey/user';
|
||||||
import includes from './utils/includes';
|
import includes from './utils/includes';
|
||||||
import or from './utils/or';
|
import or from './utils/or';
|
||||||
|
import chalk from 'chalk';
|
||||||
const delay = require('timeout-as-promise');
|
const delay = require('timeout-as-promise');
|
||||||
|
|
||||||
export default class MessageLike {
|
export default class MessageLike {
|
||||||
|
@ -47,10 +49,11 @@ export default class MessageLike {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public reply = async (text: string, cw?: string) => {
|
@autobind
|
||||||
|
public async reply(text: string, cw?: string) {
|
||||||
if (text == null) return;
|
if (text == null) return;
|
||||||
|
|
||||||
this.ai.log(`sending reply of ${this.id} ...`);
|
this.ai.log(`>>> Sending reply to ${chalk.underline(this.id)}`);
|
||||||
|
|
||||||
await delay(2000);
|
await delay(2000);
|
||||||
|
|
||||||
|
@ -67,11 +70,13 @@ export default class MessageLike {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public includes = (words: string[]): boolean => {
|
@autobind
|
||||||
|
public includes(words: string[]): boolean {
|
||||||
return includes(this.text, words);
|
return includes(this.text, words);
|
||||||
}
|
}
|
||||||
|
|
||||||
public or = (words: (string | RegExp)[]): boolean => {
|
@autobind
|
||||||
|
public or(words: (string | RegExp)[]): boolean {
|
||||||
return or(this.text, words);
|
return or(this.text, words);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue