koishi-plugin-ll-mc 3.1.8 → 3.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +53 -108
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -49,114 +49,16 @@ var inject = {
|
|
|
49
49
|
required: ["database", "cron"],
|
|
50
50
|
optional: ["markdownToImage", "puppeteer", "canvas"]
|
|
51
51
|
};
|
|
52
|
-
var usage = `## 📝
|
|
52
|
+
var usage = `## 📝 使用说明
|
|
53
53
|
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
-
|
|
54
|
+
- \`messageCounter.查询 [用户]\` — 查询指定用户的发言次数[排名]
|
|
55
|
+
- \`messageCounter.排行榜 [人数]\` — 发言排行榜(默认今日)
|
|
56
|
+
- \`messageCounter.群排行榜\` — 各群发言排行榜(默认今日)
|
|
57
|
+
- \`messageCounter.上传柱状条背景\` — 上传自定义柱状条背景
|
|
58
|
+
- \`messageCounter.重载资源\` — 重载资源
|
|
59
|
+
- \`messageCounter.清理缓存\` — 清理头像缓存
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
### \`messageCounter.查询 [指定用户]\`
|
|
62
|
-
|
|
63
|
-
查询指定用户的发言次数信息(次数[排名])。若不带任何选项,则显示所有时段的数据。
|
|
64
|
-
|
|
65
|
-
**选项:**
|
|
66
|
-
|
|
67
|
-
| 参数 | 说明 |
|
|
68
|
-
|------|------|
|
|
69
|
-
| \`-d, --day\` | 今日发言次数[排名] |
|
|
70
|
-
| \`--yd, --yesterday\` | 昨日发言次数[排名] |
|
|
71
|
-
| \`-w, --week\` | 本周发言次数[排名] |
|
|
72
|
-
| \`-m, --month\` | 本月发言次数[排名] |
|
|
73
|
-
| \`-y, --year\` | 今年发言次数[排名] |
|
|
74
|
-
| \`-t, --total\` | 总发言次数[排名] |
|
|
75
|
-
| \`--dag\` | 跨群今日发言次数[排名] |
|
|
76
|
-
| \`--ydag\` | 跨群昨日发言次数[排名] |
|
|
77
|
-
| \`--wag\` | 跨群本周发言次数[排名] |
|
|
78
|
-
| \`--mag\` | 跨群本月发言次数[排名] |
|
|
79
|
-
| \`--yag\` | 跨群本年发言次数[排名] |
|
|
80
|
-
| \`-a, --across\` | 跨群总发言次数[排名] |
|
|
81
|
-
|
|
82
|
-
### \`messageCounter.排行榜 [显示的人数]\`
|
|
83
|
-
|
|
84
|
-
发言排行榜。默认为今日发言榜。
|
|
85
|
-
|
|
86
|
-
**选项:**
|
|
87
|
-
|
|
88
|
-
| 参数 | 说明 |
|
|
89
|
-
|------|------|
|
|
90
|
-
| \`--yd, --yesterday\` | 昨日发言排行榜 |
|
|
91
|
-
| \`-w\` | 本周发言排行榜 |
|
|
92
|
-
| \`-m\` | 本月发言排行榜 |
|
|
93
|
-
| \`-y\` | 今年发言排行榜 |
|
|
94
|
-
| \`-t\` | 总发言排行榜 |
|
|
95
|
-
| \`--dag\` | 跨群今日发言排行榜 |
|
|
96
|
-
| \`--ydag\` | 跨群昨日发言排行榜 |
|
|
97
|
-
| \`--wag\` | 跨群本周发言排行榜 |
|
|
98
|
-
| \`--mag\` | 跨群本月发言排行榜 |
|
|
99
|
-
| \`--yag\` | 跨群今年发言排行榜 |
|
|
100
|
-
| \`--dragon\` | 跨群总发言排行榜(圣龙王榜) |
|
|
101
|
-
| \`--whites\` | 白名单,只显示白名单用户 |
|
|
102
|
-
| \`--blacks\` | 黑名单,不显示黑名单用户 |
|
|
103
|
-
|
|
104
|
-
### \`messageCounter.群排行榜 [number:number]\`
|
|
105
|
-
|
|
106
|
-
各群聊的发言排行榜。默认为今日发言榜。
|
|
107
|
-
|
|
108
|
-
**选项:**
|
|
109
|
-
|
|
110
|
-
| 参数 | 说明 |
|
|
111
|
-
|------|------|
|
|
112
|
-
| \`--yd, --yesterday\` | 昨日发言排行榜 |
|
|
113
|
-
| \`-w, -m, -y, -t\` | 本周/本月/今年/总发言排行榜 |
|
|
114
|
-
| \`-s\` | 指定用户的群发言排行榜 |
|
|
115
|
-
| \`--whites\` | 白名单,只显示白名单群 |
|
|
116
|
-
| \`--blacks\` | 黑名单,不显示黑名单群 |
|
|
117
|
-
|
|
118
|
-
### \`messageCounter.上传柱状条背景\`
|
|
119
|
-
|
|
120
|
-
- 为自己上传一张自定义的水平柱状条背景图片
|
|
121
|
-
- 新图片会覆盖旧的图片。若上传失败,旧图片也会被删除
|
|
122
|
-
- 使用此指令时需附带图片
|
|
123
|
-
|
|
124
|
-
### \`messageCounter.重载资源\`
|
|
125
|
-
|
|
126
|
-
- 实时重载用户图标、柱状条背景和字体文件,使其更改即时生效(需要权限等级 2)
|
|
127
|
-
|
|
128
|
-
### \`messageCounter.清理缓存\`
|
|
129
|
-
|
|
130
|
-
- 清理过期的头像缓存文件,以释放磁盘空间(需要权限等级 3)
|
|
131
|
-
- 用户更换头像后,旧的头像缓存会变成“孤儿缓存”。此指令可以安全地移除它们。
|
|
132
|
-
|
|
133
|
-
## 🎨 自定义水平柱状图样式
|
|
134
|
-
|
|
135
|
-
- 重载插件或使用 \`messageCounter.重载资源\` 指令可使新增的文件立即生效。
|
|
136
|
-
|
|
137
|
-
### 1. 用户图标
|
|
138
|
-
|
|
139
|
-
- 在 \`data/messageCounter/icons\` 文件夹下添加用户图标
|
|
140
|
-
- 文件名格式为 \`用户ID.png\`(例:\`1234567890.png\`)
|
|
141
|
-
- 支持多图标,文件名格式为 \`用户ID-1.png\`, \`用户ID-2.png\`
|
|
142
|
-
|
|
143
|
-
### 2. 柱状条背景
|
|
144
|
-
|
|
145
|
-
- **推荐方式**:使用 \`messageCounter.上传柱状条背景\` 指令
|
|
146
|
-
- **手动方式**:在 \`data/messageCounter/barBgImgs\` 文件夹下添加背景图片
|
|
147
|
-
- 支持多背景(随机选用),文件名格式为 \`用户ID-1.png\` 等
|
|
148
|
-
- 建议尺寸 850x50 像素,文件名 \`用户ID.png\`
|
|
149
|
-
|
|
150
|
-
### 3. 自定义字体
|
|
151
|
-
|
|
152
|
-
- 插件启动时,会自动将内置字体 \`HarmonyOS_Sans_Medium.ttf\` 拷贝到 \`data/messageCounter/fonts/\` 目录下。
|
|
153
|
-
- 您可以将自己喜爱的字体文件放入此文件夹,并在配置项的“字体设置”中填入该字体的文件名称(不带后缀)。
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## 💬 QQ 群
|
|
158
|
-
|
|
159
|
-
- 956758505`;
|
|
61
|
+
详细选项请发送 \`help messageCounter\` 查看。`;
|
|
160
62
|
var logger = new import_koishi.Logger("messageCounter");
|
|
161
63
|
var FONT_OPTIONS = {
|
|
162
64
|
TITLE: "HarmonyOS_Sans_Medium",
|
|
@@ -2601,8 +2503,6 @@ ${targetUserRecord[0].username}
|
|
|
2601
2503
|
.row-name.is-hero { color: #FFFFFF; }
|
|
2602
2504
|
.row-star { width: 16px; height: 16px; color: #FCD34D; flex-shrink: 0; }
|
|
2603
2505
|
.row-count { font-size: 18px; font-weight: 700; }
|
|
2604
|
-
/* 名字/数字加白色描边光晕,保证在深浅/花哨背景上都看得清 */
|
|
2605
|
-
.row-name, .row-count { text-shadow: -1px -1px 0 rgba(255,255,255,0.9), 1px -1px 0 rgba(255,255,255,0.9), -1px 1px 0 rgba(255,255,255,0.9), 1px 1px 0 rgba(255,255,255,0.9), 0 1px 2px rgba(0,0,0,0.12); }
|
|
2606
2506
|
</style>
|
|
2607
2507
|
${backgroundCss ? `<style>${backgroundCss}</style>` : ""}
|
|
2608
2508
|
</head>
|
|
@@ -2649,6 +2549,51 @@ ${rows}
|
|
|
2649
2549
|
// 确保 emoji 字体就绪再截图
|
|
2650
2550
|
await page.evaluate(() => document.fonts.ready).catch(() => {});
|
|
2651
2551
|
await page.waitForSelector(".card").catch(() => {});
|
|
2552
|
+
// 官机补丁:背景图右侧可能是深色人物,导致排在右下角的发言数字看不清。
|
|
2553
|
+
// 这里对每个数字的位置采样一次背景亮度,凡是背景偏暗的数字改成白色(去掉全局描边)。
|
|
2554
|
+
try {
|
|
2555
|
+
const dpr = 2;
|
|
2556
|
+
// 先隐藏所有文字以采样"纯背景"像素
|
|
2557
|
+
await page.evaluate(() => {
|
|
2558
|
+
document.querySelectorAll(".bar-content").forEach((el) => { el.style.visibility = "hidden"; });
|
|
2559
|
+
});
|
|
2560
|
+
const bgShot = await page.screenshot({ type: "png", fullPage: true });
|
|
2561
|
+
await page.evaluate(() => {
|
|
2562
|
+
document.querySelectorAll(".bar-content").forEach((el) => { el.style.visibility = ""; });
|
|
2563
|
+
});
|
|
2564
|
+
const bgDataUrl = `data:image/png;base64,${bgShot.toString("base64")}`;
|
|
2565
|
+
const luminances = await page.evaluate(async (dataUrl) => {
|
|
2566
|
+
const img = new Image();
|
|
2567
|
+
img.src = dataUrl;
|
|
2568
|
+
await img.decode();
|
|
2569
|
+
const canvas = document.createElement("canvas");
|
|
2570
|
+
canvas.width = img.naturalWidth;
|
|
2571
|
+
canvas.height = img.naturalHeight;
|
|
2572
|
+
const ctx = canvas.getContext("2d");
|
|
2573
|
+
ctx.drawImage(img, 0, 0);
|
|
2574
|
+
const scale = window.devicePixelRatio || 1;
|
|
2575
|
+
const out = [];
|
|
2576
|
+
document.querySelectorAll(".row-count").forEach((el) => {
|
|
2577
|
+
const r = el.getBoundingClientRect();
|
|
2578
|
+
const x = Math.max(0, Math.min(Math.round((r.left + r.width / 2) * scale), canvas.width - 1));
|
|
2579
|
+
const y = Math.max(0, Math.min(Math.round((r.top + r.height / 2) * scale), canvas.height - 1));
|
|
2580
|
+
const d = ctx.getImageData(x, y, 1, 1).data;
|
|
2581
|
+
out.push(0.2126 * d[0] + 0.7152 * d[1] + 0.0722 * d[2]);
|
|
2582
|
+
});
|
|
2583
|
+
return out;
|
|
2584
|
+
}, bgDataUrl);
|
|
2585
|
+
await page.evaluate((lums) => {
|
|
2586
|
+
const nodes = document.querySelectorAll(".row-count");
|
|
2587
|
+
nodes.forEach((el, i) => {
|
|
2588
|
+
const lum = lums[i];
|
|
2589
|
+
if (lum !== undefined && lum < 120) {
|
|
2590
|
+
el.style.color = "#FFFFFF";
|
|
2591
|
+
}
|
|
2592
|
+
});
|
|
2593
|
+
}, luminances);
|
|
2594
|
+
} catch (sampleError) {
|
|
2595
|
+
logger.warn("背景亮度采样失败,使用默认数字颜色:", sampleError?.message);
|
|
2596
|
+
}
|
|
2652
2597
|
// 背景(自定义 CSS/API 背景)是加在 html 上的,必须截整页才能把卡片外的背景一起截进来;
|
|
2653
2598
|
// body 高度由内容撑开(无 min-height),所以 fullPage 不会产生多余空白。
|
|
2654
2599
|
const buf = await page.screenshot({ type: "png", fullPage: true });
|