koishi-plugin-dew-bot 1.0.239 → 1.0.240
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/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Koishi 插件:把聊天消息交给 dew-v7 Bot 游戏服处理,再把服务
|
|
|
9
9
|
```yaml
|
|
10
10
|
plugins:
|
|
11
11
|
dew-bot:
|
|
12
|
-
服务器地址: ws://
|
|
12
|
+
服务器地址: ws://dew-v7-test:3021
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
游戏服需先启动 Bot 进程(默认 WebSocket `3021`)。
|
|
@@ -18,6 +18,6 @@ plugins:
|
|
|
18
18
|
|
|
19
19
|
| 项 | 说明 | 默认 |
|
|
20
20
|
| --- | --- | --- |
|
|
21
|
-
| 服务器地址 | 游戏服 WebSocket 地址 | `ws://
|
|
21
|
+
| 服务器地址 | 游戏服 WebSocket 地址 | `ws://dew-v7-test:3021` |
|
|
22
22
|
|
|
23
23
|
插件会忽略机器人自己发出的消息,避免回显再次上传形成循环。
|
package/lib/index.js
CHANGED
|
@@ -146,11 +146,11 @@ __name(layoutCard, "layoutCard");
|
|
|
146
146
|
var escape2 = /* @__PURE__ */ __name((s) => String(s ?? "").replace(/[&<>"']/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[c]), "escape");
|
|
147
147
|
function leaderboardHtml(data, _headerImage, backgroundImage) {
|
|
148
148
|
const rows = data.rows.slice(0, 20);
|
|
149
|
-
const row = /* @__PURE__ */ __name((r, mine = false) => `<div class="row rank-${r.rank} ${mine ? "personal" : ""}"><div class="rank">${mine ? "<small>我的排名</small>" : ""}<b>${escape2(r.rank)}</b></div><div class="
|
|
149
|
+
const row = /* @__PURE__ */ __name((r, mine = false) => `<div class="row rank-${r.rank} ${mine ? "personal" : ""}"><div class="rank">${mine ? "<small>我的排名</small>" : ""}<b>${escape2(r.rank)}</b></div><div class="name">${escape2(r.name)}</div><div class="value">${escape2(r.value.toLocaleString("zh-CN", { maximumFractionDigits: 2 }))}</div></div>`, "row");
|
|
150
150
|
const personal = data.mine ? row(data.mine, true) : "";
|
|
151
151
|
return `<!doctype html><html lang="zh-CN"><meta charset="utf-8"><style>
|
|
152
152
|
*{box-sizing:border-box}body{margin:0;width:760px;color:#242725;font-family:"Microsoft YaHei","Noto Sans CJK SC",sans-serif}
|
|
153
|
-
.row{display:grid;grid-template-columns:64px
|
|
153
|
+
.row{display:grid;grid-template-columns:64px minmax(0,1fr) 180px;align-items:center;gap:9px;padding:12px 10px;min-height:81px;border-bottom:1px solid #d8d2c8}.rank{text-align:center;font-size:26px;font-family:Georgia,"Times New Roman",serif;color:#3f4140}.rank b{font-weight:500}
|
|
154
154
|
.name{font-size:22px;font-weight:600;line-height:1.4;overflow-wrap:anywhere}.value{text-align:right;font-size:26px;font-family:Georgia,"Times New Roman",serif;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
|
|
155
155
|
.rank-1,.rank-2,.rank-3{margin-bottom:6px;border-radius:6px;border:1px solid #d8bd75;background:linear-gradient(105deg,#e6c37455,#fbefd0)}.rank-2{border-color:#bbc4cb;background:linear-gradient(105deg,#aebdce75,#f0f1f3)}.rank-3{border-color:#d4baa2;background:linear-gradient(105deg,#ba8a6355,#f3e8df)}
|
|
156
156
|
.rank-1 .rank b,.rank-2 .rank b,.rank-3 .rank b{display:inline-grid;place-items:center;width:46px;height:52px;background:linear-gradient(140deg,#f6dd89,#b57b20);clip-path:polygon(50% 0,65% 12%,90% 6%,88% 34%,100% 50%,86% 70%,87% 91%,61% 90%,50% 100%,36% 88%,12% 92%,14% 67%,0 49%,13% 30%,10% 6%,35% 13%);color:white;text-shadow:0 1px 3px #513209;font-size:30px}.rank-2 .rank b{background:linear-gradient(140deg,#dceafb,#5d7d9e)}.rank-3 .rank b{background:linear-gradient(140deg,#ecc6a0,#8e5534)}.rank-1 .value{color:#9b6613}.rank-2 .value{color:#536779}.rank-3 .value{color:#945c32}
|
|
@@ -162,7 +162,7 @@ function leaderboardHtml(data, _headerImage, backgroundImage) {
|
|
|
162
162
|
.sheet{position:relative;margin:0;padding:10px;border:1px solid #c4b89b88;border-radius:12px;background:#fcfaf5d9;box-shadow:none}
|
|
163
163
|
.row:last-child{border-bottom:0}.name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:62px}
|
|
164
164
|
.value{font-size:23px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
165
|
-
#capture.has-background{padding:90px 80px}.has-background .sheet{background:rgba(250,247,238,.20);border:0}.has-background .row{grid-template-columns:48px
|
|
165
|
+
#capture.has-background{padding:90px 80px}.has-background .sheet{background:rgba(250,247,238,.20);border:0}.has-background .row{grid-template-columns:48px minmax(0,1fr) 142px;gap:6px;padding:10px 6px}.has-background .name{font-size:20px}
|
|
166
166
|
.has-background .row{background-color:rgba(255,253,246,.38)}
|
|
167
167
|
</style><body><div id="capture" class="${backgroundImage ? "has-background" : ""}">${backgroundImage ? '<img class="board-background" alt="" src="' + escape2(backgroundImage) + '">' : ""}<h1 class="board-title">${escape2(data.title)}</h1><main class="sheet">${rows.length ? rows.map((r) => row(r)).join("") : '<div class="empty">暂无玩家上榜</div>'}${personal}</main></div></body></html>`;
|
|
168
168
|
}
|
|
@@ -358,7 +358,11 @@ var handel_base = class {
|
|
|
358
358
|
this.ctx.logger.info("session not found", data.userId, data.channelId);
|
|
359
359
|
return;
|
|
360
360
|
}
|
|
361
|
-
|
|
361
|
+
let finalContent = content;
|
|
362
|
+
if (session.event?.platform === "qq" && session.event?.channel?.type === 0) {
|
|
363
|
+
finalContent = "Ciallo~(∠・ω< )\n" + content;
|
|
364
|
+
}
|
|
365
|
+
await session.send(finalContent);
|
|
362
366
|
}
|
|
363
367
|
async start(_data) {
|
|
364
368
|
}
|
|
@@ -381,7 +385,7 @@ var ImageHandler = class extends handel_base {
|
|
|
381
385
|
content = new AnalysisMsg().parse(data);
|
|
382
386
|
}
|
|
383
387
|
await this.send(data, content);
|
|
384
|
-
if (rendered &&
|
|
388
|
+
if (rendered && data.itemCard) await this.send(data, new AnalysisMsg().parse(data));
|
|
385
389
|
}
|
|
386
390
|
};
|
|
387
391
|
|
|
@@ -1263,7 +1267,7 @@ __name(apply, "apply");
|
|
|
1263
1267
|
var inject = { optional: ["puppeteer"] };
|
|
1264
1268
|
var name = "dew-bot";
|
|
1265
1269
|
var Config = import_koishi2.Schema.object({
|
|
1266
|
-
服务器地址: import_koishi2.Schema.string().default("ws://
|
|
1270
|
+
服务器地址: import_koishi2.Schema.string().default("ws://dew-v7-test:3021").description("游戏服 WebSocket 地址")
|
|
1267
1271
|
});
|
|
1268
1272
|
function apply2(ctx, config) {
|
|
1269
1273
|
ctx.plugin(apply, config);
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface Config {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export const Config: Schema<Config> = Schema.object({
|
|
13
|
-
服务器地址: Schema.string().default('ws://
|
|
13
|
+
服务器地址: Schema.string().default('ws://dew-v7-test:3021').description('游戏服 WebSocket 地址'),
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
export function apply(ctx: Context, config: Config) {
|
|
@@ -4,11 +4,11 @@ const escape = (s: unknown) => String(s ?? '').replace(/[&<>"']/g, c => ({ '&':
|
|
|
4
4
|
export function leaderboardHtml(data: LeaderboardImageData, _headerImage?: string, backgroundImage?: string): string {
|
|
5
5
|
const rows = data.rows.slice(0, 20);
|
|
6
6
|
|
|
7
|
-
const row = (r: typeof rows[number], mine = false) => `<div class="row rank-${r.rank} ${mine ? 'personal' : ''}"><div class="rank">${mine ? '<small>我的排名</small>' : ''}<b>${escape(r.rank)}</b></div><div class="
|
|
7
|
+
const row = (r: typeof rows[number], mine = false) => `<div class="row rank-${r.rank} ${mine ? 'personal' : ''}"><div class="rank">${mine ? '<small>我的排名</small>' : ''}<b>${escape(r.rank)}</b></div><div class="name">${escape(r.name)}</div><div class="value">${escape(r.value.toLocaleString('zh-CN', { maximumFractionDigits: 2 }))}</div></div>`;
|
|
8
8
|
const personal = data.mine ? row(data.mine, true) : '';
|
|
9
9
|
return `<!doctype html><html lang="zh-CN"><meta charset="utf-8"><style>
|
|
10
10
|
*{box-sizing:border-box}body{margin:0;width:760px;color:#242725;font-family:"Microsoft YaHei","Noto Sans CJK SC",sans-serif}
|
|
11
|
-
.row{display:grid;grid-template-columns:64px
|
|
11
|
+
.row{display:grid;grid-template-columns:64px minmax(0,1fr) 180px;align-items:center;gap:9px;padding:12px 10px;min-height:81px;border-bottom:1px solid #d8d2c8}.rank{text-align:center;font-size:26px;font-family:Georgia,"Times New Roman",serif;color:#3f4140}.rank b{font-weight:500}
|
|
12
12
|
.name{font-size:22px;font-weight:600;line-height:1.4;overflow-wrap:anywhere}.value{text-align:right;font-size:26px;font-family:Georgia,"Times New Roman",serif;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
|
|
13
13
|
.rank-1,.rank-2,.rank-3{margin-bottom:6px;border-radius:6px;border:1px solid #d8bd75;background:linear-gradient(105deg,#e6c37455,#fbefd0)}.rank-2{border-color:#bbc4cb;background:linear-gradient(105deg,#aebdce75,#f0f1f3)}.rank-3{border-color:#d4baa2;background:linear-gradient(105deg,#ba8a6355,#f3e8df)}
|
|
14
14
|
.rank-1 .rank b,.rank-2 .rank b,.rank-3 .rank b{display:inline-grid;place-items:center;width:46px;height:52px;background:linear-gradient(140deg,#f6dd89,#b57b20);clip-path:polygon(50% 0,65% 12%,90% 6%,88% 34%,100% 50%,86% 70%,87% 91%,61% 90%,50% 100%,36% 88%,12% 92%,14% 67%,0 49%,13% 30%,10% 6%,35% 13%);color:white;text-shadow:0 1px 3px #513209;font-size:30px}.rank-2 .rank b{background:linear-gradient(140deg,#dceafb,#5d7d9e)}.rank-3 .rank b{background:linear-gradient(140deg,#ecc6a0,#8e5534)}.rank-1 .value{color:#9b6613}.rank-2 .value{color:#536779}.rank-3 .value{color:#945c32}
|
|
@@ -20,7 +20,7 @@ export function leaderboardHtml(data: LeaderboardImageData, _headerImage?: strin
|
|
|
20
20
|
.sheet{position:relative;margin:0;padding:10px;border:1px solid #c4b89b88;border-radius:12px;background:#fcfaf5d9;box-shadow:none}
|
|
21
21
|
.row:last-child{border-bottom:0}.name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:62px}
|
|
22
22
|
.value{font-size:23px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
23
|
-
#capture.has-background{padding:90px 80px}.has-background .sheet{background:rgba(250,247,238,.20);border:0}.has-background .row{grid-template-columns:48px
|
|
23
|
+
#capture.has-background{padding:90px 80px}.has-background .sheet{background:rgba(250,247,238,.20);border:0}.has-background .row{grid-template-columns:48px minmax(0,1fr) 142px;gap:6px;padding:10px 6px}.has-background .name{font-size:20px}
|
|
24
24
|
.has-background .row{background-color:rgba(255,253,246,.38)}
|
|
25
25
|
</style><body><div id="capture" class="${backgroundImage ? 'has-background' : ''}">${backgroundImage ? '<img class="board-background" alt="" src="'+escape(backgroundImage)+'">' : ''}<h1 class="board-title">${escape(data.title)}</h1><main class="sheet">${rows.length ? rows.map(r => row(r)).join('') : '<div class="empty">暂无玩家上榜</div>'}${personal}</main></div></body></html>`;
|
|
26
26
|
}
|
|
@@ -18,7 +18,12 @@ export default class handel_base {
|
|
|
18
18
|
this.ctx.logger.info('session not found', data.userId, data.channelId)
|
|
19
19
|
return
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
// QQ 群聊添加问候语和换行,让正文从新的一行开始。
|
|
22
|
+
let finalContent = content
|
|
23
|
+
if (session.event?.platform === 'qq' && session.event?.channel?.type === 0) {
|
|
24
|
+
finalContent = 'Ciallo~(∠・ω< )\n' + content
|
|
25
|
+
}
|
|
26
|
+
await session.send(finalContent)
|
|
22
27
|
}
|
|
23
28
|
|
|
24
29
|
async start(_data: MsgMessage) {
|
|
@@ -16,6 +16,6 @@ export default class ImageHandler extends handel_base {
|
|
|
16
16
|
content = new AnalysisMsg().parse(data)
|
|
17
17
|
}
|
|
18
18
|
await this.send(data, content)
|
|
19
|
-
if (rendered &&
|
|
19
|
+
if (rendered && data.itemCard) await this.send(data, new AnalysisMsg().parse(data))
|
|
20
20
|
}
|
|
21
21
|
}
|