mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-05-21 13:50:18 +08:00
115 lines
2.4 KiB
TypeScript
115 lines
2.4 KiB
TypeScript
/**
|
|
* chart-message 插件本地类型定义
|
|
*/
|
|
|
|
/** 消息类型枚举 */
|
|
export enum MessageType {
|
|
TEXT = 0,
|
|
IMAGE = 1,
|
|
VOICE = 2,
|
|
VIDEO = 3,
|
|
FILE = 4,
|
|
EMOJI = 5,
|
|
LINK = 6,
|
|
LOCATION = 7,
|
|
RED_PACKET = 20,
|
|
TRANSFER = 21,
|
|
POKE = 22,
|
|
CALL = 30,
|
|
SHARE = 31,
|
|
REPLY = 32,
|
|
FORWARD = 33,
|
|
CONTACT = 34,
|
|
SYSTEM = 80,
|
|
RECALL = 81,
|
|
OTHER = 99,
|
|
}
|
|
|
|
/** 消息类型 i18n key 映射 */
|
|
const MESSAGE_TYPE_KEYS: Record<number, string> = {
|
|
// 基础消息类型
|
|
[MessageType.TEXT]: 'text',
|
|
[MessageType.IMAGE]: 'image',
|
|
[MessageType.VOICE]: 'voice',
|
|
[MessageType.VIDEO]: 'video',
|
|
[MessageType.FILE]: 'file',
|
|
[MessageType.EMOJI]: 'emoji',
|
|
[MessageType.LINK]: 'link',
|
|
[MessageType.LOCATION]: 'location',
|
|
// 交互消息类型
|
|
[MessageType.RED_PACKET]: 'redPacket',
|
|
[MessageType.TRANSFER]: 'transfer',
|
|
[MessageType.POKE]: 'poke',
|
|
[MessageType.CALL]: 'call',
|
|
[MessageType.SHARE]: 'share',
|
|
[MessageType.REPLY]: 'reply',
|
|
[MessageType.FORWARD]: 'forward',
|
|
[MessageType.CONTACT]: 'contact',
|
|
// 系统消息类型
|
|
[MessageType.SYSTEM]: 'system',
|
|
[MessageType.RECALL]: 'recall',
|
|
// 其他
|
|
[MessageType.OTHER]: 'other',
|
|
}
|
|
|
|
/**
|
|
* 获取消息类型名称
|
|
* @param type 消息类型
|
|
* @param t 可选的 i18n t 函数,传入时使用 common.messageType.* 键
|
|
*/
|
|
export function getMessageTypeName(type: MessageType | number, t?: (key: string) => string): string {
|
|
const key = MESSAGE_TYPE_KEYS[type]
|
|
if (t && key) return t(`common.messageType.${key}`)
|
|
return t ? t('common.messageType.unknown') : '未知'
|
|
}
|
|
|
|
/** 小时活跃度 */
|
|
export interface HourlyActivity {
|
|
hour: number
|
|
messageCount: number
|
|
}
|
|
|
|
/** 日期活跃度 */
|
|
export interface DailyActivity {
|
|
date: string
|
|
messageCount: number
|
|
}
|
|
|
|
/** 星期活跃度 */
|
|
export interface WeekdayActivity {
|
|
weekday: number
|
|
messageCount: number
|
|
}
|
|
|
|
/** 月份活跃度 */
|
|
export interface MonthlyActivity {
|
|
month: number
|
|
messageCount: number
|
|
}
|
|
|
|
/** 年份活跃度 */
|
|
export interface YearlyActivity {
|
|
year: number
|
|
messageCount: number
|
|
}
|
|
|
|
/** 消息类型分布 */
|
|
export interface MessageTypeCount {
|
|
type: number
|
|
count: number
|
|
}
|
|
|
|
/** 消息长度分布 */
|
|
export interface LengthDistribution {
|
|
detail: Array<{ len: number; count: number }>
|
|
grouped: Array<{ range: string; count: number }>
|
|
}
|
|
|
|
/** 文字消息统计 */
|
|
export interface TextStats {
|
|
textCount: number
|
|
avgLength: number
|
|
maxLength: number
|
|
shortCount: number
|
|
}
|