koishi-plugin-statistical-ranking
Version:
统计命令使用和成员发言记录,支持分命令/群组/用户统计,支持统计发言排行,支持输出图片
127 lines (126 loc) • 4.44 kB
TypeScript
export declare const Utils: {
/**
* 按显示宽度截断字符串
* @param {string} str - 输入字符串
* @param {number} maxWidth - 最大显示宽度
* @returns {string} 截断后的字符串
*/
truncateByDisplayWidth(str: string, maxWidth: number): string;
/**
* 清理字符串,移除不可见字符和特殊字符,限制长度
* @param {string} input - 输入字符串
* @returns {string} 清理后的字符串
*/
sanitizeString(input: string): string;
/**
* 格式化时间为"多久前"的形式
* @param {Date} date - 日期对象
* @returns {string} 格式化后的时间字符串
*/
formatTimeAgo(date: Date): string;
/**
* 格式化日期时间为年月日和24小时制
* @param {Date} date - 日期对象
* @returns {string} 格式化后的日期时间字符串
*/
formatDateTime(date: Date): string;
/**
* 获取数据目录
* @param {string} [subdir='statistical-ranking'] 子目录名称
* @returns {string} 数据目录的绝对路径
*/
getDataDirectory(subdir?: string): string;
/**
* 获取平台用户ID,尝试从绑定数据中查找
* @param {any} session - 会话对象
* @returns {Promise<string>} 平台用户ID
*/
getPlatformId(session: any): Promise<string>;
/**
* 获取会话信息,包括平台、群组、用户等信息
* @param {any} session - 会话对象
* @returns {Promise<{platform: string, guildId: string, userId: string, userName: string, guildName: string} | null>}
* 会话信息对象,获取失败时返回null
*/
getSessionInfo(session: any): Promise<{
platform: any;
guildId: any;
userId: any;
userName: any;
guildName: any;
}>;
/**
* 检查目标是否匹配规则列表中的任何规则
* @param {string[]} list - 规则列表
* @param {{platform: string, guildId: string, userId: string, command?: string}} target - 目标对象
* @returns {boolean} 是否匹配
*/
matchRuleList(list: string[], target: {
platform: string;
guildId: string;
userId: string;
command?: string;
}): boolean;
/**
* 构建条件描述
* @param {Object} options - 包含可能的条件的对象
* @returns {string[]} 条件描述数组
*/
buildConditions(options: {
user?: string;
guild?: string;
platform?: string;
command?: string;
}): string[];
/**
* 标准化统计记录
* @param {any} record 待处理的记录
* @param {Object} options 选项
* @returns {any} 标准化后的记录
*/
normalizeRecord(record: any, options?: {
sanitizeNames?: boolean;
}): any;
/**
* 生成统计数据映射表
* @param {Array<any>} records 记录数组
* @param {string} keyField 用作键的字段名
* @param {function} [keyFormatter] 键格式化函数
* @returns {Map<string, {count: number, lastTime: Date, displayName?: string}>}
*/
generateStatsMap(records: any[], keyField: string, keyFormatter?: (key: string) => string): Map<string, any>;
/**
* 过滤统计记录
* @param {Array<any>} records 记录数组
* @param {Object} options 过滤选项
* @returns {Array<any>} 过滤后的记录
*/
filterStatRecords(records: any[], options?: {
keyField?: string;
displayWhitelist?: string[];
displayBlacklist?: string[];
disableCommandMerge?: boolean;
}): any[];
/**
* 通用数据排序函数
* @param {Array<any>} data 数据数组
* @param {string} sortBy 排序字段: 'count' | 'key' | 'time'
* @param {string} keyField 键字段名
* @returns {Array<any>} 排序后的数组
*/
sortData(data: any[], sortBy?: string, keyField?: string): any[];
/**
* 处理名称显示
* @param {string} name 原始名称
* @param {string} id ID标识
* @param {boolean} truncateId 是否截断ID
* @returns {string} 格式化后的名称
*/
formatDisplayName(name: string, id: string, truncateId?: boolean): string;
/**
* 通用数组分页
* @param {Array<any>} data 数据数组
* @returns {Array<Array<any>>} 分页后的数据
*/
paginateArray<T>(data: T[]): T[][];
};