koishi-plugin-dew-bot 1.0.196 → 1.0.200
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/html/css/panel_common.css +6 -4
- package/lib/html/css/ranking.css +245 -0
- package/lib/html/page/ranking.html +292 -0
- package/lib/index.js +11 -1
- package/lib/plugin/server.js +1 -1
- package/lib/shared/face/enums.js +14 -6
- package/lib/shared/serviceProto.js +3 -2
- package/package.json +1 -1
- package/readme.md +27 -4
|
@@ -2,7 +2,7 @@ body {
|
|
|
2
2
|
margin: 0;
|
|
3
3
|
padding: 0;
|
|
4
4
|
width: 400px;
|
|
5
|
-
overflow:
|
|
5
|
+
overflow: auto;
|
|
6
6
|
position: relative;
|
|
7
7
|
background: #232d23;
|
|
8
8
|
min-height: 500px;
|
|
@@ -12,7 +12,6 @@ body {
|
|
|
12
12
|
#app {
|
|
13
13
|
width: 95%;
|
|
14
14
|
margin: 10px auto;
|
|
15
|
-
padding: 15px;
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
.item-card {
|
|
@@ -21,7 +20,7 @@ body {
|
|
|
21
20
|
border: none;
|
|
22
21
|
padding: 20px 0 20px 0;
|
|
23
22
|
position: relative;
|
|
24
|
-
overflow:
|
|
23
|
+
overflow: visible;
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
.item-emoji {
|
|
@@ -63,7 +62,8 @@ body {
|
|
|
63
62
|
background: none;
|
|
64
63
|
border-radius: 0;
|
|
65
64
|
box-shadow: none;
|
|
66
|
-
|
|
65
|
+
width: 100%;
|
|
66
|
+
max-width: 100%;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
.attr-key {
|
|
@@ -87,11 +87,13 @@ body {
|
|
|
87
87
|
line-height: 1.6;
|
|
88
88
|
font-size: 16px;
|
|
89
89
|
overflow-wrap: break-word;
|
|
90
|
+
word-wrap: break-word;
|
|
90
91
|
margin-bottom: 2px;
|
|
91
92
|
background: #2a342a;
|
|
92
93
|
padding: 8px 12px;
|
|
93
94
|
border-radius: 6px;
|
|
94
95
|
border-left: 3px solid #4a8a4a;
|
|
95
96
|
position: relative;
|
|
97
|
+
box-sizing: border-box;
|
|
96
98
|
}
|
|
97
99
|
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
body {
|
|
2
|
+
margin: 0;
|
|
3
|
+
padding: 0;
|
|
4
|
+
width: 500px;
|
|
5
|
+
overflow: auto;
|
|
6
|
+
position: relative;
|
|
7
|
+
background: #232d23;
|
|
8
|
+
min-height: 500px;
|
|
9
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
#app {
|
|
13
|
+
width: 95%;
|
|
14
|
+
margin: 10px auto;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.ranking-card {
|
|
18
|
+
background: #232d23;
|
|
19
|
+
border-radius: 12px;
|
|
20
|
+
border: none;
|
|
21
|
+
padding: 20px 0 20px 0;
|
|
22
|
+
position: relative;
|
|
23
|
+
overflow: visible;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* 标题样式 */
|
|
27
|
+
.ranking-title {
|
|
28
|
+
display: flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
justify-content: center;
|
|
31
|
+
margin-bottom: 20px;
|
|
32
|
+
padding: 0 20px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.title-emoji {
|
|
36
|
+
font-size: 24px;
|
|
37
|
+
margin-right: 8px;
|
|
38
|
+
color: #ffd97a;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.title-text {
|
|
42
|
+
color: #ffd97a;
|
|
43
|
+
font-size: 18px;
|
|
44
|
+
font-weight: bold;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* 表头样式 */
|
|
48
|
+
.ranking-header {
|
|
49
|
+
display: flex;
|
|
50
|
+
background: #2a342a;
|
|
51
|
+
border-radius: 8px;
|
|
52
|
+
margin: 0 20px 15px 20px;
|
|
53
|
+
padding: 12px 15px;
|
|
54
|
+
border-left: 3px solid #4a8a4a;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.header-item {
|
|
58
|
+
color: #ffd97a;
|
|
59
|
+
font-weight: bold;
|
|
60
|
+
font-size: 14px;
|
|
61
|
+
text-align: center;
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
justify-content: center;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.rank-col {
|
|
68
|
+
width: 60px;
|
|
69
|
+
flex-shrink: 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.player-col {
|
|
73
|
+
flex: 1;
|
|
74
|
+
text-align: left;
|
|
75
|
+
padding-left: 10px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.score-col {
|
|
79
|
+
width: 80px;
|
|
80
|
+
flex-shrink: 0;
|
|
81
|
+
text-align: center;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* 排行榜列表样式 */
|
|
85
|
+
.ranking-list {
|
|
86
|
+
margin: 0 20px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.ranking-item {
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
background: #2a342a;
|
|
93
|
+
border-radius: 8px;
|
|
94
|
+
margin-bottom: 8px;
|
|
95
|
+
padding: 12px 15px;
|
|
96
|
+
border-left: 3px solid #4a8a4a;
|
|
97
|
+
transition: all 0.2s ease;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.ranking-item:hover {
|
|
101
|
+
background: #3a443a;
|
|
102
|
+
transform: translateX(2px);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.ranking-item.my-rank {
|
|
106
|
+
background: #4a8a4a;
|
|
107
|
+
border-left-color: #ffd97a;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.ranking-item.my-rank:hover {
|
|
111
|
+
background: #5a9a5a;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* 排名样式 */
|
|
115
|
+
.rank-number {
|
|
116
|
+
width: 30px;
|
|
117
|
+
height: 30px;
|
|
118
|
+
border-radius: 50%;
|
|
119
|
+
display: flex;
|
|
120
|
+
align-items: center;
|
|
121
|
+
justify-content: center;
|
|
122
|
+
font-weight: bold;
|
|
123
|
+
font-size: 14px;
|
|
124
|
+
color: #fff;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.rank-gold {
|
|
128
|
+
background: linear-gradient(135deg, #DAA520, #B8860B);
|
|
129
|
+
box-shadow: 0 2px 8px rgba(218, 165, 32, 0.3);
|
|
130
|
+
color: #fff;
|
|
131
|
+
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.rank-silver {
|
|
135
|
+
background: linear-gradient(135deg, #C0C0C0, #A0A0A0);
|
|
136
|
+
box-shadow: 0 2px 8px rgba(192, 192, 192, 0.3);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.rank-bronze {
|
|
140
|
+
background: linear-gradient(135deg, #CD7F32, #A0522D);
|
|
141
|
+
box-shadow: 0 2px 8px rgba(205, 127, 50, 0.3);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.rank-normal {
|
|
145
|
+
background: linear-gradient(135deg, #4a8a4a, #3a7a3a);
|
|
146
|
+
box-shadow: 0 2px 8px rgba(74, 138, 74, 0.3);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* 玩家信息样式 */
|
|
150
|
+
.player-info {
|
|
151
|
+
display: flex;
|
|
152
|
+
align-items: center;
|
|
153
|
+
flex: 1;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.player-avatar {
|
|
157
|
+
width: 40px;
|
|
158
|
+
height: 40px;
|
|
159
|
+
border-radius: 50%;
|
|
160
|
+
margin-right: 12px;
|
|
161
|
+
display: flex;
|
|
162
|
+
align-items: center;
|
|
163
|
+
justify-content: center;
|
|
164
|
+
background: #fff;
|
|
165
|
+
border: 2px solid #4a8a4a;
|
|
166
|
+
overflow: hidden;
|
|
167
|
+
position: relative;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.avatar-img {
|
|
171
|
+
width: 100%;
|
|
172
|
+
height: 100%;
|
|
173
|
+
object-fit: cover;
|
|
174
|
+
border-radius: 50%;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.player-emoji {
|
|
178
|
+
font-size: 20px;
|
|
179
|
+
display: flex;
|
|
180
|
+
align-items: center;
|
|
181
|
+
justify-content: center;
|
|
182
|
+
width: 100%;
|
|
183
|
+
height: 100%;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.player-name {
|
|
187
|
+
color: #e8fbe8;
|
|
188
|
+
font-weight: 500;
|
|
189
|
+
font-size: 14px;
|
|
190
|
+
max-width: 200px;
|
|
191
|
+
overflow: hidden;
|
|
192
|
+
text-overflow: ellipsis;
|
|
193
|
+
white-space: nowrap;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* 分数样式 */
|
|
197
|
+
.score-value {
|
|
198
|
+
color: #e8fbe8;
|
|
199
|
+
font-weight: bold;
|
|
200
|
+
font-size: 14px;
|
|
201
|
+
text-align: center;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* 我的排名样式 */
|
|
205
|
+
.my-rank-section {
|
|
206
|
+
margin-top: 15px;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.my-rank-divider {
|
|
210
|
+
height: 1px;
|
|
211
|
+
background: linear-gradient(to right, transparent, #4a8a4a, transparent);
|
|
212
|
+
margin: 10px 0;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.my-rank-item {
|
|
216
|
+
display: flex;
|
|
217
|
+
align-items: center;
|
|
218
|
+
background: #4a8a4a;
|
|
219
|
+
border-radius: 8px;
|
|
220
|
+
padding: 12px 15px;
|
|
221
|
+
border-left: 3px solid #ffd97a;
|
|
222
|
+
margin-top: 8px;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.rank-my {
|
|
226
|
+
background: linear-gradient(135deg, #DAA520, #B8860B);
|
|
227
|
+
box-shadow: 0 2px 8px rgba(218, 165, 32, 0.3);
|
|
228
|
+
color: #fff;
|
|
229
|
+
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* 响应式设计 */
|
|
233
|
+
@media (max-width: 500px) {
|
|
234
|
+
.player-name {
|
|
235
|
+
max-width: 150px;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.score-col {
|
|
239
|
+
width: 60px;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.rank-col {
|
|
243
|
+
width: 50px;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>排行榜</title>
|
|
8
|
+
<script src="../res/vue2.js"></script>
|
|
9
|
+
<link rel="stylesheet" href="../css/ranking.css">
|
|
10
|
+
</head>
|
|
11
|
+
|
|
12
|
+
<body>
|
|
13
|
+
<div id="app">
|
|
14
|
+
<div class="ranking-card">
|
|
15
|
+
<!-- 标题 -->
|
|
16
|
+
<div class="ranking-title">
|
|
17
|
+
<div class="title-emoji">{{ data.title.split(' ')[0] }}</div>
|
|
18
|
+
<div class="title-text">{{ data.title.split(' ').slice(1).join(' ') }}</div>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<!-- 表头 -->
|
|
22
|
+
<div class="ranking-header">
|
|
23
|
+
<div class="header-item rank-col">排名</div>
|
|
24
|
+
<div class="header-item player-col">玩家</div>
|
|
25
|
+
<div class="header-item score-col">{{ data.rankRankName }}</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<!-- 排行榜列表 -->
|
|
29
|
+
<div class="ranking-list">
|
|
30
|
+
<div v-for="(item, index) in data.ranks.slice(0, 10)" :key="item.playerId" class="ranking-item"
|
|
31
|
+
:class="{ 'my-rank': item.rank === data.myRank.rank }">
|
|
32
|
+
<div class="rank-col">
|
|
33
|
+
<div class="rank-number" :class="getRankClass(item.rank)">{{ item.rank }}</div>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="player-col">
|
|
36
|
+
<div class="player-info">
|
|
37
|
+
<div class="player-avatar">
|
|
38
|
+
<img v-if="item.playerAvatar" :src="item.playerAvatar" @error="handleAvatarError"
|
|
39
|
+
class="avatar-img">
|
|
40
|
+
<div v-else class="player-emoji">{{ item.playerEmoji }}</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="player-name">{{item.playerEmoji}}{{ item.playerName }}</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="score-col">
|
|
46
|
+
<div class="score-value">{{ item.score }}</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<!-- 我的排名 -->
|
|
51
|
+
<div class="my-rank-section">
|
|
52
|
+
<div class="my-rank-divider"></div>
|
|
53
|
+
<div class="my-rank-item">
|
|
54
|
+
<div class="rank-col">
|
|
55
|
+
<div class="rank-number rank-my">{{ data.myRank.rank }}</div>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="player-col">
|
|
58
|
+
<div class="player-info">
|
|
59
|
+
<div class="player-avatar">
|
|
60
|
+
<img v-if="data.myRank.playerAvatar" :src="data.myRank.playerAvatar"
|
|
61
|
+
@error="handleAvatarError"
|
|
62
|
+
class="avatar-img">
|
|
63
|
+
<div v-else class="player-emoji">{{ data.myRank.playerEmoji }}</div>
|
|
64
|
+
</div>
|
|
65
|
+
<div class="player-name">{{ data.myRank.playerName }}</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
<div class="score-col">
|
|
69
|
+
<div class="score-value">{{ data.myRank.score }}</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
<script>
|
|
77
|
+
let data = {
|
|
78
|
+
title: '📊等级排行榜',
|
|
79
|
+
rankRankName: '等级',
|
|
80
|
+
ranks: [
|
|
81
|
+
{
|
|
82
|
+
playerId: '01',
|
|
83
|
+
playerName: '至尊玩家',
|
|
84
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
85
|
+
playerEmoji: '👑',
|
|
86
|
+
score: 99,
|
|
87
|
+
rank: 1,
|
|
88
|
+
lastUpdateTime: 1753672774016
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
playerId: '02',
|
|
92
|
+
playerName: '传奇战士',
|
|
93
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
94
|
+
playerEmoji: '⚔️',
|
|
95
|
+
score: 87,
|
|
96
|
+
rank: 2,
|
|
97
|
+
lastUpdateTime: 1753672774053
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
playerId: '03',
|
|
101
|
+
playerName: '魔法师',
|
|
102
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
103
|
+
playerEmoji: '🧙',
|
|
104
|
+
score: 76,
|
|
105
|
+
rank: 3,
|
|
106
|
+
lastUpdateTime: 1753672774054
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
playerId: '04',
|
|
110
|
+
playerName: '弓箭手',
|
|
111
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
112
|
+
playerEmoji: '🏹',
|
|
113
|
+
score: 65,
|
|
114
|
+
rank: 4,
|
|
115
|
+
lastUpdateTime: 1753672774055
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
playerId: '05',
|
|
119
|
+
playerName: '刺客',
|
|
120
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
121
|
+
playerEmoji: '🗡️',
|
|
122
|
+
score: 54,
|
|
123
|
+
rank: 5,
|
|
124
|
+
lastUpdateTime: 1753672774056
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
playerId: '06',
|
|
128
|
+
playerName: '牧师',
|
|
129
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
130
|
+
playerEmoji: '⛪',
|
|
131
|
+
score: 43,
|
|
132
|
+
rank: 6,
|
|
133
|
+
lastUpdateTime: 1753672774057
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
playerId: '07',
|
|
137
|
+
playerName: '骑士',
|
|
138
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
139
|
+
playerEmoji: '🛡️',
|
|
140
|
+
score: 32,
|
|
141
|
+
rank: 7,
|
|
142
|
+
lastUpdateTime: 1753672774058
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
playerId: '08',
|
|
146
|
+
playerName: '法师',
|
|
147
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
148
|
+
playerEmoji: '🔮',
|
|
149
|
+
score: 21,
|
|
150
|
+
rank: 8,
|
|
151
|
+
lastUpdateTime: 1753672774059
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
playerId: '09',
|
|
155
|
+
playerName: '盗贼',
|
|
156
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
157
|
+
playerEmoji: '🦹',
|
|
158
|
+
score: 19,
|
|
159
|
+
rank: 9,
|
|
160
|
+
lastUpdateTime: 1753672774060
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
playerId: '10',
|
|
164
|
+
playerName: '野蛮人',
|
|
165
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
166
|
+
playerEmoji: '🪓',
|
|
167
|
+
score: 18,
|
|
168
|
+
rank: 10,
|
|
169
|
+
lastUpdateTime: 1753672774061
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
playerId: '11',
|
|
173
|
+
playerName: '德鲁伊',
|
|
174
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
175
|
+
playerEmoji: '🌿',
|
|
176
|
+
score: 17,
|
|
177
|
+
rank: 11,
|
|
178
|
+
lastUpdateTime: 1753672774062
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
playerId: '12',
|
|
182
|
+
playerName: '圣骑士',
|
|
183
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
184
|
+
playerEmoji: '⚜️',
|
|
185
|
+
score: 16,
|
|
186
|
+
rank: 12,
|
|
187
|
+
lastUpdateTime: 1753672774063
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
playerId: '13',
|
|
191
|
+
playerName: '术士',
|
|
192
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
193
|
+
playerEmoji: '👻',
|
|
194
|
+
score: 15,
|
|
195
|
+
rank: 13,
|
|
196
|
+
lastUpdateTime: 1753672774064
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
playerId: '14',
|
|
200
|
+
playerName: '武僧',
|
|
201
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
202
|
+
playerEmoji: '🥋',
|
|
203
|
+
score: 14,
|
|
204
|
+
rank: 14,
|
|
205
|
+
lastUpdateTime: 1753672774065
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
playerId: '15',
|
|
209
|
+
playerName: '游侠',
|
|
210
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
211
|
+
playerEmoji: '🌲',
|
|
212
|
+
score: 13,
|
|
213
|
+
rank: 15,
|
|
214
|
+
lastUpdateTime: 1753672774066
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
playerId: '16',
|
|
218
|
+
playerName: '死灵法师',
|
|
219
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
220
|
+
playerEmoji: '💀',
|
|
221
|
+
score: 12,
|
|
222
|
+
rank: 16,
|
|
223
|
+
lastUpdateTime: 1753672774067
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
playerId: '17',
|
|
227
|
+
playerName: '吟游诗人',
|
|
228
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
229
|
+
playerEmoji: '🎵',
|
|
230
|
+
score: 11,
|
|
231
|
+
rank: 17,
|
|
232
|
+
lastUpdateTime: 1753672774068
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
playerId: '18',
|
|
236
|
+
playerName: '炼金术士',
|
|
237
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
238
|
+
playerEmoji: '🧪',
|
|
239
|
+
score: 10,
|
|
240
|
+
rank: 18,
|
|
241
|
+
lastUpdateTime: 1753672774069
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
playerId: '19',
|
|
245
|
+
playerName: '召唤师',
|
|
246
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
247
|
+
playerEmoji: '🐉',
|
|
248
|
+
score: 9,
|
|
249
|
+
rank: 19,
|
|
250
|
+
lastUpdateTime: 1753672774070
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
playerId: '20',
|
|
254
|
+
playerName: '元素使',
|
|
255
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
256
|
+
playerEmoji: '⚡',
|
|
257
|
+
score: 8,
|
|
258
|
+
rank: 20,
|
|
259
|
+
lastUpdateTime: 1753672774071
|
|
260
|
+
}
|
|
261
|
+
],
|
|
262
|
+
myRank: {
|
|
263
|
+
playerId: '01',
|
|
264
|
+
playerName: '至尊玩家',
|
|
265
|
+
playerAvatar: 'https://dew-1251587647.cos.ap-guangzhou.myqcloud.com/upload/5e7a70f5cfc840e491954253865b76cf',
|
|
266
|
+
playerEmoji: '👑',
|
|
267
|
+
score: 99,
|
|
268
|
+
rank: 999,
|
|
269
|
+
lastUpdateTime: 1753672774016
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
new Vue({
|
|
274
|
+
el: '#app',
|
|
275
|
+
data: { data },
|
|
276
|
+
methods: {
|
|
277
|
+
getRankClass(rank) {
|
|
278
|
+
if (rank === 1) return 'rank-gold';
|
|
279
|
+
if (rank === 2) return 'rank-silver';
|
|
280
|
+
if (rank === 3) return 'rank-bronze';
|
|
281
|
+
return 'rank-normal';
|
|
282
|
+
},
|
|
283
|
+
handleAvatarError(event) {
|
|
284
|
+
event.target.style.display = 'none';
|
|
285
|
+
event.target.nextElementSibling.style.display = 'flex';
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
</script>
|
|
290
|
+
</body>
|
|
291
|
+
|
|
292
|
+
</html>
|
package/lib/index.js
CHANGED
|
@@ -32,15 +32,25 @@ function apply(ctx, config) {
|
|
|
32
32
|
ctx.on('dispose', () => {
|
|
33
33
|
rateLimiter.stopCleanup();
|
|
34
34
|
});
|
|
35
|
+
// 记录已提示过的用户,避免重复提示
|
|
36
|
+
const notifiedUsers = new Set();
|
|
35
37
|
ctx.on('message', (session) => {
|
|
36
38
|
const userId = session.author.id;
|
|
37
39
|
// 检查频率限制
|
|
38
40
|
if (!rateLimiter.canSendMessage(userId)) {
|
|
39
41
|
// 被拉黑或触发频率限制
|
|
40
|
-
|
|
42
|
+
// 只在首次拉黑时提示
|
|
43
|
+
if (!notifiedUsers.has(userId)) {
|
|
44
|
+
session.send(`消息发送过于频繁,已拉黑${config.频率限制}分钟!`);
|
|
45
|
+
notifiedUsers.add(userId);
|
|
46
|
+
}
|
|
41
47
|
return;
|
|
42
48
|
}
|
|
43
49
|
// 通过频率限制,正常处理消息
|
|
50
|
+
// 如果用户之前被拉黑过,现在可以正常发送消息了,从提示列表中移除
|
|
51
|
+
if (notifiedUsers.has(userId)) {
|
|
52
|
+
notifiedUsers.delete(userId);
|
|
53
|
+
}
|
|
44
54
|
new msgCsl_1.SendMsg(session);
|
|
45
55
|
});
|
|
46
56
|
}
|
package/lib/plugin/server.js
CHANGED
|
@@ -29,7 +29,7 @@ class server extends console_1.console {
|
|
|
29
29
|
// 根据服务器环境选择对应的地址
|
|
30
30
|
const serverUrlMap = {
|
|
31
31
|
'测试服': 'ws://127.0.0.1:3000',
|
|
32
|
-
'开发服': 'ws://
|
|
32
|
+
'开发服': 'ws://dew-bot.cn:3000',
|
|
33
33
|
'正式服': 'ws://dew-bot.cn:3000'
|
|
34
34
|
};
|
|
35
35
|
const serverUrl = serverUrlMap[config.服务器环境];
|
package/lib/shared/face/enums.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConditionOperator = exports.ConditionType = exports.effectKey = exports.defenseKey = exports.attackKey = exports.Attribute_base = exports.盲盒枚举 = exports.道具枚举 = exports.资源枚举 = exports.sort_type = exports.qualityGradient = exports.qualityName = exports.quality = exports.ItemType = exports.EquipAttType = exports.EffectClassType = exports.PassiveTriggerType = exports.SkillType = exports.TargetType = exports.LogType = void 0;
|
|
3
|
+
exports.ConditionOperator = exports.ConditionType = exports.effectKey = exports.defenseKey = exports.attackKey = exports.Attribute_base = exports.盲盒枚举 = exports.道具枚举 = exports.资源枚举 = exports.sort_type = exports.qualityGradient = exports.qualityName = exports.quality = exports.RankingType = exports.ItemType = exports.EquipAttType = exports.EffectClassType = exports.PassiveTriggerType = exports.SkillType = exports.TargetType = exports.LogType = void 0;
|
|
4
4
|
// 日志类型
|
|
5
5
|
var LogType;
|
|
6
6
|
(function (LogType) {
|
|
@@ -63,6 +63,16 @@ var ItemType;
|
|
|
63
63
|
ItemType["\u76F2\u76D2"] = "prop_\u76F2\u76D2";
|
|
64
64
|
ItemType["\u5F62\u8C61\u5361"] = "image_card";
|
|
65
65
|
})(ItemType || (exports.ItemType = ItemType = {}));
|
|
66
|
+
/**
|
|
67
|
+
* 排行榜类型
|
|
68
|
+
*/
|
|
69
|
+
var RankingType;
|
|
70
|
+
(function (RankingType) {
|
|
71
|
+
RankingType["\u7B49\u7EA7"] = "\u7B49\u7EA7";
|
|
72
|
+
RankingType["\u91D1\u5E01"] = "\u91D1\u5E01";
|
|
73
|
+
RankingType["\u7B7E\u5230"] = "\u7B7E\u5230\u6B21\u6570";
|
|
74
|
+
RankingType["\u6218\u529B"] = "\u6218\u529B";
|
|
75
|
+
})(RankingType || (exports.RankingType = RankingType = {}));
|
|
66
76
|
var quality;
|
|
67
77
|
(function (quality) {
|
|
68
78
|
quality[quality["F"] = 0] = "F";
|
|
@@ -115,11 +125,9 @@ var sort_type;
|
|
|
115
125
|
})(sort_type || (exports.sort_type = sort_type = {}));
|
|
116
126
|
var 资源枚举;
|
|
117
127
|
(function (资源枚举) {
|
|
118
|
-
资源枚举["\u7ECF\u9A8C"] = "
|
|
119
|
-
资源枚举["\u91D1\u5E01"] = "
|
|
120
|
-
资源枚举["
|
|
121
|
-
资源枚举["fq1"] = "4";
|
|
122
|
-
资源枚举["\u8840\u7EDF\u7ECF\u9A8C"] = "5";
|
|
128
|
+
资源枚举["\u7ECF\u9A8C"] = "\u7ECF\u9A8C\u503C";
|
|
129
|
+
资源枚举["\u91D1\u5E01"] = "\u91D1\u5E01";
|
|
130
|
+
资源枚举["\u8840\u7EDF\u7ECF\u9A8C"] = "\u8840\u7EDF\u7ECF\u9A8C";
|
|
123
131
|
})(资源枚举 || (exports.资源枚举 = 资源枚举 = {}));
|
|
124
132
|
var 道具枚举;
|
|
125
133
|
(function (道具枚举) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.serviceProto = void 0;
|
|
4
4
|
exports.serviceProto = {
|
|
5
|
-
"version":
|
|
5
|
+
"version": 6,
|
|
6
6
|
"services": [
|
|
7
7
|
{
|
|
8
8
|
"id": 2,
|
|
@@ -56,7 +56,8 @@ exports.serviceProto = {
|
|
|
56
56
|
"type": {
|
|
57
57
|
"type": "Reference",
|
|
58
58
|
"target": "IMassage/Message"
|
|
59
|
-
}
|
|
59
|
+
},
|
|
60
|
+
"optional": true
|
|
60
61
|
},
|
|
61
62
|
{
|
|
62
63
|
"id": 2,
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,9 +1,32 @@
|
|
|
1
|
-
# koishi-plugin-dew-bot
|
|
1
|
+
# 🌟 koishi-plugin-dew-bot
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/koishi-plugin-dew-bot)
|
|
4
|
+
[](https://koishi.chat/)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
[](https://github.com/your-username/koishi-plugin-dew-bot)
|
|
4
7
|
|
|
5
|
-
[功能进度一览](https://docs.qq.com/mind/DWkRkWEtpT1FPQ0tT?subId=BB08J2&mode=mind)
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
## 📖 介绍
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
基于《无限恐怖》为蓝本的文字RPG游戏
|
|
12
|
+
|
|
13
|
+
## ✨特色
|
|
14
|
+
- 🎯 **无需记忆指令** - 直观简介的指令系统
|
|
15
|
+
- 🌍 **多平台支持** - 基于服务器的消息处理,支持QQ、微信、Telegram等多个平台,也可以接入任何平台,只需要支持WS协议即可,接入可参考文档TSRPC 接入方法
|
|
16
|
+
|
|
17
|
+
## 🔗 相关链接
|
|
18
|
+
- 🌐 [tsrpc-TS全栈框架](https://tsrpc.cn/)
|
|
19
|
+
- 🖥️ [服务器(开发中)](https://gitee.com/ChuXuanD30/bot_server_v6)
|
|
20
|
+
- 🌐 [Web端源码-VUE3](https://gitee.com/ChuXuanD30/bot_server_backend)
|
|
21
|
+
## ✨开发计划
|
|
22
|
+
- **一期-底层架构** - ✅RPG核心技能/战斗/消息处理等基础功能
|
|
23
|
+
- **一期-基础功能** - ✅RPG基础功能设计 交易所/背包/装备/技能/宠物/任务/排行榜/邮件系统
|
|
24
|
+
- **一期-测试优化** - 🔄功能体验测试,阶段性整理重构以便下一步开发,交互优化
|
|
25
|
+
|
|
26
|
+
## 🤝 贡献指南
|
|
27
|
+
|
|
28
|
+
如果你有任何与游戏相关的建议或意见,欢迎提交 Issue 或 邮箱🎮✨
|
|
29
|
+
|
|
30
|
+
### 📧 联系方式
|
|
31
|
+
- 📮 **邮箱**: <3245000000@qq.com>
|
|
32
|
+
- 💬 **讨论**: [🌍达尔文进化岛](https://qm.qq.com/q/h1iprRcely)
|