( stat: AdminStat, index: number, total: number, )
| 743 | const hasNoMessages = avg <= 0; |
| 744 | const recentDays = |
| 745 | stat.sortLastMessageTs > 0 |
| 746 | ? Math.floor((Date.now() - stat.sortLastMessageTs) / DAY_MS) |
| 747 | : Number.POSITIVE_INFINITY; |
| 748 | const seed = `tail:${stat.userId}:${index}:${total}:${Math.round(avg * 100)}`; |
| 749 | |
| 750 | if (total === 1) { |
| 751 | return "全场就你一个,尾榜也只能你来站岗"; |
| 752 | } |
| 753 | if (isBottom && hasNoMessages) { |
| 754 | return pickStableText(seed, [ |
| 755 | "尾王登基,发言记录比头发还稀", |
| 756 | "喜提垫底,群聊存在感约等于空气", |
| 757 | "本群静音代言人,查无发言", |
| 758 | ]); |
| 759 | } |
| 760 | if (isBottom) { |
| 761 | return pickStableText(seed, [ |
| 762 | "稳居榜尾,主打一个陪伴不发言", |
| 763 | "尾榜状元,今天也把字省下来了", |
| 764 | "发言效率感人,成功拿下最后一名", |
| 765 | ]); |
| 766 | } |
| 767 | if (isBottomThree && hasNoMessages && recentDays > 7) { |
| 768 | return pickStableText(seed, [ |
| 769 | "长期失踪人口,像是顺手加进来的管理员", |
| 770 | "潜水深度过高,群消息已经追不上你", |
| 771 | "上次开口像在上个版本", |
| 772 | ]); |
| 773 | } |
| 774 | if (isBottomThree && avg < 1) { |
| 775 | return pickStableText(seed, [ |
| 776 | "尾部常驻嘉宾,发言全靠缘分刷新", |
| 777 | "输入法像是包月到期了", |
| 778 | "平时不说话,一说话可能是手滑", |
| 779 | ]); |
| 780 | } |
| 781 | if (isBottomFive && recentDays > 3) { |
| 782 | return pickStableText(seed, [ |
| 783 | "最近略显安静,像是把群折叠了", |
| 784 | "看得出来人在群里,魂不一定在", |
| 785 | "出勤勉强合格,输出接近请假", |
| 786 | ]); |
| 787 | } |
| 788 | if (avg < 1) { |
| 789 | return pickStableText(seed, [ |
| 790 | "低频营业,惜字如金到像在收费", |
| 791 | "主打沉默管理,发言像限量发售", |
| 792 | "在线旁听专家,开口次数相当克制", |
| 793 | ]); |
| 794 | } |
| 795 | if (avg < 2 && recentDays <= 1) { |
| 796 | return pickStableText(seed, [ |
| 797 | "今天象征性冒了个泡,任务算完成", |
| 798 | "刚打完卡就准备继续潜水", |
| 799 | "有在努力,但不多", |
| 800 | ]); |
| 801 | } |
| 802 | if (avg < 3) { |
no test coverage detected