54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
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 }
|
||
}
|
||
}
|