| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- const db = require('../plugin/DataBase/db')
- function nowMs() {
- return Date.now()
- }
- function isVipByUser(user) {
- const expire = Number(user?.vip_expire_time || 0)
- if (expire > nowMs()) return true
- return Number(user?.vip || 0) === 1 && expire === 0
- }
- async function getUserVipInfo(uuid, executor = db) {
- const rows = await executor.query(
- 'SELECT vip, vip_expire_time FROM users WHERE uuid = ? LIMIT 1',
- [uuid]
- )
- const user = rows?.[0] || {}
- const vipExpireTime = Number(user.vip_expire_time || 0)
- return {
- vip: isVipByUser(user),
- vip_expire_time: vipExpireTime,
- legacy_vip: Number(user.vip || 0)
- }
- }
- function calculateNextVipExpire({ currentExpireTime = 0, payTime = nowMs(), validityType, validDays = 0, fixedExpireTime = 0 }) {
- const current = Number(currentExpireTime || 0)
- const paidAt = Number(payTime || nowMs())
- const type = String(validityType || 'none')
- if (type === 'days') {
- const days = Math.max(0, Number(validDays || 0))
- if (days <= 0) return current
- const base = current > paidAt ? current : paidAt
- return base + days * 24 * 60 * 60 * 1000
- }
- if (type === 'fixed') {
- return Math.max(current, Number(fixedExpireTime || 0))
- }
- return current
- }
- module.exports = {
- isVipByUser,
- getUserVipInfo,
- calculateNextVipExpire
- }
|