170 lines
5.3 KiB
JavaScript
170 lines
5.3 KiB
JavaScript
|
|
|
|
const MESSAGE = WORLD.MESSAGE;
|
|
MESSAGE.pushUserMessage = function (toid, from, msg) {
|
|
let user = this.stores.get(toid);
|
|
if (!user) {
|
|
user = new Map();
|
|
this.stores.set(toid, user);
|
|
}
|
|
let store = user.get(from.id);
|
|
if (!store) {
|
|
store = { name: from.name, items: [] };
|
|
user.set(from.id, store);
|
|
}
|
|
msg.index = store.items.length;
|
|
store.items.push(msg);
|
|
|
|
}
|
|
MESSAGE.getUserMessages = function (me) {
|
|
let store = this.stores.get(me.id);
|
|
let newMessages = [];
|
|
if (this.NOTICES.length) {
|
|
let nt = this.NOTICES[this.NOTICES.length - 1];
|
|
newMessages.push({
|
|
id: "notice",
|
|
content: nt.content.length > 50 ? nt.content.substring(0, 50) : nt.content,
|
|
time: nt.time,
|
|
name: "公告"
|
|
});
|
|
}
|
|
if (store) {
|
|
let diff_time = 24 * 3600000 * 30;
|
|
let now = Date.now();
|
|
store.forEach((x, y) => {
|
|
let last = x.items[x.items.length - 1];
|
|
if (last) {
|
|
if (now - last.time < diff_time)
|
|
newMessages.push({
|
|
id: y,
|
|
name: x.name,
|
|
content: last.content,
|
|
time: last.time
|
|
});
|
|
}
|
|
});
|
|
}
|
|
return newMessages;
|
|
}
|
|
MESSAGE.getMessageFromID = function (me, from, count) {
|
|
let items = [];
|
|
if (from !== "notice") {
|
|
let store = this.stores.get(me.id);
|
|
if (!store) return;
|
|
let list = store.get(from);
|
|
if (!list) return items;
|
|
items = list.items;
|
|
} else {
|
|
items = this.NOTICES;
|
|
}
|
|
count = count || 0;
|
|
let ary = [];
|
|
let diff_time = 24 * 3600000 * 30;
|
|
let now = Date.now();
|
|
for (let i = 0; i < 13; i++) {
|
|
let index = items.length - count - i - 1;
|
|
if (index < 0) break;
|
|
if (now - items[index].time < diff_time)
|
|
ary.push(items[index]);
|
|
}
|
|
return ary;
|
|
}
|
|
MESSAGE.getMessageByIndex = function (me, from, index) {
|
|
let store = this.stores.get(me.id);
|
|
if (!store) return;
|
|
let list = store.get(from);
|
|
return list && list.items[index];
|
|
}
|
|
MESSAGE.save = function () {
|
|
|
|
let str = ["["];
|
|
let now = Date.now();
|
|
let diff_time = 24 * 3600000 * 30;
|
|
this.stores.forEach((x, uid) => {
|
|
if (str.length > 1) str.push(",");
|
|
str.push("{id:\"");
|
|
str.push(uid);
|
|
str.push("\",items:[");
|
|
let isReceive = false;
|
|
x.forEach((st, from) => {
|
|
if (isReceive) str.push(",");
|
|
str.push("{uid:\"");
|
|
str.push(from);
|
|
str.push("\",name:\"");
|
|
str.push(st.name);
|
|
str.push("\",items:[");
|
|
let ishasmsg = false;
|
|
for (let i = 0; i < st.items.length; i++) {
|
|
let item = st.items[i];
|
|
if (now - item.time < diff_time) {
|
|
if (ishasmsg) str.push(",");
|
|
str.push("{time:");
|
|
str.push(item.time);
|
|
str.push(",content:`");
|
|
str.push(item.content);
|
|
str.push("`");
|
|
if (item.attach) {
|
|
str.push(",attach:[");
|
|
for (let j = 0; j < item.attach.length; j++) {
|
|
str.push("{name:\"");
|
|
str.push(item.attach[j].name);
|
|
str.push("\",obj:\"");
|
|
str.push(item.attach[j].obj);
|
|
str.push("\",count:");
|
|
str.push(item.attach[j].count || 1);
|
|
str.push("}");
|
|
if (j !== item.attach.length - 1) {
|
|
str.push(",");
|
|
}
|
|
}
|
|
str.push("]");
|
|
if (item.rec) {
|
|
str.push(",rec:true");
|
|
}
|
|
}
|
|
str.push("}");
|
|
ishasmsg = true;
|
|
}
|
|
}
|
|
str.push("]}");
|
|
isReceive = true;
|
|
});
|
|
str.push("]}");
|
|
});
|
|
str.push("]");
|
|
return str.join("");
|
|
}
|
|
MESSAGE.saveNotice = function () {
|
|
if (this.NOTICES.length > 500) this.NOTICES.splice(0, this.NOTICES.length - 500);
|
|
return JSON.stringify(this.NOTICES);
|
|
}
|
|
MESSAGE.load = function (data) {
|
|
this.NOTICES = data.notices ?? [];
|
|
let sts = data.messages ?? [];
|
|
if (!sts) return;
|
|
for (let i = 0; i < sts.length; i++) {
|
|
let st = sts[i];
|
|
let user = new Map();
|
|
for (let j = 0; j < st.items.length; j++) {
|
|
let ust = st.items[j];
|
|
let obj = {
|
|
name: ust.name,
|
|
items: []
|
|
};
|
|
for (let k = 0; k < ust.items.length; k++) {
|
|
let msg = ust.items[k];
|
|
obj.items.push({
|
|
content: msg.content,
|
|
time: msg.time,
|
|
rec: msg.rec,
|
|
attach: msg.attach,
|
|
index: obj.items.length
|
|
});
|
|
}
|
|
user.set(ust.uid, obj);
|
|
}
|
|
this.stores.set(st.id, user);
|
|
}
|
|
console.log("消息数据已加载");
|
|
}
|