UNPKG

koishi-plugin-statistical-ranking

Version:

统计命令使用和成员发言记录,支持分命令/群组/用户统计,支持统计发言排行,支持输出图片

90 lines (89 loc) 3.1 kB
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 {};