Initial commit
This commit is contained in:
53
cloudfunctions/sendGreeting/index.js
Normal file
53
cloudfunctions/sendGreeting/index.js
Normal file
@@ -0,0 +1,53 @@
|
||||
const cloud = require('wx-server-sdk')
|
||||
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
|
||||
const db = cloud.database()
|
||||
|
||||
exports.main = async (event, context) => {
|
||||
const { OPENID } = cloud.getWXContext()
|
||||
const { toUserId, petId } = event
|
||||
|
||||
if (!toUserId) return { code: -1, message: '缺少目标用户' }
|
||||
if (toUserId === OPENID) return { code: -1, message: '不能给自己打招呼' }
|
||||
|
||||
try {
|
||||
// 防刷:5分钟内同一对用户只能打一次招呼
|
||||
const cooldownMs = 5 * 60 * 1000
|
||||
const recent = await db.collection('messages')
|
||||
.where({
|
||||
fromId: OPENID,
|
||||
toId: toUserId,
|
||||
type: 'greeting',
|
||||
createdAt: db.command.gt(new Date(Date.now() - cooldownMs).toISOString()),
|
||||
})
|
||||
.count()
|
||||
|
||||
if (recent.total > 0) {
|
||||
return { code: -1, message: '打招呼太频繁了,稍后再试' }
|
||||
}
|
||||
|
||||
// 获取发送者信息
|
||||
const senderRes = await db.collection('users')
|
||||
.where({ openid: OPENID })
|
||||
.field({ nickName: true, pets: true })
|
||||
.get()
|
||||
const sender = senderRes.data[0]
|
||||
const pet = sender?.pets?.find(p => p._id === petId) || sender?.pets?.[0]
|
||||
|
||||
const greeting = `${sender?.nickName || '小伙伴'} 想认识你的宠物!${pet ? `TA 的 ${pet.name} 向你打了个招呼 🐾` : '来聊聊吧 🐾'}`
|
||||
|
||||
await db.collection('messages').add({
|
||||
data: {
|
||||
fromId: OPENID,
|
||||
toId: toUserId,
|
||||
content: greeting,
|
||||
type: 'greeting',
|
||||
isRead: false,
|
||||
createdAt: db.serverDate(),
|
||||
},
|
||||
})
|
||||
|
||||
return { code: 0, data: null }
|
||||
} catch (e) {
|
||||
return { code: -1, message: e.message }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user