forked from Lete114/Valine-Admin-Server
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cloud.js
90 lines (82 loc) · 2.57 KB
/
cloud.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
const AV = require("leanengine");
const mail = require("./utilities/send-mail");
const Comment = AV.Object.extend("Comment");
const axios = require("axios");
const spam = require("./utilities/check-spam");
function sendNotification(currentComment, defaultIp) {
// 发送博主通知邮件
if (currentComment.get("mail") !== process.env.TO_EMAIL) {
mail.notice(currentComment);
}
const ip = currentComment.get("ip") || defaultIp;
console.log("IP: %s", ip);
spam.checkSpam(currentComment, ip);
// AT评论通知
const rid = currentComment.get("pid") || currentComment.get("rid");
if (!rid) {
console.log("这条评论没有 @ 任何人");
return;
} else if (currentComment.get("isSpam")) {
console.log("评论未通过审核,通知邮件暂不发送");
return;
}
const query = new AV.Query("Comment");
query.get(rid).then(
function (parentComment) {
if (
parentComment.get("mail") &&
parentComment.get("mail") !== process.env.TO_EMAIL
) {
mail.send(currentComment, parentComment);
} else {
console.log("被@者匿名,不会发送通知");
}
},
function (error) {
console.warn("获取@对象失败!");
}
);
}
AV.Cloud.afterSave("Comment", function (req) {
const currentComment = req.object;
// 检查垃圾评论
return sendNotification(currentComment, req.meta.remoteAddress);
});
AV.Cloud.define("resend_mails", function (req) {
const query = new AV.Query(Comment);
query.greaterThanOrEqualTo(
"createdAt",
new Date(new Date().getTime() - 24 * 60 * 60 * 1000)
);
query.notEqualTo("isNotified", true);
// 如果你的评论量很大,可以适当调高数量限制,最高1000
query.limit(200);
return query.find().then(function (results) {
new Promise((resolve, reject) => {
count = results.length;
for (var i = 0; i < results.length; i++) {
sendNotification(results[i], req.meta.remoteAddress);
}
resolve(count);
})
.then((count) => {
console.log(`昨日${count}条未成功发送的通知邮件处理完毕!`);
})
.catch((error) => {
console.error(`昨日未成功发送的通知邮件处理失败:`, error);
});
});
});
AV.Cloud.define("self_wake", function (req) {
axios
.get(process.env.ADMIN_URL)
.then(function (response) {
console.log(
"自唤醒任务执行成功,响应状态码为:",
response && response.status
);
})
.catch(function (error) {
console.error("自唤醒任务执行失败:", error);
});
});