@sjtdev/koishi-plugin-dota2tracker 1.2.9 → 1.2.10-pre.2

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/changelog.md CHANGED
@@ -1,3 +1,13 @@
1
+ ### 1.2.10-pre.2
2
+ **改进**:
3
+ - 调整了总结模板和玩家信息模板中胜负字体颜色样式,使其看起来更清晰。
4
+ - 优化了总结模板中胜负数和胜率的样式。
5
+
6
+ ### 1.2.10-pre
7
+ **修复**:
8
+ - 修复战报图中若玩家名有html标签会导致图片排版错乱的问题。
9
+ - 修复周报与日报中评分条样式不正确的问题。
10
+
1
11
  # 1.2.9
2
12
  **改进**:
3
13
  - 现在周报与日报改为图片版,依旧由`ejs`生成。去除配置页中周报与日报的“实验性”标识。(目前周报与日报使用同一模板,未来可能会设计数据更丰富的周报,也可能不会_(:3」∠)_
package/lib/index.js CHANGED
@@ -1222,7 +1222,7 @@ var Config = import_koishi.Schema.intersect([
1222
1222
  }).description("基础设置"),
1223
1223
  import_koishi.Schema.intersect([
1224
1224
  import_koishi.Schema.object({
1225
- dailyReportSwitch: import_koishi.Schema.boolean().default(false).description("日报功能").experimental()
1225
+ dailyReportSwitch: import_koishi.Schema.boolean().default(false).description("日报功能")
1226
1226
  }).description("总结设置"),
1227
1227
  import_koishi.Schema.union([
1228
1228
  import_koishi.Schema.object({
@@ -1232,7 +1232,7 @@ var Config = import_koishi.Schema.intersect([
1232
1232
  })
1233
1233
  ]),
1234
1234
  import_koishi.Schema.object({
1235
- weeklyReportSwitch: import_koishi.Schema.boolean().default(false).description("周报功能").experimental()
1235
+ weeklyReportSwitch: import_koishi.Schema.boolean().default(false).description("周报功能")
1236
1236
  }),
1237
1237
  import_koishi.Schema.union([
1238
1238
  import_koishi.Schema.object({
@@ -1875,7 +1875,19 @@ function genImageHTML(data, template, type) {
1875
1875
  ImageFormat,
1876
1876
  d2a: dotaconstants_add_exports,
1877
1877
  dotaconstants: dotaconstants3,
1878
- moment: import_moment.default
1878
+ moment: import_moment.default,
1879
+ escapeHTML: /* @__PURE__ */ __name(function escapeHTML(str) {
1880
+ return str.replace(/[&<>"']/g, function(match) {
1881
+ const escape = {
1882
+ "&": "&amp;",
1883
+ "<": "&lt;",
1884
+ ">": "&gt;",
1885
+ '"': "&quot;",
1886
+ "'": "&#39;"
1887
+ };
1888
+ return escape[match];
1889
+ });
1890
+ }, "escapeHTML")
1879
1891
  };
1880
1892
  let result = "";
1881
1893
  ejs.renderFile(templatePath, templateData, { strict: false }, (err, html) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sjtdev/koishi-plugin-dota2tracker",
3
3
  "description": "koishi插件-追踪群友的DOTA2对局",
4
- "version": "1.2.9",
4
+ "version": "1.2.10-pre.2",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [
@@ -139,9 +139,9 @@
139
139
  <div class="info">
140
140
  <img class="avatar user" src="${user?.user?.avatar}" alt="" />
141
141
  <div class="name">
142
- <span class="nick_name">${user.nickName}</span>
143
- <span class="user name">${user.nick || user.user?.name}</span>
144
- <span class="steam name">${user.steamAccount.name}</span>
142
+ <span class="nick_name">${escapeHTML(user.nickName)}</span>
143
+ <span class="user name">${escapeHTML(user.nick || user.user?.name)}</span>
144
+ <span class="steam name">${escapeHTML(user.steamAccount.name)}</span>
145
145
  <span class="user id">${user.userId}</span>
146
146
  <span class="steam id">${user.steamId}</span>
147
147
  </div>
@@ -728,7 +728,7 @@
728
728
  <p class="level">${player.level}</p>
729
729
  </div>
730
730
  <div class="player_info">
731
- <summary class="player_name">${player.steamAccount.name}</summary>
731
+ <summary class="player_name">${escapeHTML(player.steamAccount.name)}</summary>
732
732
  <summary class="player_performance">
733
733
  <span class="kda">${player.kills}/${player.deaths}/${player.assists}</span>&nbsp;&nbsp;
734
734
  <span class="kc" style="color:${kcndcStyle.kc(player.killContribution * 100)}">${Math.floor(player.killContribution * 100)}%</span>&nbsp;&nbsp;
@@ -502,7 +502,7 @@
502
502
  <div class="titles">${player.titles.map((item) => `<span style="color: ${darkenHexColor(item.color, 25)};">${item.name}</span>`).join('')}</div>
503
503
  <div class="player_name row-1">
504
504
  <span class="rank">${`[${d2a.rank[player.rank.medal]}${player.rank.star||""}]`}</span>
505
- <span class="name">${player.steamAccount.name}</span>
505
+ <span class="name">${escapeHTML(player.steamAccount.name)}</span>
506
506
  </div>
507
507
  <p class="pick">${player.isRandom?'随机':`第${player.order == null ? "?" : player.order + 1}手`} ${d2a.position[player.position?.slice(-1)]??''}</p>
508
508
  <p class="networth">
@@ -78,10 +78,10 @@
78
78
  }
79
79
 
80
80
  .player .info .matches span.win {
81
- color: #006400;
81
+ color: #007A00;
82
82
  }
83
83
  .player .info .matches span.lose {
84
- color: #8b0000;
84
+ color: #B30000;
85
85
  }
86
86
 
87
87
  .player .info .matches span.victory {
@@ -409,7 +409,7 @@
409
409
  <%- `
410
410
  <div class="avatar"><img src="${player.steamAccount?.avatar}" alt="" /></div>
411
411
  <div class="info">
412
- <p class="name">${player.steamAccount.name}${player.guildMember ? ` <span class="guild ${guildLevel(player.guildMember.guild.currentPercentile)}">[${player.guildMember.guild.tag}]</span>${player.genHero?` >${player.genHero.names_cn[0]}<`:""}</p>` : ""}
412
+ <p class="name">${escapeHTML(player.steamAccount.name)}${player.guildMember ? ` <span class="guild ${guildLevel(player.guildMember.guild.currentPercentile)}">[${escapeHTML(player.guildMember.guild.tag)}]</span>${player.genHero?` >${player.genHero.names_cn[0]}<`:""}</p>` : ""}
413
413
  <p class="matches"><span>场次:${player.matchCount}(<span class="win">${player.winCount}</span>/<span class="lose">${player.matchCount - player.winCount}</span>)</span>胜率:<span style="color:${utils.winRateColor(player.winCount / player.matchCount)};">${((player.winCount / player.matchCount) * 100).toFixed(2)}%</span></p>
414
414
  <p class="matches"><span>最近25场:<span class="win">${nearWinCount}</span>/<span class="lose">${nearMatchCount - nearWinCount}</span></span><span>胜率:<span style="color:${utils.winRateColor(nearWinCount / nearMatchCount)};">${(
415
415
  (nearWinCount / nearMatchCount) * 100).toFixed(2)}%</span></span><span>评分:${(player.performance.imp > 0 ? "+" : "") + player.performance.imp}</span></span></p>
@@ -25,8 +25,6 @@
25
25
  span {
26
26
  min-width: 0;
27
27
  white-space: nowrap; /* 不换行 */
28
- overflow: hidden; /* 超出部分隐藏 */
29
- text-overflow: ellipsis; /* 省略号 */
30
28
  }
31
29
 
32
30
  .title {
@@ -57,8 +55,21 @@
57
55
  display: block;
58
56
  width: 100%;
59
57
  text-align: center;
58
+ overflow: hidden; /* 超出部分隐藏 */
59
+ text-overflow: ellipsis; /* 省略号 */
60
+ }
61
+ .player > .count {
62
+ display: grid;
63
+ grid-template-columns: 1fr 1fr 1.8fr;
64
+ width: 100%;
60
65
  }
61
66
 
67
+ .player > .count > span {
68
+ text-align: left;
69
+ }
70
+ .player > .count > span:last-child {
71
+ text-align: right;
72
+ }
62
73
  .player > .performance {
63
74
  display: flex;
64
75
  align-items: center;
@@ -82,7 +93,7 @@
82
93
  justify-content: flex-end;
83
94
  }
84
95
  .player > .performance > .score_bar.neg > .left {
85
- background: linear-gradient(to right, #777, #888, #999, #888, #777);
96
+ background: linear-gradient(to right, #777, #888, #888, #777);
86
97
  }
87
98
  .player > .performance > .score_bar.pos > .right {
88
99
  background: linear-gradient(to right, #6cf, #7df, #6cf);
@@ -117,10 +128,10 @@
117
128
  margin-left: 4px;
118
129
  }
119
130
  span.win {
120
- color: #006400;
131
+ color: #007A00;
121
132
  }
122
133
  span.lose {
123
- color: #8b0000;
134
+ color: #B30000;
124
135
  }
125
136
  </style>
126
137
  </head>
@@ -138,18 +149,18 @@
138
149
  <span>胜率<%= Math.round((player.winCount / player.matches.length) * 100) %>%</span>
139
150
  </span>
140
151
  <div class="performance">
141
- <% const imp = {sign : "", left : 0, right : 0} %>
152
+ <% const imp = {sign : "", left : 0, right : 0, absValue : Math.abs(player.avgImp)} %>
142
153
  <% if (player.avgImp > 0) imp.sign = "+"; %>
143
154
  <% if (player.avgImp < 0) imp.sign = "-"; %>
144
- <% if (Math.abs(player.avgImp) > 25) { %>
155
+ <% if (imp.absValue > 25) { %>
145
156
  <% imp.isOver = true; %>
146
- <% if (player.avgImp > 0) imp.right = player.avgImp; %>
147
- <% if (player.avgImp < 0) imp.left = player.avgImp; %>
148
- <% } else imp.left = imp.right = player.avgImp; %>
149
- <div class="score_bar<%= Math.abs(player.avgImp) > 0 ? " pos" : " neg" %><%= Math.abs(player.avgImp) > 25 ? " over" : "" %>">
150
- <div class="left" style="width: <%= imp.left %>px"></div>
157
+ <% if (player.avgImp > 0) imp.right = imp.absValue; %>
158
+ <% if (player.avgImp < 0) imp.left = imp.absValue; %>
159
+ <% } else imp.left = imp.right = imp.absValue; %>
160
+ <div class="score_bar<%= player.avgImp > 0 ? " pos" : " neg" %><%= Math.abs(player.avgImp) > 25 ? " over" : "" %>">
161
+ <div class="left" <%- `style="width: ${imp.left}px"` %>></div>
151
162
  <div class="pipe"></div>
152
- <div class="right" style="width: <%= imp.right %>px"></div>
163
+ <div class="right" <%- `style="width: ${imp.right}px"` %>></div>
153
164
  </div>
154
165
  <span class="score_value"><%= `${player.avgImp > 0 ? imp.sign : ""}${player.avgImp}` %></span>
155
166
  </div>