koishi-plugin-group-analysis-mx 1.0.1
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/config.d.ts +53 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +376 -0
- package/lib/config.js.map +1 -0
- package/lib/cron.d.ts +8 -0
- package/lib/cron.d.ts.map +1 -0
- package/lib/cron.js +62 -0
- package/lib/cron.js.map +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +51 -0
- package/lib/index.js.map +1 -0
- package/lib/onebot/cqcode.d.ts +14 -0
- package/lib/onebot/cqcode.d.ts.map +1 -0
- package/lib/onebot/cqcode.js +92 -0
- package/lib/onebot/cqcode.js.map +1 -0
- package/lib/plugin.d.ts +4 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +41 -0
- package/lib/plugin.js.map +1 -0
- package/lib/plugins/command.d.ts +9 -0
- package/lib/plugins/command.d.ts.map +1 -0
- package/lib/plugins/command.js +196 -0
- package/lib/plugins/command.js.map +1 -0
- package/lib/service/analysis.d.ts +48 -0
- package/lib/service/analysis.d.ts.map +1 -0
- package/lib/service/analysis.js +714 -0
- package/lib/service/analysis.js.map +1 -0
- package/lib/service/llm.d.ts +43 -0
- package/lib/service/llm.d.ts.map +1 -0
- package/lib/service/llm.js +160 -0
- package/lib/service/llm.js.map +1 -0
- package/lib/service/message.d.ts +55 -0
- package/lib/service/message.d.ts.map +1 -0
- package/lib/service/message.js +527 -0
- package/lib/service/message.js.map +1 -0
- package/lib/service/renderer.d.ts +23 -0
- package/lib/service/renderer.d.ts.map +1 -0
- package/lib/service/renderer.js +298 -0
- package/lib/service/renderer.js.map +1 -0
- package/lib/skins/anime.d.ts +19 -0
- package/lib/skins/anime.d.ts.map +1 -0
- package/lib/skins/anime.js +138 -0
- package/lib/skins/anime.js.map +1 -0
- package/lib/skins/art.d.ts +19 -0
- package/lib/skins/art.d.ts.map +1 -0
- package/lib/skins/art.js +146 -0
- package/lib/skins/art.js.map +1 -0
- package/lib/skins/index.d.ts +50 -0
- package/lib/skins/index.d.ts.map +1 -0
- package/lib/skins/index.js +84 -0
- package/lib/skins/index.js.map +1 -0
- package/lib/skins/md3.d.ts +19 -0
- package/lib/skins/md3.d.ts.map +1 -0
- package/lib/skins/md3.js +147 -0
- package/lib/skins/md3.js.map +1 -0
- package/lib/skins/newspaper.d.ts +19 -0
- package/lib/skins/newspaper.d.ts.map +1 -0
- package/lib/skins/newspaper.js +141 -0
- package/lib/skins/newspaper.js.map +1 -0
- package/lib/skins/scrapbook.d.ts +20 -0
- package/lib/skins/scrapbook.d.ts.map +1 -0
- package/lib/skins/scrapbook.js +207 -0
- package/lib/skins/scrapbook.js.map +1 -0
- package/lib/skins/types.d.ts +69 -0
- package/lib/skins/types.d.ts.map +1 -0
- package/lib/skins/types.js +12 -0
- package/lib/skins/types.js.map +1 -0
- package/lib/types.d.ts +170 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/utils.d.ts +55 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +334 -0
- package/lib/utils.js.map +1 -0
- package/package.json +48 -0
- package/resources/anime/css/template_group.css +470 -0
- package/resources/anime/images/decoration_br.svg +19 -0
- package/resources/anime/images/decoration_tl.svg +24 -0
- package/resources/anime/template_group.html +108 -0
- package/resources/anime/template_user.html +99 -0
- package/resources/art/css/template_group.css +484 -0
- package/resources/art/template_group.html +77 -0
- package/resources/art/template_user.html +63 -0
- package/resources/md3/css/template_group.css +880 -0
- package/resources/md3/template_group.html +189 -0
- package/resources/md3/template_user.html +175 -0
- package/resources/newspaper/css/template_group.css +568 -0
- package/resources/newspaper/template_group.html +133 -0
- package/resources/newspaper/template_user.html +119 -0
- package/resources/scrapbook/css/style.css +1094 -0
- package/resources/scrapbook/template_group.html +115 -0
- package/resources/scrapbook/template_user.html +119 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"art.js","sourceRoot":"","sources":["../../src/skins/art.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { SkinRenderer } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Skin registry
|
|
4
|
+
* Manages all available skin renderers
|
|
5
|
+
*/
|
|
6
|
+
declare class SkinRegistry {
|
|
7
|
+
private skins;
|
|
8
|
+
constructor();
|
|
9
|
+
/**
|
|
10
|
+
* Register a skin renderer
|
|
11
|
+
* @param skin Skin renderer instance
|
|
12
|
+
*/
|
|
13
|
+
register(skin: SkinRenderer): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get a skin renderer by ID
|
|
16
|
+
* @param id Skin ID
|
|
17
|
+
* @returns Skin renderer or undefined if not found
|
|
18
|
+
*/
|
|
19
|
+
get(id: string): SkinRenderer | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Get a skin renderer by ID, falling back to default if not found
|
|
22
|
+
* @param id Skin ID
|
|
23
|
+
* @returns Skin renderer (never undefined, falls back to md3)
|
|
24
|
+
*/
|
|
25
|
+
getSafe(id: string): SkinRenderer;
|
|
26
|
+
/**
|
|
27
|
+
* Check if a skin exists
|
|
28
|
+
* @param id Skin ID
|
|
29
|
+
* @returns True if skin exists
|
|
30
|
+
*/
|
|
31
|
+
has(id: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Get all registered skin IDs
|
|
34
|
+
* @returns Array of skin IDs
|
|
35
|
+
*/
|
|
36
|
+
getAllIds(): string[];
|
|
37
|
+
/**
|
|
38
|
+
* Get all registered skin renderers
|
|
39
|
+
* @returns Array of skin renderers
|
|
40
|
+
*/
|
|
41
|
+
getAll(): SkinRenderer[];
|
|
42
|
+
}
|
|
43
|
+
export declare const skinRegistry: SkinRegistry;
|
|
44
|
+
export { SkinRenderer, getAvatarUrl } from './types';
|
|
45
|
+
export { Md3SkinRenderer } from './md3';
|
|
46
|
+
export { AnimeSkinRenderer } from './anime';
|
|
47
|
+
export { NewspaperSkinRenderer } from './newspaper';
|
|
48
|
+
export { ArtSkinRenderer } from './art';
|
|
49
|
+
export { ScrapbookSkinRenderer } from './scrapbook';
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAOtC;;;GAGG;AACH,cAAM,YAAY;IACd,OAAO,CAAC,KAAK,CAAuC;;IAWpD;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIlC;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY;IAIjC;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;;OAGG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;;OAGG;IACH,MAAM,IAAI,YAAY,EAAE;CAG3B;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAA;AAG9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScrapbookSkinRenderer = exports.ArtSkinRenderer = exports.NewspaperSkinRenderer = exports.AnimeSkinRenderer = exports.Md3SkinRenderer = exports.getAvatarUrl = exports.skinRegistry = void 0;
|
|
4
|
+
const md3_1 = require("./md3");
|
|
5
|
+
const anime_1 = require("./anime");
|
|
6
|
+
const newspaper_1 = require("./newspaper");
|
|
7
|
+
const art_1 = require("./art");
|
|
8
|
+
const scrapbook_1 = require("./scrapbook");
|
|
9
|
+
/**
|
|
10
|
+
* Skin registry
|
|
11
|
+
* Manages all available skin renderers
|
|
12
|
+
*/
|
|
13
|
+
class SkinRegistry {
|
|
14
|
+
skins = new Map();
|
|
15
|
+
constructor() {
|
|
16
|
+
// Register built-in skins
|
|
17
|
+
this.register(new md3_1.Md3SkinRenderer());
|
|
18
|
+
this.register(new anime_1.AnimeSkinRenderer());
|
|
19
|
+
this.register(new newspaper_1.NewspaperSkinRenderer());
|
|
20
|
+
this.register(new art_1.ArtSkinRenderer());
|
|
21
|
+
this.register(new scrapbook_1.ScrapbookSkinRenderer());
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register a skin renderer
|
|
25
|
+
* @param skin Skin renderer instance
|
|
26
|
+
*/
|
|
27
|
+
register(skin) {
|
|
28
|
+
this.skins.set(skin.id, skin);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get a skin renderer by ID
|
|
32
|
+
* @param id Skin ID
|
|
33
|
+
* @returns Skin renderer or undefined if not found
|
|
34
|
+
*/
|
|
35
|
+
get(id) {
|
|
36
|
+
return this.skins.get(id);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get a skin renderer by ID, falling back to default if not found
|
|
40
|
+
* @param id Skin ID
|
|
41
|
+
* @returns Skin renderer (never undefined, falls back to md3)
|
|
42
|
+
*/
|
|
43
|
+
getSafe(id) {
|
|
44
|
+
return this.skins.get(id) || this.skins.get('md3');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if a skin exists
|
|
48
|
+
* @param id Skin ID
|
|
49
|
+
* @returns True if skin exists
|
|
50
|
+
*/
|
|
51
|
+
has(id) {
|
|
52
|
+
return this.skins.has(id);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get all registered skin IDs
|
|
56
|
+
* @returns Array of skin IDs
|
|
57
|
+
*/
|
|
58
|
+
getAllIds() {
|
|
59
|
+
return Array.from(this.skins.keys());
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get all registered skin renderers
|
|
63
|
+
* @returns Array of skin renderers
|
|
64
|
+
*/
|
|
65
|
+
getAll() {
|
|
66
|
+
return Array.from(this.skins.values());
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Export singleton instance
|
|
70
|
+
exports.skinRegistry = new SkinRegistry();
|
|
71
|
+
// Re-export types and individual skins
|
|
72
|
+
var types_1 = require("./types");
|
|
73
|
+
Object.defineProperty(exports, "getAvatarUrl", { enumerable: true, get: function () { return types_1.getAvatarUrl; } });
|
|
74
|
+
var md3_2 = require("./md3");
|
|
75
|
+
Object.defineProperty(exports, "Md3SkinRenderer", { enumerable: true, get: function () { return md3_2.Md3SkinRenderer; } });
|
|
76
|
+
var anime_2 = require("./anime");
|
|
77
|
+
Object.defineProperty(exports, "AnimeSkinRenderer", { enumerable: true, get: function () { return anime_2.AnimeSkinRenderer; } });
|
|
78
|
+
var newspaper_2 = require("./newspaper");
|
|
79
|
+
Object.defineProperty(exports, "NewspaperSkinRenderer", { enumerable: true, get: function () { return newspaper_2.NewspaperSkinRenderer; } });
|
|
80
|
+
var art_2 = require("./art");
|
|
81
|
+
Object.defineProperty(exports, "ArtSkinRenderer", { enumerable: true, get: function () { return art_2.ArtSkinRenderer; } });
|
|
82
|
+
var scrapbook_2 = require("./scrapbook");
|
|
83
|
+
Object.defineProperty(exports, "ScrapbookSkinRenderer", { enumerable: true, get: function () { return scrapbook_2.ScrapbookSkinRenderer; } });
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skins/index.ts"],"names":[],"mappings":";;;AACA,+BAAuC;AACvC,mCAA2C;AAC3C,2CAAmD;AACnD,+BAAuC;AACvC,2CAAmD;AAEnD;;;GAGG;AACH,MAAM,YAAY;IACN,KAAK,GAA8B,IAAI,GAAG,EAAE,CAAA;IAEpD;QACI,0BAA0B;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,qBAAe,EAAE,CAAC,CAAA;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,yBAAiB,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,iCAAqB,EAAE,CAAC,CAAA;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,qBAAe,EAAE,CAAC,CAAA;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,iCAAqB,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAkB;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,EAAU;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAA;IACvD,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,EAAU;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;IAED;;;OAGG;IACH,SAAS;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;IAED;;;OAGG;IACH,MAAM;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1C,CAAC;CACJ;AAED,4BAA4B;AACf,QAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;AAE9C,uCAAuC;AACvC,iCAAoD;AAA7B,qGAAA,YAAY,OAAA;AACnC,6BAAuC;AAA9B,sGAAA,eAAe,OAAA;AACxB,iCAA2C;AAAlC,0GAAA,iBAAiB,OAAA;AAC1B,yCAAmD;AAA1C,kHAAA,qBAAqB,OAAA;AAC9B,6BAAuC;AAA9B,sGAAA,eAAe,OAAA;AACxB,yCAAmD;AAA1C,kHAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SkinRenderer } from './types';
|
|
2
|
+
import { GroupAnalysisResult, UserStats } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Material Design 3 (MD3) skin renderer
|
|
5
|
+
* This is the default skin with a clean, modern Material Design aesthetic
|
|
6
|
+
*/
|
|
7
|
+
export declare class Md3SkinRenderer implements SkinRenderer {
|
|
8
|
+
readonly id = "md3";
|
|
9
|
+
readonly name = "Material Design 3";
|
|
10
|
+
readonly containerSelector = ".container";
|
|
11
|
+
formatUserStats(userStats: UserStats[]): string;
|
|
12
|
+
formatGoldenQuotes(quotes: GroupAnalysisResult['goldenQuotes']): string;
|
|
13
|
+
formatUserTitles(userTitles: GroupAnalysisResult['userTitles']): string;
|
|
14
|
+
formatTopics(topics: GroupAnalysisResult['topics']): string;
|
|
15
|
+
generateActiveHoursChart(activeHours: Record<number, number>): string;
|
|
16
|
+
formatTags(tags: string[] | undefined): string;
|
|
17
|
+
formatEvidence(items: string[] | '无' | undefined): string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=md3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"md3.d.ts","sourceRoot":"","sources":["../../src/skins/md3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAChD,QAAQ,CAAC,EAAE,SAAQ;IACnB,QAAQ,CAAC,IAAI,uBAAsB;IACnC,QAAQ,CAAC,iBAAiB,gBAAe;IAEzC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM;IAyB/C,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,MAAM;IAoBvE,gBAAgB,CAAC,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,GAAG,MAAM;IAqBvE,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,MAAM;IAkB3D,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IA+CrE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM;IAQ9C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,SAAS,GAAG,MAAM;CAsB5D"}
|
package/lib/skins/md3.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Md3SkinRenderer = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
/**
|
|
6
|
+
* Material Design 3 (MD3) skin renderer
|
|
7
|
+
* This is the default skin with a clean, modern Material Design aesthetic
|
|
8
|
+
*/
|
|
9
|
+
class Md3SkinRenderer {
|
|
10
|
+
id = 'md3';
|
|
11
|
+
name = 'Material Design 3';
|
|
12
|
+
containerSelector = '.container';
|
|
13
|
+
formatUserStats(userStats) {
|
|
14
|
+
if (!userStats || userStats.length === 0) {
|
|
15
|
+
return '<div class="empty-state">暂无用户统计信息</div>';
|
|
16
|
+
}
|
|
17
|
+
return userStats
|
|
18
|
+
.map((user) => `
|
|
19
|
+
<div class="user-stat-card">
|
|
20
|
+
<img src="${(0, types_1.getAvatarUrl)(user.userId)}" alt="avatar" class="avatar">
|
|
21
|
+
<div class="user-details">
|
|
22
|
+
<div class="nickname">${user.nickname}</div>
|
|
23
|
+
<div class="stats-grid">
|
|
24
|
+
<span>发言数: <strong>${user.messageCount}</strong></span>
|
|
25
|
+
<span>字数: <strong>${user.charCount}</strong></span>
|
|
26
|
+
<span>回复率: <strong>${(user.replyRatio * 100).toFixed(0)}%</strong></span>
|
|
27
|
+
<span>夜猫子: <strong>${(user.nightRatio * 100).toFixed(0)}%</strong></span>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
`)
|
|
32
|
+
.join('');
|
|
33
|
+
}
|
|
34
|
+
formatGoldenQuotes(quotes) {
|
|
35
|
+
if (!quotes || quotes.length === 0) {
|
|
36
|
+
return '<div class="empty-state">本次未发现逆天神人发言</div>';
|
|
37
|
+
}
|
|
38
|
+
return quotes
|
|
39
|
+
.map((quote) => `
|
|
40
|
+
<div class="quote-card">
|
|
41
|
+
<div class="quote-content">"${quote.content}"</div>
|
|
42
|
+
<div class="quote-footer">
|
|
43
|
+
<span class="quote-sender">— ${quote.sender}</span>
|
|
44
|
+
<p class="quote-reason"><strong>逆天理由:</strong> ${quote.reason}</p>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
`)
|
|
48
|
+
.join('');
|
|
49
|
+
}
|
|
50
|
+
formatUserTitles(userTitles) {
|
|
51
|
+
if (!userTitles || userTitles.length === 0) {
|
|
52
|
+
return '<div class="empty-state">本次无人获得特殊称号</div>';
|
|
53
|
+
}
|
|
54
|
+
return userTitles
|
|
55
|
+
.map((title) => `
|
|
56
|
+
<div class="title-card">
|
|
57
|
+
<img src="${(0, types_1.getAvatarUrl)(title.id)}" alt="avatar" class="avatar">
|
|
58
|
+
<div class="title-details">
|
|
59
|
+
<div class="nickname">${title.name}</div>
|
|
60
|
+
<div class="title-badge">${title.mbti && title.mbti !== 'N/A' ? `${title.title} | ${title.mbti}` : title.title}</div>
|
|
61
|
+
<p class="title-reason">${title.reason}</p>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
`)
|
|
65
|
+
.join('');
|
|
66
|
+
}
|
|
67
|
+
formatTopics(topics) {
|
|
68
|
+
if (!topics || topics.length === 0) {
|
|
69
|
+
return '<div class="empty-state">本次无明显讨论话题</div>';
|
|
70
|
+
}
|
|
71
|
+
return topics
|
|
72
|
+
.map((topic) => `
|
|
73
|
+
<div class="topic-card">
|
|
74
|
+
<div class="topic-title">${topic.topic}</div>
|
|
75
|
+
<div class="topic-contributors">主要参与者: ${topic.contributors.join(', ')}</div>
|
|
76
|
+
<p class="topic-detail">${topic.detail}</p>
|
|
77
|
+
</div>
|
|
78
|
+
`)
|
|
79
|
+
.join('');
|
|
80
|
+
}
|
|
81
|
+
generateActiveHoursChart(activeHours) {
|
|
82
|
+
const values = Object.values(activeHours);
|
|
83
|
+
const maxCount = values.length > 0 ? Math.max(...values) : 0;
|
|
84
|
+
const chartBars = [];
|
|
85
|
+
// The container `.activity-bar` is 180px tall.
|
|
86
|
+
// The label at the bottom is approx 20px.
|
|
87
|
+
// The count at the top is approx 15px.
|
|
88
|
+
// Max available height for the bar is 180 - 20 - 15 = 145px.
|
|
89
|
+
const maxBarHeight = 145;
|
|
90
|
+
for (let i = 0; i < 24; i++) {
|
|
91
|
+
const count = activeHours[i] || 0;
|
|
92
|
+
let barHeight = maxCount > 0 ? (count / maxCount) * maxBarHeight : 0;
|
|
93
|
+
if (count > 0 && barHeight < 3) {
|
|
94
|
+
barHeight = 3; // 最小可见高度
|
|
95
|
+
}
|
|
96
|
+
const percentage = maxCount > 0 ? Math.round((count / maxCount) * 100) : 0;
|
|
97
|
+
const barStyle = barHeight > 0
|
|
98
|
+
? `style="height: ${barHeight}px !important;"`
|
|
99
|
+
: `style="height: 0px !important;"`;
|
|
100
|
+
chartBars.push(`
|
|
101
|
+
<div class="activity-bar" title="${i}:00 - ${count} 条消息 (${percentage}%)">
|
|
102
|
+
<div class="activity-bar-count">${count > 0 ? count : ''}</div>
|
|
103
|
+
<div class="activity-bar-bar" ${barStyle}></div>
|
|
104
|
+
<span class="activity-bar-label">${String(i).padStart(2, '0')}</span>
|
|
105
|
+
</div>
|
|
106
|
+
`);
|
|
107
|
+
}
|
|
108
|
+
return `
|
|
109
|
+
<div class="activity-chart-container">
|
|
110
|
+
<div class="activity-chart">
|
|
111
|
+
${chartBars.join('')}
|
|
112
|
+
</div>
|
|
113
|
+
<div class="chart-legend">
|
|
114
|
+
<span class="legend-text">24小时活跃度分布 (峰值: ${maxCount} 条消息)</span>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
`;
|
|
118
|
+
}
|
|
119
|
+
formatTags(tags) {
|
|
120
|
+
if (!tags || tags.length === 0) {
|
|
121
|
+
return '<div class="empty-state">暂无数据</div>';
|
|
122
|
+
}
|
|
123
|
+
return tags.map((tag) => `<div class="chip">${tag}</div>`).join('');
|
|
124
|
+
}
|
|
125
|
+
formatEvidence(items) {
|
|
126
|
+
if (!items || items.length === 0 || items === '无') {
|
|
127
|
+
return '<div class="empty-state">暂无事实依据</div>';
|
|
128
|
+
}
|
|
129
|
+
const cards = items
|
|
130
|
+
.map((item) => {
|
|
131
|
+
const quoteHtml = (item || '')
|
|
132
|
+
.split('\n')
|
|
133
|
+
.map((line) => line.trim())
|
|
134
|
+
.filter(Boolean)
|
|
135
|
+
.join('<br/>');
|
|
136
|
+
return `
|
|
137
|
+
<div class="card outlined-card evidence-card">
|
|
138
|
+
<p>${quoteHtml}</p>
|
|
139
|
+
</div>
|
|
140
|
+
`;
|
|
141
|
+
})
|
|
142
|
+
.join('');
|
|
143
|
+
return `<div class="card-grid">${cards}</div>`;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.Md3SkinRenderer = Md3SkinRenderer;
|
|
147
|
+
//# sourceMappingURL=md3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"md3.js","sourceRoot":"","sources":["../../src/skins/md3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SkinRenderer } from './types';
|
|
2
|
+
import { GroupAnalysisResult, UserStats } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Newspaper skin renderer
|
|
5
|
+
* Traditional Chinese Newspaper Style (Minguo/Vintage)
|
|
6
|
+
*/
|
|
7
|
+
export declare class NewspaperSkinRenderer implements SkinRenderer {
|
|
8
|
+
readonly id = "newspaper";
|
|
9
|
+
readonly name = "\u62A5\u7EB8\u98CE\u683C";
|
|
10
|
+
readonly containerSelector = ".paper-container";
|
|
11
|
+
formatUserStats(userStats: UserStats[]): string;
|
|
12
|
+
formatGoldenQuotes(quotes: GroupAnalysisResult['goldenQuotes']): string;
|
|
13
|
+
formatUserTitles(userTitles: GroupAnalysisResult['userTitles']): string;
|
|
14
|
+
formatTopics(topics: GroupAnalysisResult['topics']): string;
|
|
15
|
+
generateActiveHoursChart(activeHours: Record<number, number>): string;
|
|
16
|
+
formatTags(tags: string[] | undefined): string;
|
|
17
|
+
formatEvidence(items: string[] | '无' | undefined): string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=newspaper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newspaper.d.ts","sourceRoot":"","sources":["../../src/skins/newspaper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzD;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACtD,QAAQ,CAAC,EAAE,eAAc;IACzB,QAAQ,CAAC,IAAI,8BAAS;IACtB,QAAQ,CAAC,iBAAiB,sBAAqB;IAE/C,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM;IA2B/C,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,MAAM;IAmBvE,gBAAgB,CAAC,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,GAAG,MAAM;IAqBvE,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,MAAM;IAkB3D,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAsCrE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM;IAU9C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,SAAS,GAAG,MAAM;CAqB5D"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NewspaperSkinRenderer = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
/**
|
|
6
|
+
* Newspaper skin renderer
|
|
7
|
+
* Traditional Chinese Newspaper Style (Minguo/Vintage)
|
|
8
|
+
*/
|
|
9
|
+
class NewspaperSkinRenderer {
|
|
10
|
+
id = 'newspaper';
|
|
11
|
+
name = '报纸风格';
|
|
12
|
+
containerSelector = '.paper-container';
|
|
13
|
+
formatUserStats(userStats) {
|
|
14
|
+
if (!userStats || userStats.length === 0) {
|
|
15
|
+
return '<div class="empty-news">暂无人物报道</div>';
|
|
16
|
+
}
|
|
17
|
+
return userStats
|
|
18
|
+
.map((user, index) => `
|
|
19
|
+
<div class="news-profile">
|
|
20
|
+
<div class="profile-rank">NO.${index + 1}</div>
|
|
21
|
+
<div class="profile-main">
|
|
22
|
+
<img src="${(0, types_1.getAvatarUrl)(user.userId)}" alt="avatar" class="profile-avatar">
|
|
23
|
+
<div class="profile-info">
|
|
24
|
+
<div class="profile-name">${user.nickname}</div>
|
|
25
|
+
<div class="profile-data">
|
|
26
|
+
<span class="data-item">发言: ${user.messageCount}</span>
|
|
27
|
+
<span class="data-item">字数: ${user.charCount}</span>
|
|
28
|
+
<span class="data-item">回复率: ${(user.replyRatio * 100).toFixed(0)}%</span>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
`)
|
|
34
|
+
.join('');
|
|
35
|
+
}
|
|
36
|
+
formatGoldenQuotes(quotes) {
|
|
37
|
+
if (!quotes || quotes.length === 0) {
|
|
38
|
+
return '<div class="empty-news">本期无金句收录</div>';
|
|
39
|
+
}
|
|
40
|
+
return quotes
|
|
41
|
+
.map((quote) => `
|
|
42
|
+
<div class="news-snippet">
|
|
43
|
+
<div class="snippet-content">“${quote.content}”</div>
|
|
44
|
+
<div class="snippet-source">
|
|
45
|
+
—— ${quote.sender} <span class="snippet-comment">(${quote.reason})</span>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
`)
|
|
49
|
+
.join('');
|
|
50
|
+
}
|
|
51
|
+
formatUserTitles(userTitles) {
|
|
52
|
+
if (!userTitles || userTitles.length === 0) {
|
|
53
|
+
return '<div class="empty-news">本期无特殊称号</div>';
|
|
54
|
+
}
|
|
55
|
+
return userTitles
|
|
56
|
+
.map((title) => `
|
|
57
|
+
<div class="title-item">
|
|
58
|
+
<div class="title-header">
|
|
59
|
+
<span class="title-name">${title.name}</span>
|
|
60
|
+
<span class="title-badge">${title.title}</span>
|
|
61
|
+
</div>
|
|
62
|
+
<div class="title-desc">${title.reason}</div>
|
|
63
|
+
${title.mbti && title.mbti !== 'N/A' ? `<div class="title-mbti">MBTI: ${title.mbti}</div>` : ''}
|
|
64
|
+
</div>
|
|
65
|
+
`)
|
|
66
|
+
.join('');
|
|
67
|
+
}
|
|
68
|
+
formatTopics(topics) {
|
|
69
|
+
if (!topics || topics.length === 0) {
|
|
70
|
+
return '<div class="empty-news">本期无重大新闻</div>';
|
|
71
|
+
}
|
|
72
|
+
return topics
|
|
73
|
+
.map((topic) => `
|
|
74
|
+
<div class="news-article">
|
|
75
|
+
<h3 class="article-title">${topic.topic}</h3>
|
|
76
|
+
<div class="article-meta">参与者: ${topic.contributors.join(', ')}</div>
|
|
77
|
+
<div class="article-body">${topic.detail}</div>
|
|
78
|
+
</div>
|
|
79
|
+
`)
|
|
80
|
+
.join('');
|
|
81
|
+
}
|
|
82
|
+
generateActiveHoursChart(activeHours) {
|
|
83
|
+
const values = Object.values(activeHours);
|
|
84
|
+
const maxCount = values.length > 0 ? Math.max(...values) : 0;
|
|
85
|
+
const chartBars = [];
|
|
86
|
+
// The container height
|
|
87
|
+
const maxBarHeight = 150;
|
|
88
|
+
for (let i = 0; i < 24; i++) {
|
|
89
|
+
const count = activeHours[i] || 0;
|
|
90
|
+
let barHeight = maxCount > 0 ? (count / maxCount) * maxBarHeight : 0;
|
|
91
|
+
if (count > 0 && barHeight < 2) {
|
|
92
|
+
barHeight = 2; // Min height
|
|
93
|
+
}
|
|
94
|
+
const percentage = maxCount > 0 ? Math.round((count / maxCount) * 100) : 0;
|
|
95
|
+
const barStyle = barHeight > 0
|
|
96
|
+
? `style="height: ${barHeight}px !important;"`
|
|
97
|
+
: `style="height: 0px !important;"`;
|
|
98
|
+
chartBars.push(`
|
|
99
|
+
<div class="chart-col" title="${i}:00 - ${count} 条 (${percentage}%)">
|
|
100
|
+
<div class="chart-bar" ${barStyle}></div>
|
|
101
|
+
<span class="chart-axis">${i}</span>
|
|
102
|
+
</div>
|
|
103
|
+
`);
|
|
104
|
+
}
|
|
105
|
+
return `
|
|
106
|
+
<div class="news-chart">
|
|
107
|
+
${chartBars.join('')}
|
|
108
|
+
</div>
|
|
109
|
+
`;
|
|
110
|
+
}
|
|
111
|
+
formatTags(tags) {
|
|
112
|
+
if (!tags || tags.length === 0) {
|
|
113
|
+
return '';
|
|
114
|
+
}
|
|
115
|
+
return tags
|
|
116
|
+
.map((tag) => `<span class="news-tag">${tag}</span>`)
|
|
117
|
+
.join('');
|
|
118
|
+
}
|
|
119
|
+
formatEvidence(items) {
|
|
120
|
+
if (!items || items.length === 0 || items === '无') {
|
|
121
|
+
return '<div class="empty-news">暂无依据</div>';
|
|
122
|
+
}
|
|
123
|
+
const listItems = items
|
|
124
|
+
.map((item) => {
|
|
125
|
+
const quoteHtml = (item || '')
|
|
126
|
+
.split('\n')
|
|
127
|
+
.map((line) => line.trim())
|
|
128
|
+
.filter(Boolean)
|
|
129
|
+
.join('<br/>');
|
|
130
|
+
return `
|
|
131
|
+
<li class="evidence-line">
|
|
132
|
+
${quoteHtml}
|
|
133
|
+
</li>
|
|
134
|
+
`;
|
|
135
|
+
})
|
|
136
|
+
.join('');
|
|
137
|
+
return `<ul class="evidence-list">${listItems}</ul>`;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.NewspaperSkinRenderer = NewspaperSkinRenderer;
|
|
141
|
+
//# sourceMappingURL=newspaper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newspaper.js","sourceRoot":"","sources":["../../src/skins/newspaper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SkinRenderer } from './types';
|
|
2
|
+
import { GroupAnalysisResult, UserStats } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Scrapbook Skin Renderer
|
|
5
|
+
* Ported from AstrBot's scrapbook template.
|
|
6
|
+
* Features a hand-drawn, colorful, and playful aesthetic.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ScrapbookSkinRenderer implements SkinRenderer {
|
|
9
|
+
readonly id = "scrapbook";
|
|
10
|
+
readonly name = "Scrapbook";
|
|
11
|
+
readonly containerSelector = ".container";
|
|
12
|
+
formatUserStats(userStats: UserStats[]): string;
|
|
13
|
+
formatGoldenQuotes(quotes: GroupAnalysisResult['goldenQuotes']): string;
|
|
14
|
+
formatUserTitles(userTitles: GroupAnalysisResult['userTitles']): string;
|
|
15
|
+
formatTopics(topics: GroupAnalysisResult['topics']): string;
|
|
16
|
+
formatTags(tags: string[]): string;
|
|
17
|
+
formatEvidence(evidence: string[]): string;
|
|
18
|
+
generateActiveHoursChart(activeHours: Record<number, number>): string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=scrapbook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrapbook.d.ts","sourceRoot":"","sources":["../../src/skins/scrapbook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzD;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACtD,QAAQ,CAAC,EAAE,eAAc;IACzB,QAAQ,CAAC,IAAI,eAAc;IAC3B,QAAQ,CAAC,iBAAiB,gBAAe;IAEzC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM;IAQ/C,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,MAAM;IA2CvE,gBAAgB,CAAC,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,GAAG,MAAM;IA6CvE,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,MAAM;IA8C3D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IASlC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM;IAa1C,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;CA2CxE"}
|