ai/src/friend.ts

111 lines
2.2 KiB
TypeScript
Raw Normal View History

2018-08-27 11:22:59 +00:00
import from './ai';
import IModule from './module';
export type FriendDoc = {
userId: string;
user: any;
name?: string;
love?: number;
lastLoveIncrementedAt?: string;
todayLoveIncrements?: number;
perModulesData?: any;
};
export default class Friend {
private ai: ;
public get userId() {
return this.doc.userId;
}
public get name() {
return this.doc.name;
}
public get love() {
return this.doc.love || 0;
}
public doc: FriendDoc;
constructor(ai: , opts: { user?: any, doc?: FriendDoc }) {
this.ai = ai;
if (opts.user) {
this.doc = this.ai.friends.findOne({
userId: opts.user.id
});
if (this.doc == null) {
this.doc = this.ai.friends.insertOne({
userId: opts.user.id,
user: opts.user
});
} else {
this.doc.user = opts.user;
this.save();
}
} else {
this.doc = opts.doc;
}
}
public updateUser = (user: any) => {
this.doc.user = user;
this.save();
}
public getPerModulesData = (module: IModule) => {
if (this.doc.perModulesData == null) {
this.doc.perModulesData = {};
this.doc.perModulesData[module.name] = {};
this.save();
} else if (this.doc.perModulesData[module.name] == null) {
this.doc.perModulesData[module.name] = {};
this.save();
}
return this.doc.perModulesData[module.name];
}
public setPerModulesData = (module: IModule, data: any) => {
if (this.doc.perModulesData == null) {
this.doc.perModulesData = {};
}
this.doc.perModulesData[module.name] = data;
this.save();
}
public incLove = () => {
const now = new Date();
const y = now.getFullYear();
const m = now.getMonth();
const d = now.getDate();
const today = `${y}/${m + 1}/${d}`;
if (this.doc.lastLoveIncrementedAt != today) {
this.doc.todayLoveIncrements = 0;
}
// 1日に上げられる親愛度は最大3
if (this.doc.lastLoveIncrementedAt == today && this.doc.todayLoveIncrements >= 3) return;
if (this.doc.love == null) this.doc.love = 0;
this.doc.love++;
this.doc.lastLoveIncrementedAt = today;
this.doc.todayLoveIncrements = (this.doc.todayLoveIncrements || 0) + 1;
this.save();
}
public updateName = (name: string) => {
this.doc.name = name;
this.save();
}
public save = () => {
this.ai.friends.update(this.doc);
}
}