koishi-plugin-statistical-ranking
Version:
统计命令使用和成员发言记录,支持分命令/群组/用户统计,支持统计发言排行,支持输出图片
90 lines (89 loc) • 3.1 kB
TypeScript
import { Context } from 'koishi';
/**
* 用户排名差异数据接口
* @interface RankDiff
* @property {string} userId - 用户ID
* @property {string} userName - 用户名称
* @property {number} currentCount - 当前计数
* @property {number} previousCount - 上一时段计数
* @property {number} diff - 差值(当前减去上一时段)
* @property {number} rank - 当前排名
* @property {number} [prevRank] - 上一时段排名
* @property {number} [rankChange] - 排名变化(正值表示上升,负值表示下降)
*/
interface RankDiff {
userId: string;
userName: string;
currentCount: number;
previousCount: number;
diff: number;
rank: number;
prevRank?: number;
rankChange?: number;
}
/**
* 排行榜配置接口
* @interface RankConfig
* @property {string} [updateInterval] - 更新间隔
* @property {boolean} [defaultImageMode] - 默认是否使用图片模式
*/
interface RankConfig {
updateInterval?: string;
defaultImageMode?: boolean;
}
export declare class Rank {
private ctx;
private defaultImageMode;
/**
* 创建排行榜实例
* @param {Context} ctx - Koishi 上下文
* @param {RankConfig} [config={}] - 排行榜配置
*/
constructor(ctx: Context, config?: RankConfig);
/**
* 生成排行榜快照
* 保存当前消息统计数据到排行数据库中
* @returns {Promise<void>}
*/
generateRankSnapshot(): Promise<void>;
/**
* 获取排行榜数据
* @param {string} platform - 平台标识
* @param {string|null} guildId - 群组ID,为null时表示全局排行
* @param {number} [hours=24] - 时间范围(小时)
* @param {number} [limit=10] - 返回结果数量限制,负数表示不限制
* @param {boolean} [global=false] - 是否获取全局排行
* @param {Date} [endTime] - 结束时间,默认为当前时间
* @returns {Promise<RankDiff[]>} 排行榜数据数组
*/
getRankingData(platform: string, guildId: string | null, hours?: number, limit?: number, global?: boolean, endTime?: Date): Promise<RankDiff[]>;
/**
* 注册排行榜相关命令
* @param {any} stat - 统计命令对象
*/
registerRankCommands(stat: any): void;
/**
* 渲染图片形式的排行榜
* @private
* @param {RankDiff[]} data - 排行榜数据
* @param {string} title - 排行榜标题
* @returns {Promise<any>} 渲染后的图片或图片数组
*/
private renderImageRanking;
/**
* 解析时间格式字符串
* @private
* @param {string} format - 时间格式字符串,如 "1d", "2w" 等
* @returns {{ hours: number, description: string }} 解析后的小时数和描述文本
*/
private parseTimeFormat;
/**
* 格式化排行榜文本
* @private
* @param {RankDiff[]} data - 排行榜数据
* @param {string} title - 排行榜标题
* @returns {string} 格式化后的排行榜文本
*/
formatRankingText(data: RankDiff[], title: string): string;
}
export {};