Files
ChatLab/packages/chart-ranking/types.ts
T
2026-02-19 22:56:41 +08:00

210 lines
4.2 KiB
TypeScript

/**
* chart-ranking 插件类型定义
* 从 @/types/analysis 提取的榜单相关类型
*/
// ==================== 基础类型 ====================
export interface MemberActivity {
memberId: number
platformId: string
name: string
messageCount: number
percentage: number
avatar?: string | null
}
// ==================== 夜猫分析 ====================
export type NightOwlTitle = '养生达人' | '偶尔失眠' | '经常失眠' | '夜猫子' | '秃头预备役' | '修仙练习生' | '守夜冠军'
export interface NightOwlRankItem {
memberId: number
platformId: string
name: string
totalNightMessages: number
title: NightOwlTitle
hourlyBreakdown: {
h23: number
h0: number
h1: number
h2: number
h3to4: number
}
percentage: number
}
export interface TimeRankItem {
memberId: number
platformId: string
name: string
count: number
avgTime: string
extremeTime: string
percentage: number
}
export interface ConsecutiveNightRecord {
memberId: number
platformId: string
name: string
maxConsecutiveDays: number
currentStreak: number
}
export interface NightOwlChampion {
memberId: number
platformId: string
name: string
score: number
nightMessages: number
lastSpeakerCount: number
consecutiveDays: number
}
export interface NightOwlAnalysis {
nightOwlRank: NightOwlRankItem[]
lastSpeakerRank: TimeRankItem[]
firstSpeakerRank: TimeRankItem[]
consecutiveRecords: ConsecutiveNightRecord[]
champions: NightOwlChampion[]
totalDays: number
}
// ==================== 龙王分析 ====================
export interface DragonKingRankItem {
memberId: number
platformId: string
name: string
count: number
percentage: number
}
export interface DragonKingAnalysis {
rank: DragonKingRankItem[]
totalDays: number
}
// ==================== 潜水分析 ====================
export interface DivingRankItem {
memberId: number
platformId: string
name: string
lastMessageTs: number
daysSinceLastMessage: number
}
export interface DivingAnalysis {
rank: DivingRankItem[]
}
// ==================== 复读分析 ====================
export interface RepeatStatItem {
memberId: number
platformId: string
name: string
count: number
percentage: number
}
export interface RepeatRateItem {
memberId: number
platformId: string
name: string
count: number
totalMessages: number
rate: number
}
export interface ChainLengthDistribution {
length: number
count: number
}
export interface HotRepeatContent {
content: string
count: number
maxChainLength: number
originatorName: string
lastTs: number
firstMessageId: number
}
export interface FastestRepeaterItem {
memberId: number
platformId: string
name: string
count: number
avgTimeDiff: number
}
export interface RepeatAnalysis {
originators: RepeatStatItem[]
initiators: RepeatStatItem[]
breakers: RepeatStatItem[]
fastestRepeaters: FastestRepeaterItem[]
originatorRates: RepeatRateItem[]
initiatorRates: RepeatRateItem[]
breakerRates: RepeatRateItem[]
chainLengthDistribution: ChainLengthDistribution[]
hotContents: HotRepeatContent[]
avgChainLength: number
totalRepeatChains: number
}
// ==================== 斗图分析 ====================
export interface MemeBattleRankItem {
memberId: number
platformId: string
name: string
count: number
percentage: number
}
export interface MemeBattleRecord {
startTime: number
endTime: number
totalImages: number
participantCount: number
participants: Array<{
memberId: number
name: string
imageCount: number
}>
}
export interface MemeBattleAnalysis {
topBattles: MemeBattleRecord[]
rankByCount: MemeBattleRankItem[]
rankByImageCount: MemeBattleRankItem[]
totalBattles: number
}
// ==================== 打卡分析 ====================
export interface StreakRankItem {
memberId: number
name: string
maxStreak: number
maxStreakStart: string
maxStreakEnd: string
currentStreak: number
}
export interface LoyaltyRankItem {
memberId: number
name: string
totalDays: number
percentage: number
}
export interface CheckInAnalysis {
streakRank: StreakRankItem[]
loyaltyRank: LoyaltyRankItem[]
totalDays: number
}