( stat: AdminStat, index: number, total: number, )
| 670 | const hasLockedSeat = stat.lockedSeat; |
| 671 | const hasNoMessages = avg <= 0; |
| 672 | const recentDays = |
| 673 | stat.sortLastMessageTs > 0 |
| 674 | ? Math.floor((Date.now() - stat.sortLastMessageTs) / DAY_MS) |
| 675 | : Number.POSITIVE_INFINITY; |
| 676 | const seed = `${stat.userId}:${index}:${total}:${Math.round(avg * 100)}`; |
| 677 | |
| 678 | if (total === 1) { |
| 679 | return "一人撑起全场"; |
| 680 | } |
| 681 | if (isFirst && avg >= 20) { |
| 682 | return pickStableText(seed, ["水王本王", "群聊永动机", "打字机成精"]); |
| 683 | } |
| 684 | if (isFirst) { |
| 685 | return pickStableText(seed, ["水王", "榜一大哥", "稳坐龙椅"]); |
| 686 | } |
| 687 | if (isTopThree && hasLockedSeat) { |
| 688 | return pickStableText(seed, ["前排带编", "稳坐泰山", "头部玩家"]); |
| 689 | } |
| 690 | if (!isTopHalf && hasLockedSeat && hasNoMessages) { |
| 691 | return pickStableText(seed, ["PY 交易", "占坑选手", "席位焊死"]); |
| 692 | } |
| 693 | if (!isTopHalf && hasLockedSeat) { |
| 694 | return pickStableText(seed, ["PY 交易", "关系户发力", "编制护体"]); |
| 695 | } |
| 696 | if (hasLockedSeat && avg >= 8) { |
| 697 | return pickStableText(seed, ["带编劳模", "既有席位也有输出", "稳中带卷"]); |
| 698 | } |
| 699 | if (hasLockedSeat) { |
| 700 | return pickStableText(seed, ["席位保送", "内定嘉宾", "VIP 通道"]); |
| 701 | } |
| 702 | if (avg >= 12) { |
| 703 | return pickStableText(seed, ["高强度输出", "劳模发言机", "持续火力覆盖"]); |
| 704 | } |
| 705 | if (avg >= 6) { |
| 706 | return pickStableText(seed, ["稳定营业", "手感正热", "状态在线"]); |
| 707 | } |
| 708 | if (avg >= 2 && recentDays <= 1) { |
| 709 | return pickStableText(seed, ["今天也没闲着", "在线上分", "还在持续发电"]); |
| 710 | } |
| 711 | if (avg >= 1) { |
| 712 | return pickStableText(seed, ["偶尔冒泡", "佛系开麦", "低频输出"]); |
| 713 | } |
| 714 | if (hasNoMessages && recentDays <= 3) { |
| 715 | return pickStableText(seed, ["只上线不说话", "在线潜水", "围观群众"]); |
| 716 | } |
| 717 | if (hasNoMessages && isBottom) { |
| 718 | return pickStableText(seed, ["垫底保级", "佛系挂机", "查无发言"]); |
| 719 | } |
| 720 | if (isBottom) { |
| 721 | return pickStableText(seed, ["后排看戏", "边缘试探", "末位观察员"]); |
| 722 | } |
| 723 | |
| 724 | return pickStableText(seed, [ |
| 725 | "安静围观", |
| 726 | "主打陪伴", |
| 727 | "默默潜伏", |
| 728 | "随机掉落", |
| 729 | "随缘发言", |
no test coverage detected