baileys-idn 1.0.9 → 1.0.11
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/Utils/dashboard.d.ts +14 -0
- package/lib/Utils/dashboard.d.ts.map +1 -1
- package/lib/Utils/dashboard.js +305 -115
- package/lib/Utils/dashboard.js.map +1 -1
- package/package.json +1 -1
package/lib/Utils/dashboard.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
export interface ThemeOptions {
|
|
2
|
+
accentColor?: string;
|
|
3
|
+
opacity?: number;
|
|
4
|
+
bgImage?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface WidgetOptions {
|
|
7
|
+
showMetrics?: boolean;
|
|
8
|
+
showTerminal?: boolean;
|
|
9
|
+
showMusicPlayer?: boolean;
|
|
10
|
+
}
|
|
1
11
|
export interface DashboardOptions {
|
|
2
12
|
port?: number;
|
|
3
13
|
title?: string;
|
|
14
|
+
theme?: ThemeOptions;
|
|
15
|
+
widgets?: WidgetOptions;
|
|
4
16
|
}
|
|
5
17
|
export declare class Dashboard {
|
|
6
18
|
private app;
|
|
@@ -8,6 +20,8 @@ export declare class Dashboard {
|
|
|
8
20
|
private io;
|
|
9
21
|
private port;
|
|
10
22
|
private title;
|
|
23
|
+
private theme;
|
|
24
|
+
private widgets;
|
|
11
25
|
private status;
|
|
12
26
|
private pairingCode;
|
|
13
27
|
private startTime;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/Utils/dashboard.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/Utils/dashboard.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,aAAa,CAAA;CAC1B;AAED,qBAAa,SAAS;IAClB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAiD;IAC/D,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,WAAW,CAAY;gBAEnB,OAAO,GAAE,gBAAqB;IAoB1C,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,gBAAgB;IAuBjB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY;IAKxD,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAS9B,WAAW,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAMzD,gBAAgB;IAKhB,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB,KAAK;IAMZ,OAAO,CAAC,UAAU;CA8ZrB;AAED,eAAO,MAAM,eAAe,GAAI,UAAU,gBAAgB,cAA2B,CAAA"}
|
package/lib/Utils/dashboard.js
CHANGED
|
@@ -15,17 +15,25 @@ export class Dashboard {
|
|
|
15
15
|
this.totalCommands = 0;
|
|
16
16
|
this.totalGroups = 0;
|
|
17
17
|
this.port = options.port || 3000;
|
|
18
|
-
this.title = options.title || '
|
|
18
|
+
this.title = options.title || 'Shiina-MD Control Center';
|
|
19
|
+
this.theme = {
|
|
20
|
+
accentColor: options.theme?.accentColor || '#2563eb',
|
|
21
|
+
opacity: options.theme?.opacity !== undefined ? options.theme.opacity : 0.85,
|
|
22
|
+
bgImage: options.theme?.bgImage || ''
|
|
23
|
+
};
|
|
24
|
+
this.widgets = {
|
|
25
|
+
showMetrics: options.widgets?.showMetrics !== false,
|
|
26
|
+
showTerminal: options.widgets?.showTerminal !== false,
|
|
27
|
+
showMusicPlayer: options.widgets?.showMusicPlayer !== false
|
|
28
|
+
};
|
|
19
29
|
this.setupRoutes();
|
|
20
30
|
this.setupSockets();
|
|
21
31
|
}
|
|
22
32
|
setupRoutes() {
|
|
23
|
-
// Mencegah browser menyimpan cache halaman HTML
|
|
24
33
|
this.app.get('/', (req, res) => {
|
|
25
34
|
res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, private');
|
|
26
35
|
res.send(this.renderHTML());
|
|
27
36
|
});
|
|
28
|
-
// Endpoint API pencarian musik via Jerexd API
|
|
29
37
|
this.app.get('/api/play', async (req, res) => {
|
|
30
38
|
const query = req.query.q;
|
|
31
39
|
if (!query) {
|
|
@@ -104,6 +112,9 @@ export class Dashboard {
|
|
|
104
112
|
});
|
|
105
113
|
}
|
|
106
114
|
renderHTML() {
|
|
115
|
+
const bgStyle = this.theme.bgImage
|
|
116
|
+
? `background: url('${this.theme.bgImage}') no-repeat center center fixed; background-size: cover;`
|
|
117
|
+
: `background-color: #0d1117;`;
|
|
107
118
|
return `<!DOCTYPE html>
|
|
108
119
|
<html lang="id">
|
|
109
120
|
<head>
|
|
@@ -113,135 +124,250 @@ export class Dashboard {
|
|
|
113
124
|
<script src="/socket.io/socket.io.js"></script>
|
|
114
125
|
<style>
|
|
115
126
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
116
|
-
body {
|
|
117
|
-
.container { width: 100%; max-width: 900px; }
|
|
118
|
-
|
|
127
|
+
body { ${bgStyle} color: #c9d1d9; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; padding: 16px; display: flex; flex-direction: column; align-items: center; min-height: 100vh; }
|
|
128
|
+
.container { width: 100%; max-width: 900px; display: flex; flex-direction: column; }
|
|
129
|
+
|
|
130
|
+
.header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; padding: 10px 14px; background: rgba(22, 27, 34, ${this.theme.opacity}); backdrop-filter: blur(10px); border: 1px solid #30363d; border-radius: 6px; width: 100%; }
|
|
119
131
|
.header h1 { font-size: 1.15rem; font-weight: 600; color: #f0f6fc; display: flex; align-items: center; gap: 8px; }
|
|
120
|
-
.header h1::before { content: 'P'; background:
|
|
132
|
+
.header h1::before { content: 'P'; background: ${this.theme.accentColor}; color: #fff; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center; border-radius: 4px; font-size: 11px; font-weight: 800; }
|
|
133
|
+
.header-right { display: flex; align-items: center; gap: 10px; }
|
|
134
|
+
|
|
135
|
+
.btn-settings { background: #21262d; color: #f0f6fc; border: 1px solid #30363d; padding: 6px 12px; border-radius: 6px; font-size: 0.75rem; font-weight: 600; cursor: pointer; transition: 0.2s; display: flex; align-items: center; gap: 4px; }
|
|
136
|
+
.btn-settings:hover { background: #30363d; border-color: #8b949e; }
|
|
137
|
+
|
|
121
138
|
.badge { padding: 4px 10px; border-radius: 12px; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; }
|
|
122
139
|
.badge.online { background: rgba(34, 197, 94, 0.15); color: #4ade80; border: 1px solid rgba(34, 197, 94, 0.3); }
|
|
123
140
|
.badge.offline { background: rgba(239, 68, 68, 0.15); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.3); }
|
|
124
141
|
.badge.connecting { background: rgba(234, 179, 8, 0.15); color: #facc15; border: 1px solid rgba(234, 179, 8, 0.3); }
|
|
125
142
|
|
|
126
|
-
|
|
127
|
-
|
|
143
|
+
#widget-metrics-container { order: 1; }
|
|
144
|
+
#widget-terminal-container { order: 2; }
|
|
145
|
+
#widget-player-container { order: 3; }
|
|
146
|
+
|
|
147
|
+
.grid { display: ${this.widgets.showMetrics ? 'grid' : 'none'}; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; margin-bottom: 16px; width: 100%; }
|
|
148
|
+
.card { background: rgba(22, 27, 34, ${this.theme.opacity}); backdrop-filter: blur(10px); border: 1px solid #30363d; border-radius: 6px; padding: 12px; position: relative; overflow: hidden; }
|
|
128
149
|
.card::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; }
|
|
129
|
-
.card.
|
|
150
|
+
.card.cyan::before { background: #06b6d4; }
|
|
151
|
+
.card.blue::before { background: ${this.theme.accentColor}; }
|
|
130
152
|
.card.purple::before { background: #a855f7; }
|
|
131
153
|
.card.orange::before { background: #f97316; }
|
|
132
154
|
.card.green::before { background: #22c55e; }
|
|
133
155
|
.card .title { font-size: 0.65rem; text-transform: uppercase; font-weight: 700; color: #8b949e; letter-spacing: 0.5px; margin-bottom: 4px; }
|
|
134
156
|
.card .value { font-size: 1rem; font-weight: 700; color: #f0f6fc; }
|
|
135
157
|
.card .subtext { font-size: 0.7rem; color: #6e7681; margin-top: 2px; }
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
.terminal-
|
|
158
|
+
.pairing-highlight { color: #38bdf8 !important; font-family: 'JetBrains Mono', monospace; font-size: 1.05rem !important; }
|
|
159
|
+
|
|
160
|
+
.terminal-card { display: ${this.widgets.showTerminal ? 'block' : 'none'}; background: rgba(22, 27, 34, ${this.theme.opacity}); backdrop-filter: blur(10px); border: 1px solid #30363d; border-radius: 6px; overflow: hidden; margin-bottom: 16px; width: 100%; }
|
|
161
|
+
.terminal-header { background: rgba(1, 4, 9, 0.8); padding: 8px 12px; font-size: 0.7rem; font-weight: 600; color: #8b949e; border-bottom: 1px solid #21262d; display: flex; justify-content: space-between; align-items: center; }
|
|
139
162
|
.dots { display: flex; gap: 5px; }
|
|
140
163
|
.dot { width: 9px; height: 9px; border-radius: 50%; }
|
|
141
164
|
.dot.red { background: #ef4444; }
|
|
142
165
|
.dot.yellow { background: #eab308; }
|
|
143
166
|
.dot.green { background: #22c55e; }
|
|
144
167
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
168
|
+
#logs {
|
|
169
|
+
padding: 8px 12px;
|
|
170
|
+
height: 280px;
|
|
171
|
+
overflow-y: auto;
|
|
172
|
+
background: rgba(13, 17, 23, 0.75);
|
|
173
|
+
color: #c9d1d9;
|
|
174
|
+
font-family: 'JetBrains Mono', 'Fira Code', monospace;
|
|
175
|
+
font-size: 0.76rem;
|
|
176
|
+
line-height: 1.15;
|
|
177
|
+
margin: 0;
|
|
178
|
+
white-space: pre-wrap;
|
|
179
|
+
word-break: break-all;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* Minimalist Music Player (Tanpa Thumbnail, Tanpa Seekbar) */
|
|
183
|
+
.player-card {
|
|
184
|
+
display: ${this.widgets.showMusicPlayer ? 'flex' : 'none'};
|
|
185
|
+
background: rgba(22, 27, 34, ${this.theme.opacity});
|
|
186
|
+
backdrop-filter: blur(10px);
|
|
187
|
+
border: 1px solid #30363d;
|
|
188
|
+
border-radius: 8px;
|
|
189
|
+
padding: 16px;
|
|
190
|
+
flex-direction: column;
|
|
191
|
+
align-items: center;
|
|
192
|
+
gap: 12px;
|
|
193
|
+
width: 100%;
|
|
194
|
+
margin-bottom: 16px;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.player-info {
|
|
198
|
+
display: flex;
|
|
199
|
+
flex-direction: column;
|
|
200
|
+
align-items: center;
|
|
201
|
+
text-align: center;
|
|
202
|
+
gap: 2px;
|
|
203
|
+
width: 100%;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.player-title {
|
|
207
|
+
font-size: 0.88rem;
|
|
208
|
+
font-weight: 700;
|
|
209
|
+
color: #f0f6fc;
|
|
210
|
+
white-space: nowrap;
|
|
211
|
+
overflow: hidden;
|
|
212
|
+
text-overflow: ellipsis;
|
|
213
|
+
max-width: 100%;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.player-artist {
|
|
217
|
+
font-size: 0.72rem;
|
|
218
|
+
color: #8b949e;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.play-btn-circle {
|
|
222
|
+
background: #ffffff;
|
|
223
|
+
color: #000000;
|
|
224
|
+
border: none;
|
|
225
|
+
width: 44px;
|
|
226
|
+
height: 44px;
|
|
227
|
+
border-radius: 50%;
|
|
228
|
+
font-size: 1rem;
|
|
229
|
+
cursor: pointer;
|
|
230
|
+
display: flex;
|
|
231
|
+
align-items: center;
|
|
232
|
+
justify-content: center;
|
|
233
|
+
transition: transform 0.2s;
|
|
234
|
+
box-shadow: 0 4px 10px rgba(0,0,0,0.3);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.play-btn-circle:hover {
|
|
238
|
+
transform: scale(1.08);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* Modal Settings Styling */
|
|
242
|
+
.modal-overlay { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.75); backdrop-filter: blur(6px); z-index: 1000; align-items: center; justify-content: center; padding: 16px; }
|
|
243
|
+
.modal-content { background: #161b22; border: 1px solid #30363d; border-radius: 8px; width: 100%; max-width: 420px; padding: 20px; display: flex; flex-direction: column; gap: 14px; box-shadow: 0 10px 25px rgba(0,0,0,0.5); }
|
|
244
|
+
.modal-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #21262d; padding-bottom: 10px; }
|
|
245
|
+
.modal-header h2 { font-size: 1rem; color: #f0f6fc; }
|
|
246
|
+
.modal-close { background: transparent; border: none; color: #8b949e; font-size: 1.2rem; cursor: pointer; }
|
|
247
|
+
.form-group { display: flex; flex-direction: column; gap: 6px; }
|
|
248
|
+
.form-group label { font-size: 0.75rem; font-weight: 600; color: #8b949e; }
|
|
249
|
+
.form-control { background: #0d1117; border: 1px solid #30363d; color: #c9d1d9; padding: 8px; border-radius: 4px; font-size: 0.8rem; outline: none; }
|
|
250
|
+
.checkbox-group { display: flex; align-items: center; gap: 8px; font-size: 0.8rem; color: #c9d1d9; cursor: pointer; }
|
|
251
|
+
.btn-save { background: #238636; color: #fff; border: none; padding: 10px; border-radius: 4px; font-weight: 600; cursor: pointer; margin-top: 6px; transition: 0.2s; }
|
|
252
|
+
.btn-save:hover { background: #2ea043; }
|
|
166
253
|
</style>
|
|
167
254
|
</head>
|
|
168
255
|
<body>
|
|
169
256
|
<div class="container">
|
|
170
257
|
<div class="header">
|
|
171
258
|
<h1 id="dashboard-title">${this.title}</h1>
|
|
172
|
-
<
|
|
259
|
+
<div class="header-right">
|
|
260
|
+
<button class="btn-settings" onclick="openModal()">⚙️ SETTINGS</button>
|
|
261
|
+
<span id="status-badge" class="badge ${this.status.toLowerCase()}">${this.status}</span>
|
|
262
|
+
</div>
|
|
173
263
|
</div>
|
|
174
264
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
<div class="
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
<div class="
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
<div class="
|
|
189
|
-
|
|
265
|
+
<!-- Section Status Boxes & Pairing Code -->
|
|
266
|
+
<div id="widget-metrics-container">
|
|
267
|
+
<div class="grid" id="metrics-grid">
|
|
268
|
+
<div class="card cyan">
|
|
269
|
+
<div class="title">WhatsApp Pairing Code</div>
|
|
270
|
+
<div class="value pairing-highlight" id="pairing-code">-</div>
|
|
271
|
+
<div class="subtext">Kode tautan perangkat</div>
|
|
272
|
+
</div>
|
|
273
|
+
<div class="card blue">
|
|
274
|
+
<div class="title">Operating System</div>
|
|
275
|
+
<div class="value" id="os-name">-</div>
|
|
276
|
+
<div class="subtext" id="cpu-name">-</div>
|
|
277
|
+
</div>
|
|
278
|
+
<div class="card purple">
|
|
279
|
+
<div class="title">Memory Usage</div>
|
|
280
|
+
<div class="value" id="ram-text">- / - MB</div>
|
|
281
|
+
<div class="subtext" id="ram-percent">- % utilized</div>
|
|
282
|
+
</div>
|
|
283
|
+
<div class="card orange">
|
|
284
|
+
<div class="title">Total Commands</div>
|
|
285
|
+
<div class="value" id="total-commands">0</div>
|
|
286
|
+
<div class="subtext">Executed commands</div>
|
|
287
|
+
</div>
|
|
288
|
+
<div class="card green">
|
|
289
|
+
<div class="title">Total Groups</div>
|
|
290
|
+
<div class="value" id="total-groups">0</div>
|
|
291
|
+
<div class="subtext">Active WhatsApp groups</div>
|
|
292
|
+
</div>
|
|
190
293
|
</div>
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
<!-- Section Minimalist Music Player -->
|
|
297
|
+
<div id="widget-player-container">
|
|
298
|
+
<div class="player-card" id="player-card">
|
|
299
|
+
<div class="player-info">
|
|
300
|
+
<div class="player-title" id="track-title">Belum ada lagu diputar</div>
|
|
301
|
+
<div class="player-artist" id="track-channel">Atur judul lagu di menu Settings ⚙️</div>
|
|
302
|
+
</div>
|
|
303
|
+
<button class="play-btn-circle" id="play-btn" onclick="togglePlay()">▶</button>
|
|
304
|
+
<audio id="audio-player" preload="none"></audio>
|
|
195
305
|
</div>
|
|
196
306
|
</div>
|
|
197
307
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
<div class="
|
|
202
|
-
<
|
|
203
|
-
<div class="
|
|
204
|
-
|
|
308
|
+
<!-- Section Terminal Log -->
|
|
309
|
+
<div id="widget-terminal-container">
|
|
310
|
+
<div class="terminal-card" id="terminal-card">
|
|
311
|
+
<div class="terminal-header">
|
|
312
|
+
<span>TERMINAL / LIVE WHATSAPP LOGS</span>
|
|
313
|
+
<div class="dots">
|
|
314
|
+
<div class="dot red"></div>
|
|
315
|
+
<div class="dot yellow"></div>
|
|
316
|
+
<div class="dot green"></div>
|
|
317
|
+
</div>
|
|
205
318
|
</div>
|
|
319
|
+
<pre id="logs">[SYSTEM] Pterodactyl-style console initialized. Listening for bot events... </pre>
|
|
206
320
|
</div>
|
|
207
|
-
<div id="logs"><span class="log-entry" style="color: #6e7681;">[SYSTEM] Pterodactyl-style console initialized. Listening for bot events...</span></div>
|
|
208
321
|
</div>
|
|
322
|
+
</div>
|
|
209
323
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
<
|
|
324
|
+
<!-- Modal Settings Dashboard UI -->
|
|
325
|
+
<div class="modal-overlay" id="settings-modal">
|
|
326
|
+
<div class="modal-content">
|
|
327
|
+
<div class="modal-header">
|
|
328
|
+
<h2>⚙️ Settings UI & Music Player</h2>
|
|
329
|
+
<button class="modal-close" onclick="closeModal()">✖</button>
|
|
215
330
|
</div>
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
<
|
|
331
|
+
|
|
332
|
+
<div class="form-group">
|
|
333
|
+
<label>Cari & Ganti Lagu (YouTube)</label>
|
|
334
|
+
<input type="text" class="form-control" id="cfg-song" placeholder="Ketik judul lagu..." value="">
|
|
219
335
|
</div>
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
<
|
|
223
|
-
|
|
224
|
-
</div>
|
|
225
|
-
<div class="music-info">
|
|
226
|
-
<div class="music-title" id="track-title">Belum ada lagu diputar</div>
|
|
227
|
-
<div class="music-artist" id="track-channel">Ketik pencarian di atas...</div>
|
|
228
|
-
<input type="range" class="seek-bar" id="volume-bar" min="0" max="1" step="0.05" value="0.7" onchange="setVolume(this.value)">
|
|
229
|
-
</div>
|
|
336
|
+
|
|
337
|
+
<div class="form-group">
|
|
338
|
+
<label>Transparansi Widget (<span id="opacity-val">85</span>%)</label>
|
|
339
|
+
<input type="range" class="form-control" id="cfg-opacity" min="0.1" max="1" step="0.05" value="${this.theme.opacity}" oninput="updateOpacityLabel(this.value)">
|
|
230
340
|
</div>
|
|
231
|
-
|
|
341
|
+
|
|
342
|
+
<div class="form-group">
|
|
343
|
+
<label>URL Wallpaper Background</label>
|
|
344
|
+
<input type="text" class="form-control" id="cfg-bg" placeholder="https://..." value="${this.theme.bgImage}">
|
|
345
|
+
</div>
|
|
346
|
+
|
|
347
|
+
<div class="form-group">
|
|
348
|
+
<label>Urutan Lokasi Widget</label>
|
|
349
|
+
<select class="form-control" id="cfg-order">
|
|
350
|
+
<option value="default">Status ➔ Player ➔ Terminal</option>
|
|
351
|
+
<option value="terminal-first">Terminal ➔ Player ➔ Status</option>
|
|
352
|
+
</select>
|
|
353
|
+
</div>
|
|
354
|
+
|
|
355
|
+
<div class="form-group">
|
|
356
|
+
<label>Toggle Widgets Visibility</label>
|
|
357
|
+
<label class="checkbox-group"><input type="checkbox" id="cfg-w-metrics" ${this.widgets.showMetrics ? 'checked' : ''}> Tampilkan Kotak Status</label>
|
|
358
|
+
<label class="checkbox-group"><input type="checkbox" id="cfg-w-music" ${this.widgets.showMusicPlayer ? 'checked' : ''}> Tampilkan Music Player</label>
|
|
359
|
+
<label class="checkbox-group"><input type="checkbox" id="cfg-w-terminal" ${this.widgets.showTerminal ? 'checked' : ''}> Tampilkan Terminal Log</label>
|
|
360
|
+
</div>
|
|
361
|
+
|
|
362
|
+
<button class="btn-save" onclick="saveSettings()">Terapkan & Simpan</button>
|
|
232
363
|
</div>
|
|
233
364
|
</div>
|
|
234
365
|
|
|
235
366
|
<script>
|
|
236
367
|
const socket = io();
|
|
237
368
|
|
|
238
|
-
socket.on('init-data', (data) =>
|
|
239
|
-
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
socket.on('metrics-update', (data) => {
|
|
243
|
-
updateMetrics(data);
|
|
244
|
-
});
|
|
369
|
+
socket.on('init-data', (data) => updateMetrics(data));
|
|
370
|
+
socket.on('metrics-update', (data) => updateMetrics(data));
|
|
245
371
|
|
|
246
372
|
socket.on('status-update', (status) => {
|
|
247
373
|
const badge = document.getElementById('status-badge');
|
|
@@ -249,18 +375,19 @@ export class Dashboard {
|
|
|
249
375
|
badge.className = 'badge ' + status.toLowerCase();
|
|
250
376
|
});
|
|
251
377
|
|
|
378
|
+
socket.on('pairing-update', (code) => {
|
|
379
|
+
document.getElementById('pairing-code').innerText = code;
|
|
380
|
+
});
|
|
381
|
+
|
|
252
382
|
socket.on('stats-update', (stats) => {
|
|
253
383
|
if (stats.commands !== undefined) document.getElementById('total-commands').innerText = stats.commands;
|
|
254
384
|
if (stats.groups !== undefined) document.getElementById('total-groups').innerText = stats.groups;
|
|
255
385
|
});
|
|
256
386
|
|
|
257
387
|
socket.on('log-entry', (msg) => {
|
|
258
|
-
const
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
entry.innerText = msg + '\\n';
|
|
262
|
-
logsDiv.appendChild(entry);
|
|
263
|
-
logsDiv.scrollTop = logsDiv.scrollHeight;
|
|
388
|
+
const logsPre = document.getElementById('logs');
|
|
389
|
+
logsPre.appendChild(document.createTextNode(msg + '\\n'));
|
|
390
|
+
logsPre.scrollTop = logsPre.scrollHeight;
|
|
264
391
|
});
|
|
265
392
|
|
|
266
393
|
function updateMetrics(data) {
|
|
@@ -271,65 +398,128 @@ export class Dashboard {
|
|
|
271
398
|
document.getElementById('ram-percent').innerText = data.ramPercent + '% utilized';
|
|
272
399
|
document.getElementById('total-commands').innerText = data.commands;
|
|
273
400
|
document.getElementById('total-groups').innerText = data.groups;
|
|
401
|
+
document.getElementById('pairing-code').innerText = data.pairingCode || '-';
|
|
274
402
|
|
|
275
403
|
const badge = document.getElementById('status-badge');
|
|
276
404
|
badge.innerText = data.status;
|
|
277
405
|
badge.className = 'badge ' + data.status.toLowerCase();
|
|
278
406
|
}
|
|
279
407
|
|
|
280
|
-
// Music Player
|
|
408
|
+
// Music Player Logic
|
|
281
409
|
const audio = document.getElementById('audio-player');
|
|
282
410
|
const playBtn = document.getElementById('play-btn');
|
|
283
411
|
const trackTitle = document.getElementById('track-title');
|
|
284
412
|
const trackChannel = document.getElementById('track-channel');
|
|
285
|
-
const trackThumb = document.getElementById('track-thumb');
|
|
286
|
-
const playerStatus = document.getElementById('player-status');
|
|
287
|
-
const searchQuery = document.getElementById('search-query');
|
|
288
413
|
|
|
289
|
-
async function
|
|
290
|
-
const query = searchQuery.value.trim();
|
|
414
|
+
async function fetchAndPlaySong(query) {
|
|
291
415
|
if (!query) return;
|
|
292
|
-
|
|
293
|
-
playerStatus.innerText = 'Mencari...';
|
|
416
|
+
trackTitle.innerText = 'Memuat lagu...';
|
|
294
417
|
try {
|
|
295
418
|
const res = await fetch('/api/play?q=' + encodeURIComponent(query));
|
|
296
419
|
const json = await res.json();
|
|
297
|
-
|
|
298
420
|
if (json.status && json.result) {
|
|
299
421
|
const data = json.result;
|
|
300
422
|
trackTitle.innerText = data.title;
|
|
301
|
-
trackChannel.innerText = data.channel
|
|
302
|
-
trackThumb.src = data.thumbnail;
|
|
423
|
+
trackChannel.innerText = data.channel;
|
|
303
424
|
audio.src = data.download || data.downloadUrl || data.download_url;
|
|
304
|
-
|
|
305
425
|
audio.play();
|
|
306
426
|
playBtn.innerText = '❚❚';
|
|
307
|
-
playerStatus.innerText = 'Memutar';
|
|
308
427
|
} else {
|
|
309
|
-
|
|
428
|
+
trackTitle.innerText = 'Lagu tidak ditemukan';
|
|
310
429
|
}
|
|
311
430
|
} catch (err) {
|
|
312
|
-
|
|
313
|
-
console.error(err);
|
|
431
|
+
trackTitle.innerText = 'Gagal memuat lagu';
|
|
314
432
|
}
|
|
315
433
|
}
|
|
316
434
|
|
|
317
435
|
function togglePlay() {
|
|
318
|
-
if (!audio.src)
|
|
436
|
+
if (!audio.src) {
|
|
437
|
+
openModal();
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
319
440
|
if (audio.paused) {
|
|
320
441
|
audio.play();
|
|
321
442
|
playBtn.innerText = '❚❚';
|
|
322
|
-
playerStatus.innerText = 'Memutar';
|
|
323
443
|
} else {
|
|
324
444
|
audio.pause();
|
|
325
445
|
playBtn.innerText = '▶';
|
|
326
|
-
playerStatus.innerText = 'Dijeda';
|
|
327
446
|
}
|
|
328
447
|
}
|
|
329
448
|
|
|
330
|
-
|
|
331
|
-
|
|
449
|
+
// Script Customization & LocalStorage
|
|
450
|
+
function openModal() { document.getElementById('settings-modal').style.display = 'flex'; }
|
|
451
|
+
function closeModal() { document.getElementById('settings-modal').style.display = 'none'; }
|
|
452
|
+
function updateOpacityLabel(val) { document.getElementById('opacity-val').innerText = Math.round(val * 100); }
|
|
453
|
+
|
|
454
|
+
function saveSettings() {
|
|
455
|
+
const opacity = document.getElementById('cfg-opacity').value;
|
|
456
|
+
const bg = document.getElementById('cfg-bg').value;
|
|
457
|
+
const order = document.getElementById('cfg-order').value;
|
|
458
|
+
const showMetrics = document.getElementById('cfg-w-metrics').checked;
|
|
459
|
+
const showTerminal = document.getElementById('cfg-w-terminal').checked;
|
|
460
|
+
const showMusic = document.getElementById('cfg-w-music').checked;
|
|
461
|
+
const newSong = document.getElementById('cfg-song').value.trim();
|
|
462
|
+
|
|
463
|
+
const config = { opacity, bg, order, showMetrics, showTerminal, showMusic, newSong };
|
|
464
|
+
localStorage.setItem('shiina_ui_config', JSON.stringify(config));
|
|
465
|
+
applyUI(config);
|
|
466
|
+
|
|
467
|
+
if (newSong) {
|
|
468
|
+
fetchAndPlaySong(newSong);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
closeModal();
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
function applyUI(cfg) {
|
|
475
|
+
if (!cfg) return;
|
|
476
|
+
|
|
477
|
+
document.querySelectorAll('.card, .header, .terminal-card, .player-card').forEach(el => {
|
|
478
|
+
el.style.background = 'rgba(22, 27, 34, ' + cfg.opacity + ')';
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
if (cfg.bg) {
|
|
482
|
+
document.body.style.background = "url('" + cfg.bg + "') no-repeat center center fixed";
|
|
483
|
+
document.body.style.backgroundSize = "cover";
|
|
484
|
+
} else {
|
|
485
|
+
document.body.style.background = "#0d1117";
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const cMetrics = document.getElementById('widget-metrics-container');
|
|
489
|
+
const cPlayer = document.getElementById('widget-player-container');
|
|
490
|
+
const cTerminal = document.getElementById('widget-terminal-container');
|
|
491
|
+
|
|
492
|
+
if (cfg.order === 'terminal-first') {
|
|
493
|
+
cTerminal.style.order = '1';
|
|
494
|
+
cPlayer.style.order = '2';
|
|
495
|
+
cMetrics.style.order = '3';
|
|
496
|
+
} else {
|
|
497
|
+
cMetrics.style.order = '1';
|
|
498
|
+
cPlayer.style.order = '2';
|
|
499
|
+
cTerminal.style.order = '3';
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
document.getElementById('metrics-grid').style.display = cfg.showMetrics ? 'grid' : 'none';
|
|
503
|
+
document.getElementById('player-card').style.display = cfg.showMusic ? 'flex' : 'none';
|
|
504
|
+
document.getElementById('terminal-card').style.display = cfg.showTerminal ? 'block' : 'none';
|
|
332
505
|
}
|
|
506
|
+
|
|
507
|
+
window.addEventListener('DOMContentLoaded', () => {
|
|
508
|
+
const saved = localStorage.getItem('shiina_ui_config');
|
|
509
|
+
if (saved) {
|
|
510
|
+
try {
|
|
511
|
+
const cfg = JSON.parse(saved);
|
|
512
|
+
document.getElementById('cfg-opacity').value = cfg.opacity || 0.85;
|
|
513
|
+
document.getElementById('opacity-val').innerText = Math.round((cfg.opacity || 0.85) * 100);
|
|
514
|
+
document.getElementById('cfg-bg').value = cfg.bg || '';
|
|
515
|
+
document.getElementById('cfg-order').value = cfg.order || 'default';
|
|
516
|
+
document.getElementById('cfg-w-metrics').checked = cfg.showMetrics !== false;
|
|
517
|
+
document.getElementById('cfg-w-music').checked = cfg.showMusicPlayer !== false;
|
|
518
|
+
document.getElementById('cfg-w-terminal').checked = cfg.showTerminal !== false;
|
|
519
|
+
applyUI(cfg);
|
|
520
|
+
} catch(e) {}
|
|
521
|
+
}
|
|
522
|
+
});
|
|
333
523
|
</script>
|
|
334
524
|
</body>
|
|
335
525
|
</html>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/Utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/Utils/dashboard.ts"],"names":[],"mappings":"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"}
|