import { Context, Schema } from "koishi";
export declare const name = "message-counter";
export declare const inject: {
    required: string[];
    optional: string[];
};
export declare const usage = "## \uD83D\uDCDD \u6CE8\u610F\u4E8B\u9879\n\n- \u53EA\u7EDF\u8BA1\u7FA4\u804A\u6D88\u606F\n- \u521D\u59CB\u5316\u9700\u6743\u9650\u7B49\u7EA7 3\n- \u4F9D\u8D56 database \u4E0E cron \u670D\u52A1\n- \u751F\u6210\u56FE\u7247\u65F6\uFF0C\u9700 puppeteer \u63D0\u4F9B canvas \u652F\u6301\n\n## \uD83D\uDD0D \u5173\u952E\u6307\u4EE4\n\n### `messageCounter.\u67E5\u8BE2 [\u6307\u5B9A\u7528\u6237]`\n\n\u67E5\u8BE2\u6307\u5B9A\u7528\u6237\u7684\u53D1\u8A00\u6B21\u6570\u4FE1\u606F\uFF08\u6B21\u6570[\u6392\u540D]\uFF09\u3002\u82E5\u4E0D\u5E26\u4EFB\u4F55\u9009\u9879\uFF0C\u5219\u663E\u793A\u6240\u6709\u65F6\u6BB5\u7684\u6570\u636E\u3002\n\n**\u9009\u9879:**\n\n| \u53C2\u6570 | \u8BF4\u660E |\n|------|------|\n| `-d, --day` | \u4ECA\u65E5\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `--yd, --yesterday` | \u6628\u65E5\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `-w, --week` | \u672C\u5468\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `-m, --month` | \u672C\u6708\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `-y, --year` | \u4ECA\u5E74\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `-t, --total` | \u603B\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `--dag` | \u8DE8\u7FA4\u4ECA\u65E5\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `--ydag` | \u8DE8\u7FA4\u6628\u65E5\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `--wag` | \u8DE8\u7FA4\u672C\u5468\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `--mag` | \u8DE8\u7FA4\u672C\u6708\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `--yag` | \u8DE8\u7FA4\u672C\u5E74\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n| `-a, --across` | \u8DE8\u7FA4\u603B\u53D1\u8A00\u6B21\u6570[\u6392\u540D] |\n\n### `messageCounter.\u6392\u884C\u699C [\u663E\u793A\u7684\u4EBA\u6570]`\n\n\u53D1\u8A00\u6392\u884C\u699C\u3002\u9ED8\u8BA4\u4E3A\u4ECA\u65E5\u53D1\u8A00\u699C\u3002\n\n**\u9009\u9879:**\n\n| \u53C2\u6570 | \u8BF4\u660E |\n|------|------|\n| `--yd, --yesterday` | \u6628\u65E5\u53D1\u8A00\u6392\u884C\u699C |\n| `-w` | \u672C\u5468\u53D1\u8A00\u6392\u884C\u699C |\n| `-m` | \u672C\u6708\u53D1\u8A00\u6392\u884C\u699C |\n| `-y` | \u4ECA\u5E74\u53D1\u8A00\u6392\u884C\u699C |\n| `-t` | \u603B\u53D1\u8A00\u6392\u884C\u699C |\n| `--dag` | \u8DE8\u7FA4\u4ECA\u65E5\u53D1\u8A00\u6392\u884C\u699C |\n| `--ydag` | \u8DE8\u7FA4\u6628\u65E5\u53D1\u8A00\u6392\u884C\u699C |\n| `--wag` | \u8DE8\u7FA4\u672C\u5468\u53D1\u8A00\u6392\u884C\u699C |\n| `--mag` | \u8DE8\u7FA4\u672C\u6708\u53D1\u8A00\u6392\u884C\u699C |\n| `--yag` | \u8DE8\u7FA4\u4ECA\u5E74\u53D1\u8A00\u6392\u884C\u699C |\n| `--dragon` | \u8DE8\u7FA4\u603B\u53D1\u8A00\u6392\u884C\u699C\uFF08\u5723\u9F99\u738B\u699C\uFF09 |\n| `--whites` | \u767D\u540D\u5355\uFF0C\u53EA\u663E\u793A\u767D\u540D\u5355\u7528\u6237 |\n| `--blacks` | \u9ED1\u540D\u5355\uFF0C\u4E0D\u663E\u793A\u9ED1\u540D\u5355\u7528\u6237 |\n\n### `messageCounter.\u7FA4\u6392\u884C\u699C [number:number]`\n\n\u5404\u7FA4\u804A\u7684\u53D1\u8A00\u6392\u884C\u699C\u3002\u9ED8\u8BA4\u4E3A\u4ECA\u65E5\u53D1\u8A00\u699C\u3002\n\n**\u9009\u9879:**\n\n| \u53C2\u6570 | \u8BF4\u660E |\n|------|------|\n| `--yd, --yesterday` | \u6628\u65E5\u53D1\u8A00\u6392\u884C\u699C |\n| `-w, -m, -y, -t` | \u672C\u5468/\u672C\u6708/\u4ECA\u5E74/\u603B\u53D1\u8A00\u6392\u884C\u699C |\n| `-s` | \u6307\u5B9A\u7528\u6237\u7684\u7FA4\u53D1\u8A00\u6392\u884C\u699C |\n| `--whites` | \u767D\u540D\u5355\uFF0C\u53EA\u663E\u793A\u767D\u540D\u5355\u7FA4 |\n| `--blacks` | \u9ED1\u540D\u5355\uFF0C\u4E0D\u663E\u793A\u9ED1\u540D\u5355\u7FA4 |\n\n### `messageCounter.\u4E0A\u4F20\u67F1\u72B6\u6761\u80CC\u666F`\n\n- \u4E3A\u81EA\u5DF1\u4E0A\u4F20\u4E00\u5F20\u81EA\u5B9A\u4E49\u7684\u6C34\u5E73\u67F1\u72B6\u6761\u80CC\u666F\u56FE\u7247\n- \u65B0\u56FE\u7247\u4F1A\u8986\u76D6\u65E7\u7684\u56FE\u7247\u3002\u82E5\u4E0A\u4F20\u5931\u8D25\uFF0C\u65E7\u56FE\u7247\u4E5F\u4F1A\u88AB\u5220\u9664\n- \u4F7F\u7528\u6B64\u6307\u4EE4\u65F6\u9700\u9644\u5E26\u56FE\u7247\n\n### `messageCounter.\u91CD\u8F7D\u8D44\u6E90`\n\n- \u5B9E\u65F6\u91CD\u8F7D\u7528\u6237\u56FE\u6807\u3001\u67F1\u72B6\u6761\u80CC\u666F\u548C\u5B57\u4F53\u6587\u4EF6\uFF0C\u4F7F\u5176\u66F4\u6539\u5373\u65F6\u751F\u6548\uFF08\u9700\u8981\u6743\u9650\u7B49\u7EA7 2\uFF09\n\n### `messageCounter.\u6E05\u7406\u7F13\u5B58`\n\n- \u6E05\u7406\u8FC7\u671F\u7684\u5934\u50CF\u7F13\u5B58\u6587\u4EF6\uFF0C\u4EE5\u91CA\u653E\u78C1\u76D8\u7A7A\u95F4\uFF08\u9700\u8981\u6743\u9650\u7B49\u7EA7 3\uFF09\n- \u7528\u6237\u66F4\u6362\u5934\u50CF\u540E\uFF0C\u65E7\u7684\u5934\u50CF\u7F13\u5B58\u4F1A\u53D8\u6210\u201C\u5B64\u513F\u7F13\u5B58\u201D\u3002\u6B64\u6307\u4EE4\u53EF\u4EE5\u5B89\u5168\u5730\u79FB\u9664\u5B83\u4EEC\u3002\n\n## \uD83C\uDFA8 \u81EA\u5B9A\u4E49\u6C34\u5E73\u67F1\u72B6\u56FE\u6837\u5F0F\n\n- \u91CD\u8F7D\u63D2\u4EF6\u6216\u4F7F\u7528 `messageCounter.\u91CD\u8F7D\u8D44\u6E90` \u6307\u4EE4\u53EF\u4F7F\u65B0\u589E\u7684\u6587\u4EF6\u7ACB\u5373\u751F\u6548\u3002\n\n### 1. \u7528\u6237\u56FE\u6807\n\n- \u5728 `data/messageCounter/icons` \u6587\u4EF6\u5939\u4E0B\u6DFB\u52A0\u7528\u6237\u56FE\u6807\n- \u6587\u4EF6\u540D\u683C\u5F0F\u4E3A `\u7528\u6237ID.png`\uFF08\u4F8B\uFF1A`1234567890.png`\uFF09\n- \u652F\u6301\u591A\u56FE\u6807\uFF0C\u6587\u4EF6\u540D\u683C\u5F0F\u4E3A `\u7528\u6237ID-1.png`, `\u7528\u6237ID-2.png`\n\n### 2. \u67F1\u72B6\u6761\u80CC\u666F\n\n- **\u63A8\u8350\u65B9\u5F0F**\uFF1A\u4F7F\u7528 `messageCounter.\u4E0A\u4F20\u67F1\u72B6\u6761\u80CC\u666F` \u6307\u4EE4\n- **\u624B\u52A8\u65B9\u5F0F**\uFF1A\u5728 `data/messageCounter/barBgImgs` \u6587\u4EF6\u5939\u4E0B\u6DFB\u52A0\u80CC\u666F\u56FE\u7247\n- \u652F\u6301\u591A\u80CC\u666F\uFF08\u968F\u673A\u9009\u7528\uFF09\uFF0C\u6587\u4EF6\u540D\u683C\u5F0F\u4E3A `\u7528\u6237ID-1.png` \u7B49\n- \u5EFA\u8BAE\u5C3A\u5BF8 850x50 \u50CF\u7D20\uFF0C\u6587\u4EF6\u540D `\u7528\u6237ID.png`\n\n### 3. \u81EA\u5B9A\u4E49\u5B57\u4F53\n\n- \u63D2\u4EF6\u542F\u52A8\u65F6\uFF0C\u4F1A\u81EA\u52A8\u5C06\u5185\u7F6E\u5B57\u4F53 `HarmonyOS_Sans_Medium.ttf` \u62F7\u8D1D\u5230 `data/messageCounter/fonts/` \u76EE\u5F55\u4E0B\u3002\n- \u60A8\u53EF\u4EE5\u5C06\u81EA\u5DF1\u559C\u7231\u7684\u5B57\u4F53\u6587\u4EF6\u653E\u5165\u6B64\u6587\u4EF6\u5939\uFF0C\u5E76\u5728\u914D\u7F6E\u9879\u7684\u201C\u5B57\u4F53\u8BBE\u7F6E\u201D\u4E2D\u586B\u5165\u8BE5\u5B57\u4F53\u7684\u6587\u4EF6\u540D\u79F0\uFF08\u4E0D\u5E26\u540E\u7F00\uFF09\u3002\n\n---\n\n## \uD83D\uDCAC QQ \u7FA4\n\n- 956758505";
export interface Config {
    /** 是否统计 Bot 自己发送的消息。 */
    isBotMessageTrackingEnabled: boolean;
    /** 排行榜默认显示的人数。 */
    defaultMaxDisplayCount: number;
    /** 是否在显示排行榜时补充时间信息。 */
    isTimeInfoSupplementEnabled: boolean;
    /** 是否在排行榜中显示用户消息占比。 */
    isUserMessagePercentageVisible: boolean;
    /** 在排行榜中全局隐藏的用户 ID 列表。 */
    hiddenUserIdsInLeaderboard: string[];
    /** 在群排行榜中全局隐藏的频道 ID 列表。 */
    hiddenChannelIdsInLeaderboard: string[];
    /** 是否将文本排行榜转为 Markdown 图片。 */
    isTextToImageConversionEnabled: boolean;
    /** 是否将排行榜渲染为水平柱状图。 */
    isLeaderboardToHorizontalBarChartConversionEnabled: boolean;
    /** 生成的柱状图图片类型。 */
    imageType: "png" | "jpeg" | "webp";
    /** 头像缓存的有效期（秒）。设置为 0 可禁用缓存刷新。 */
    avatarCacheTTL: number;
    /** 头像获取失败后的重试间隔（秒）。 */
    avatarFailureCacheTTL: number;
    /** 页面加载等待事件，影响图片生成速度和稳定性。 */
    waitUntil: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
    /**
     * 生成水平柱状图时，渲染页面的视口宽度（像素）。
     * @default 1080
     */
    chartViewportWidth: number;
    /**
     * 渲染时的设备像素比 (DPR)。
     * 更高的值可以生成更清晰的图片（例如，设置为 2 相当于 2x 图），但也会增加图片文件体积。
     * @default 1
     */
    deviceScaleFactor: number;
    /** 是否将自定义图标显示在柱状条的末端。 */
    shouldMoveIconToBarEndLeft: boolean;
    /** 是否在生成水平柱状图时，在当前用户/群聊名称前显示★以高亮。 */
    showStarInChart: boolean;
    /** 自定义背景图在进度条区域的不透明度。 */
    horizontalBarBackgroundOpacity: number;
    /** 自定义背景图在整行背景的不透明度。 */
    horizontalBarBackgroundFullOpacity: number;
    /** 允许上传的背景图最大宽度（像素）。 */
    maxBarBgWidth: number;
    /** 允许上传的背景图最大高度（像素）。 */
    maxBarBgHeight: number;
    /** 允许上传的背景图最大体积（MB）。 */
    maxBarBgSize: number;
    /** 图片整体背景的类型。 */
    backgroundType: string;
    /** API 背景配置。 */
    apiBackgroundConfig: apiBackgroundConfig;
    /** 自定义背景的 CSS 代码。 */
    backgroundValue: string;
    /** 水平柱状图 - 标题的字体。 */
    chartTitleFont: string;
    /** 水平柱状图 - 成员昵称和发言次数的字体。 */
    chartNicknameFont: string;
    /** 是否启用定时自动推送排行榜功能。 */
    autoPush: boolean;
    /** 是否在每日 0 点自动发送昨日排行榜。 */
    shouldSendDailyLeaderboardAtMidnight: boolean;
    /** 是否在每周一 0 点自动发送上周排行榜。 */
    shouldSendWeeklyLeaderboard: boolean;
    /** 是否在每月第一天 0 点自动发送上月排行榜。 */
    shouldSendMonthlyLeaderboard: boolean;
    /** 是否在每年第一天 0 点自动发送去年排行榜。 */
    shouldSendYearlyLeaderboard: boolean;
    /** 其他定时发送今日排行榜的时间点（24小时制）。 */
    dailyScheduledTimers: string[];
    /** 发送排行榜前是否发送提示消息。 */
    isGeneratingRankingListPromptVisible: boolean;
    /** 发送提示后等待多少秒再发送图片。 */
    leaderboardGenerationWaitTime: number;
    /** 需要接收自动推送的频道 ID 列表。 */
    pushChannelIds: string[];
    /** 是否向机器人所在的所有群聊推送。 */
    shouldSendLeaderboardNotificationsToAllChannels: boolean;
    /** "向所有群聊推送" 开启时的排除列表。 */
    excludedLeaderboardChannels: string[];
    /** 批量推送时，每个群之间的发送延迟（秒）。 */
    delayBetweenGroupPushesInSeconds: number;
    /** 延迟时间的随机波动范围（秒）。 */
    groupPushDelayRandomizationSeconds: number;
    /** 是否在每日 0 点自动禁言昨日发言最多的人。 */
    enableMostActiveUserMuting: boolean;
    /** 0 点后，等待多少秒再执行禁言操作。 */
    dragonKingDetainmentTime: number;
    /** 禁言时长（天）。 */
    detentionDuration: number;
    /** 在哪些频道中执行“抓龙王”操作。 */
    muteChannelIds: string[];
}
export declare const Config: Schema<Config>;
declare module "koishi" {
    interface Tables {
        message_counter_records: MessageCounterRecord;
        message_counter_state: MessageCounterState;
    }
}
interface apiBackgroundConfig {
    apiUrl: string;
    apiKey: string;
    responseType: string;
}
interface MessageCounterRecord {
    channelId: string;
    channelName: string;
    userId: string;
    username: string;
    userAvatar: string;
    todayPostCount: number;
    thisWeekPostCount: number;
    thisMonthPostCount: number;
    thisYearPostCount: number;
    totalPostCount: number;
    yesterdayPostCount: number;
}
interface MessageCounterState {
    key: string;
    value: Date;
}
export declare function apply(ctx: Context, config: Config): Promise<void>;
export {};
