import { definePlugin } from 'kivibot' export default definePlugin({ name: 'retire', version: '1.0.0', setup(ctx) { ctx.handle('message', async (e) => { if (e.raw_message.startsWith('#退休计算')) { const [year = '', month = '', type = ''] = e.raw_message .replace('#退休计算', '') .trim() .split(' ') .map((v) => v.trim()) .filter(Boolean) if (year.length !== 4 || +month > 12 || +month < 1 || !['男', '女50', '女55'].includes(type)) { e.reply( ctx.dedent(` 参数有误,请参考使用说明 👇 #退休计算 <年份> <月份> <类型> 类型包含:男、女50、女55 例如: #退休计算 1990 12 男 #退休计算 2000 5 女55 #退休计算 2004 8 女50 `), ) return } const sexType = type === '男' ? 'male' : type === '女55' ? 'female55' : 'female50' const data = calculateRetirement(+year, +month, sexType) e.reply( ctx.dedent( ` 〓 法定退休年龄计算结果 〓 出生年月:${year}年${month}月 退休年龄:${data.retirementAge} 退休时间:${data.retirementTime} 延迟月数:${data.delayMonths} `, ), ) } }) }, }) type RetirementInfo = { retirementAge: string retirementTime: string delayMonths: string } function calculateRetirement( yearOfBirth: number, monthOfBirth: number, type: 'male' | 'female50' | 'female55', ): RetirementInfo { const monthDiff = (fromYear: number, fromMonth: number, toYear: number, toMonth: number): number => { return (toYear - fromYear) * 12 + toMonth - fromMonth } const addMonths = (date: Date, months: number): Date => { date.setMonth(date.getMonth() + months) return date } let retirementAge = '' let retirementTime = '' let delayMonths = 0 if (type === 'male') { if (yearOfBirth < 1965) { retirementAge = '60岁' delayMonths = 0 } else if (yearOfBirth > 1976) { retirementAge = '63岁' delayMonths = 36 } else { const diff = Math.ceil(monthDiff(1965, 1, yearOfBirth, monthOfBirth) / 4) const extraYears = Math.floor(diff / 12) const extraMonths = diff % 12 retirementAge = `${60 + extraYears}岁${extraMonths > 0 ? `${extraMonths}个月` : ''}` delayMonths = diff } } else if (type === 'female55') { if (yearOfBirth < 1970) { retirementAge = '55岁' delayMonths = 0 } else if (yearOfBirth > 1981) { retirementAge = '58岁' delayMonths = 36 } else { const diff = Math.ceil(monthDiff(1970, 1, yearOfBirth, monthOfBirth) / 4) const extraYears = Math.floor(diff / 12) const extraMonths = diff % 12 retirementAge = `${55 + extraYears}岁${extraMonths > 0 ? `${extraMonths}个月` : ''}` delayMonths = diff } } else if (type === 'female50') { if (yearOfBirth < 1975) { retirementAge = '50岁' delayMonths = 0 } else if (yearOfBirth > 1984) { retirementAge = '55岁' delayMonths = 60 } else { const diff = Math.ceil(monthDiff(1975, 1, yearOfBirth, monthOfBirth) / 2) const extraYears = Math.floor(diff / 12) const extraMonths = diff % 12 retirementAge = `${50 + extraYears}岁${extraMonths > 0 ? `${extraMonths}个月` : ''}` delayMonths = diff } } const retirementStartDate = addMonths( new Date(yearOfBirth, monthOfBirth - 1), (type === 'male' ? 60 : type === 'female55' ? 55 : 50) * 12 + delayMonths, ) retirementTime = `${retirementStartDate.getFullYear()}年${retirementStartDate.getMonth() + 1}月` return { retirementAge, retirementTime, delayMonths: `${delayMonths}个月`, } }