djs-builder 0.6.401 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +292 -43
- package/function/dash.js +638 -0
- package/function/giveaway.js +47 -10
- package/function/security.js +0 -0
- package/handler/starter.js +73 -38
- package/package.json +9 -4
- package/views/404.ejs +40 -0
- package/views/dashboard.ejs +894 -0
- package/views/giveaways.ejs +306 -0
- package/views/guild.ejs +576 -0
- package/views/index.ejs +419 -0
- package/views/levels.ejs +326 -0
- package/views/login.ejs +437 -0
package/views/index.ejs
ADDED
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="ar" dir="rtl">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>DJS-Builder Dashboard</title>
|
|
7
|
+
<link rel="icon" href="<%= botStats.botAvatar || '/img/logo.png' %>" type="image/png">
|
|
8
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
|
|
9
|
+
<link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
|
|
10
|
+
<style>
|
|
11
|
+
:root {
|
|
12
|
+
--bg-primary: #030305;
|
|
13
|
+
--bg-secondary: #0a0a0f;
|
|
14
|
+
--bg-card: #12121a;
|
|
15
|
+
--bg-card-hover: #1a1a25;
|
|
16
|
+
--accent: #5865F2;
|
|
17
|
+
--accent-light: #7289DA;
|
|
18
|
+
--accent-glow: rgba(88, 101, 242, 0.4);
|
|
19
|
+
--purple: #9b59b6;
|
|
20
|
+
--pink: #e91e63;
|
|
21
|
+
--success: #10b981;
|
|
22
|
+
--text-primary: #ffffff;
|
|
23
|
+
--text-secondary: #94a3b8;
|
|
24
|
+
--text-muted: #64748b;
|
|
25
|
+
--border: rgba(255,255,255,0.06);
|
|
26
|
+
--radius: 20px;
|
|
27
|
+
--radius-sm: 12px;
|
|
28
|
+
}
|
|
29
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
30
|
+
body { font-family: 'Inter', sans-serif; background: var(--bg-primary); color: var(--text-primary); min-height: 100vh; overflow-x: hidden; }
|
|
31
|
+
a { color: inherit; text-decoration: none; }
|
|
32
|
+
|
|
33
|
+
/* Background Effects */
|
|
34
|
+
.bg-effects { position: fixed; inset: 0; pointer-events: none; overflow: hidden; z-index: 0; }
|
|
35
|
+
.bg-gradient-1 { position: absolute; top: -50%; right: -30%; width: 80%; height: 80%; background: radial-gradient(circle, rgba(88,101,242,0.15) 0%, transparent 60%); filter: blur(60px); }
|
|
36
|
+
.bg-gradient-2 { position: absolute; bottom: -40%; left: -20%; width: 60%; height: 60%; background: radial-gradient(circle, rgba(155,89,182,0.12) 0%, transparent 60%); filter: blur(60px); }
|
|
37
|
+
.bg-grid { position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px); background-size: 60px 60px; }
|
|
38
|
+
|
|
39
|
+
/* Buttons */
|
|
40
|
+
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 10px; padding: 14px 28px; border-radius: var(--radius-sm); font-weight: 600; font-size: 15px; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); border: none; position: relative; overflow: hidden; }
|
|
41
|
+
.btn-primary { background: linear-gradient(135deg, var(--accent), var(--accent-light)); color: white; box-shadow: 0 4px 20px var(--accent-glow); }
|
|
42
|
+
.btn-primary:hover { transform: translateY(-3px); box-shadow: 0 8px 30px var(--accent-glow); }
|
|
43
|
+
.btn-primary::before { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(255,255,255,0.2), transparent); opacity: 0; transition: opacity 0.3s; }
|
|
44
|
+
.btn-primary:hover::before { opacity: 1; }
|
|
45
|
+
.btn-secondary { background: rgba(255,255,255,0.05); color: var(--text-primary); border: 1px solid var(--border); backdrop-filter: blur(10px); }
|
|
46
|
+
.btn-secondary:hover { background: rgba(255,255,255,0.1); border-color: var(--accent); transform: translateY(-2px); }
|
|
47
|
+
.btn-lg { padding: 16px 36px; font-size: 16px; }
|
|
48
|
+
|
|
49
|
+
/* Navigation */
|
|
50
|
+
.nav { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; padding: 20px 60px; display: flex; align-items: center; justify-content: space-between; background: rgba(3,3,5,0.8); backdrop-filter: blur(20px); border-bottom: 1px solid var(--border); }
|
|
51
|
+
.nav-brand { display: flex; align-items: center; gap: 14px; }
|
|
52
|
+
.nav-brand img { width: 44px; height: 44px; border-radius: var(--radius-sm); box-shadow: 0 4px 15px rgba(0,0,0,0.3); }
|
|
53
|
+
.nav-logo { width: 44px; height: 44px; border-radius: var(--radius-sm); background: linear-gradient(135deg, var(--accent), var(--purple)); display: flex; align-items: center; justify-content: center; font-size: 20px; }
|
|
54
|
+
.nav-brand h1 { font-size: 22px; font-weight: 700; background: linear-gradient(135deg, #fff, var(--text-secondary)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
|
55
|
+
|
|
56
|
+
/* Hero Section */
|
|
57
|
+
.hero { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 120px 60px 80px; position: relative; z-index: 1; }
|
|
58
|
+
.hero-container { max-width: 1300px; width: 100%; display: grid; grid-template-columns: 1.1fr 1fr; gap: 80px; align-items: center; }
|
|
59
|
+
|
|
60
|
+
.hero-content { position: relative; }
|
|
61
|
+
.hero-badge { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; background: rgba(88,101,242,0.1); border: 1px solid rgba(88,101,242,0.3); border-radius: 50px; font-size: 13px; color: var(--accent-light); margin-bottom: 24px; }
|
|
62
|
+
.hero-badge i { font-size: 16px; }
|
|
63
|
+
|
|
64
|
+
.hero-title { font-size: 60px; font-weight: 800; line-height: 1.1; margin-bottom: 24px; }
|
|
65
|
+
.hero-title .highlight { background: linear-gradient(135deg, var(--accent), var(--purple), var(--pink)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-size: 200% auto; animation: gradient 5s ease infinite; }
|
|
66
|
+
@keyframes gradient { 0%, 100% { background-position: 0% center; } 50% { background-position: 100% center; } }
|
|
67
|
+
|
|
68
|
+
.hero-description { font-size: 18px; color: var(--text-secondary); line-height: 1.8; margin-bottom: 36px; max-width: 520px; }
|
|
69
|
+
|
|
70
|
+
.hero-buttons { display: flex; gap: 16px; margin-bottom: 60px; }
|
|
71
|
+
|
|
72
|
+
.hero-stats { display: flex; gap: 48px; }
|
|
73
|
+
.hero-stat { position: relative; }
|
|
74
|
+
.hero-stat::after { content: ''; position: absolute; left: -24px; top: 50%; transform: translateY(-50%); width: 1px; height: 40px; background: var(--border); }
|
|
75
|
+
.hero-stat:first-child::after { display: none; }
|
|
76
|
+
.stat-value { font-size: 42px; font-weight: 800; background: linear-gradient(135deg, #fff, var(--accent-light)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
|
77
|
+
.stat-label { font-size: 14px; color: var(--text-muted); margin-top: 4px; }
|
|
78
|
+
|
|
79
|
+
/* Bot Card */
|
|
80
|
+
.hero-visual { position: relative; }
|
|
81
|
+
.bot-card { background: linear-gradient(145deg, var(--bg-card), rgba(18,18,26,0.8)); border-radius: var(--radius); padding: 36px; border: 1px solid var(--border); backdrop-filter: blur(20px); position: relative; overflow: hidden; }
|
|
82
|
+
.bot-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, var(--accent), var(--purple), var(--pink)); }
|
|
83
|
+
.bot-card-glow { position: absolute; top: -100px; right: -100px; width: 300px; height: 300px; background: radial-gradient(circle, var(--accent-glow) 0%, transparent 70%); filter: blur(40px); pointer-events: none; }
|
|
84
|
+
|
|
85
|
+
/* Floating Elements */
|
|
86
|
+
.floating-el {
|
|
87
|
+
position: absolute;
|
|
88
|
+
border-radius: var(--radius-sm);
|
|
89
|
+
background: var(--bg-card);
|
|
90
|
+
border: 1px solid var(--border);
|
|
91
|
+
padding: 10px 16px;
|
|
92
|
+
display: flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
gap: 8px;
|
|
95
|
+
font-size: 12px;
|
|
96
|
+
font-weight: 500;
|
|
97
|
+
box-shadow: 0 10px 40px rgba(0,0,0,0.4);
|
|
98
|
+
animation: float 8s ease-in-out infinite;
|
|
99
|
+
z-index: 10;
|
|
100
|
+
backdrop-filter: blur(10px);
|
|
101
|
+
will-change: transform;
|
|
102
|
+
transform: translateZ(0);
|
|
103
|
+
}
|
|
104
|
+
.floating-el i { font-size: 16px; }
|
|
105
|
+
.floating-el.el-1 { top: -20px; left: -30px; animation-delay: 0s; }
|
|
106
|
+
.floating-el.el-1 i { color: var(--accent); }
|
|
107
|
+
.floating-el.el-2 { bottom: -20px; right: -30px; animation-delay: 2s; }
|
|
108
|
+
.floating-el.el-2 i { color: var(--success); }
|
|
109
|
+
.floating-el.el-3 { top: 40%; left: -50px; animation-delay: 4s; }
|
|
110
|
+
.floating-el.el-3 i { color: var(--purple); }
|
|
111
|
+
.floating-el.el-4 { top: 30%; right: -40px; animation-delay: 6s; }
|
|
112
|
+
.floating-el.el-4 i { color: var(--pink); }
|
|
113
|
+
@keyframes float {
|
|
114
|
+
0% { transform: translate3d(0, 0, 0); }
|
|
115
|
+
50% { transform: translate3d(0, -20px, 0); }
|
|
116
|
+
100% { transform: translate3d(0, 0, 0); }
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.bot-header { display: flex; align-items: center; gap: 20px; margin-bottom: 32px; position: relative; z-index: 1; }
|
|
120
|
+
.bot-avatar { width: 90px; height: 90px; border-radius: 50%; border: 4px solid var(--accent); box-shadow: 0 0 30px var(--accent-glow); }
|
|
121
|
+
.bot-info h3 { font-size: 26px; font-weight: 700; margin-bottom: 6px; }
|
|
122
|
+
.bot-status { display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px; background: rgba(16,185,129,0.15); border-radius: 50px; font-size: 13px; color: var(--success); font-weight: 500; }
|
|
123
|
+
.bot-status .dot { width: 8px; height: 8px; background: var(--success); border-radius: 50%; animation: pulse 1.5s infinite; }
|
|
124
|
+
@keyframes pulse { 0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(16,185,129,0.4); } 50% { opacity: 0.8; box-shadow: 0 0 0 8px transparent; } }
|
|
125
|
+
|
|
126
|
+
.bot-stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; position: relative; z-index: 1; }
|
|
127
|
+
.bot-stat-item { background: rgba(255,255,255,0.03); border: 1px solid var(--border); padding: 16px 12px; border-radius: var(--radius-sm); text-align: center; transition: all 0.3s; }
|
|
128
|
+
.bot-stat-item:hover { background: rgba(255,255,255,0.06); border-color: var(--accent); transform: translateY(-4px); }
|
|
129
|
+
.bot-stat-item i { font-size: 22px; margin-bottom: 8px; display: block; }
|
|
130
|
+
.bot-stat-item:nth-child(1) i { color: var(--accent); }
|
|
131
|
+
.bot-stat-item:nth-child(2) i { color: var(--purple); }
|
|
132
|
+
.bot-stat-item:nth-child(3) i { color: var(--pink); }
|
|
133
|
+
.bot-stat-item:nth-child(4) i { color: var(--success); }
|
|
134
|
+
.bot-stat-item:nth-child(5) i { color: #f59e0b; }
|
|
135
|
+
.bot-stat-item:nth-child(6) i { color: #3b82f6; }
|
|
136
|
+
.bot-stat-item .value { font-size: 22px; font-weight: 700; display: block; margin-bottom: 2px; }
|
|
137
|
+
.bot-stat-item .label { font-size: 11px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; }
|
|
138
|
+
|
|
139
|
+
/* Features Section */
|
|
140
|
+
.features { padding: 120px 60px; position: relative; z-index: 1; }
|
|
141
|
+
.features-container { max-width: 1300px; margin: 0 auto; }
|
|
142
|
+
|
|
143
|
+
.section-header { text-align: center; margin-bottom: 64px; }
|
|
144
|
+
.section-label { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; background: rgba(155,89,182,0.1); border: 1px solid rgba(155,89,182,0.3); border-radius: 50px; font-size: 13px; color: var(--purple); margin-bottom: 20px; }
|
|
145
|
+
.section-title { font-size: 44px; font-weight: 800; margin-bottom: 16px; }
|
|
146
|
+
.section-desc { font-size: 18px; color: var(--text-secondary); max-width: 600px; margin: 0 auto; }
|
|
147
|
+
|
|
148
|
+
.features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
|
|
149
|
+
.feature-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 32px; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; }
|
|
150
|
+
.feature-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--accent), var(--purple)); transform: scaleX(0); transition: transform 0.4s; }
|
|
151
|
+
.feature-card:hover { transform: translateY(-8px); border-color: rgba(88,101,242,0.3); box-shadow: 0 20px 60px rgba(0,0,0,0.3); }
|
|
152
|
+
.feature-card:hover::before { transform: scaleX(1); }
|
|
153
|
+
|
|
154
|
+
.feature-icon { width: 64px; height: 64px; border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; font-size: 28px; margin-bottom: 20px; }
|
|
155
|
+
.feature-card:nth-child(1) .feature-icon { background: rgba(88,101,242,0.15); color: var(--accent); }
|
|
156
|
+
.feature-card:nth-child(2) .feature-icon { background: rgba(233,30,99,0.15); color: var(--pink); }
|
|
157
|
+
.feature-card:nth-child(3) .feature-icon { background: rgba(155,89,182,0.15); color: var(--purple); }
|
|
158
|
+
.feature-card:nth-child(4) .feature-icon { background: rgba(16,185,129,0.15); color: var(--success); }
|
|
159
|
+
.feature-card:nth-child(5) .feature-icon { background: rgba(245,158,11,0.15); color: #f59e0b; }
|
|
160
|
+
.feature-card:nth-child(6) .feature-icon { background: rgba(59,130,246,0.15); color: #3b82f6; }
|
|
161
|
+
|
|
162
|
+
.feature-card h4 { font-size: 20px; font-weight: 600; margin-bottom: 12px; }
|
|
163
|
+
.feature-card p { color: var(--text-secondary); font-size: 15px; line-height: 1.7; }
|
|
164
|
+
|
|
165
|
+
/* CTA Section */
|
|
166
|
+
.cta { padding: 100px 60px; position: relative; z-index: 1; }
|
|
167
|
+
.cta-container { max-width: 900px; margin: 0 auto; text-align: center; background: linear-gradient(145deg, var(--bg-card), rgba(88,101,242,0.1)); border: 1px solid var(--border); border-radius: var(--radius); padding: 60px; position: relative; overflow: hidden; }
|
|
168
|
+
.cta-container::before { content: ''; position: absolute; inset: 0; background: radial-gradient(circle at top right, var(--accent-glow) 0%, transparent 50%); pointer-events: none; }
|
|
169
|
+
.cta h3 { font-size: 36px; font-weight: 800; margin-bottom: 16px; position: relative; }
|
|
170
|
+
.cta p { color: var(--text-secondary); font-size: 18px; margin-bottom: 32px; position: relative; }
|
|
171
|
+
.cta-buttons { display: flex; gap: 16px; justify-content: center; position: relative; }
|
|
172
|
+
|
|
173
|
+
/* Footer */
|
|
174
|
+
.footer { padding: 32px 60px; text-align: center; border-top: 1px solid var(--border); position: relative; z-index: 1; }
|
|
175
|
+
.footer p { color: var(--text-muted); font-size: 14px; }
|
|
176
|
+
.footer a { color: var(--accent); transition: color 0.3s; }
|
|
177
|
+
.footer a:hover { color: var(--accent-light); }
|
|
178
|
+
|
|
179
|
+
/* Responsive */
|
|
180
|
+
@media (max-width: 1100px) {
|
|
181
|
+
.hero-container { grid-template-columns: 1fr; text-align: center; gap: 50px; }
|
|
182
|
+
.hero-description { margin: 0 auto 36px; }
|
|
183
|
+
.hero-buttons, .hero-stats { justify-content: center; }
|
|
184
|
+
.hero-visual { max-width: 500px; margin: 0 auto; }
|
|
185
|
+
.floating-el { display: none; }
|
|
186
|
+
.features-grid { grid-template-columns: repeat(2, 1fr); }
|
|
187
|
+
}
|
|
188
|
+
@media (max-width: 768px) {
|
|
189
|
+
.nav { padding: 16px 20px; }
|
|
190
|
+
.nav-brand h1 { font-size: 18px; }
|
|
191
|
+
.hero { padding: 100px 20px 60px; }
|
|
192
|
+
.hero-title { font-size: 32px; line-height: 1.2; }
|
|
193
|
+
.hero-description { font-size: 15px; }
|
|
194
|
+
.hero-buttons { flex-direction: column; width: 100%; }
|
|
195
|
+
.hero-buttons .btn { width: 100%; justify-content: center; }
|
|
196
|
+
.hero-stats { flex-wrap: wrap; gap: 24px; }
|
|
197
|
+
.hero-stat { min-width: 80px; }
|
|
198
|
+
.hero-stat-value { font-size: 28px; }
|
|
199
|
+
.hero-stat::after { display: none; }
|
|
200
|
+
.bot-card { padding: 24px; }
|
|
201
|
+
.bot-card-name { font-size: 22px; }
|
|
202
|
+
.features { padding: 60px 20px; }
|
|
203
|
+
.features-grid { grid-template-columns: 1fr; gap: 16px; }
|
|
204
|
+
.section-title { font-size: 28px; }
|
|
205
|
+
.feature-card { padding: 24px; }
|
|
206
|
+
.cta { padding: 50px 20px; }
|
|
207
|
+
.cta-container { padding: 32px 20px; }
|
|
208
|
+
.cta h3 { font-size: 24px; }
|
|
209
|
+
.cta p { font-size: 14px; }
|
|
210
|
+
.cta-buttons { flex-direction: column; width: 100%; }
|
|
211
|
+
.cta-buttons .btn { width: 100%; justify-content: center; }
|
|
212
|
+
.footer { padding: 20px; }
|
|
213
|
+
.footer p { font-size: 12px; }
|
|
214
|
+
}
|
|
215
|
+
@media (max-width: 480px) {
|
|
216
|
+
.hero-title { font-size: 26px; }
|
|
217
|
+
.hero-stat-value { font-size: 24px; }
|
|
218
|
+
.hero-stat-label { font-size: 11px; }
|
|
219
|
+
.section-title { font-size: 24px; }
|
|
220
|
+
.section-subtitle { font-size: 14px; }
|
|
221
|
+
}
|
|
222
|
+
</style>
|
|
223
|
+
</head>
|
|
224
|
+
<body>
|
|
225
|
+
<!-- Background Effects -->
|
|
226
|
+
<div class="bg-effects">
|
|
227
|
+
<div class="bg-gradient-1"></div>
|
|
228
|
+
<div class="bg-gradient-2"></div>
|
|
229
|
+
<div class="bg-grid"></div>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<!-- Navigation -->
|
|
233
|
+
<nav class="nav">
|
|
234
|
+
<div class="nav-brand">
|
|
235
|
+
<% if (botStats.botAvatar) { %><img src="<%= botStats.botAvatar %>" alt="Bot"><% } else { %><div class="nav-logo"><i class="ri-robot-fill"></i></div><% } %>
|
|
236
|
+
<h1>DJS-Builder</h1>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="nav-actions">
|
|
239
|
+
<% if (user) { %>
|
|
240
|
+
<a href="/dashboard" class="btn btn-primary"><i class="ri-dashboard-line"></i> لوحة التحكم</a>
|
|
241
|
+
<% } else { %>
|
|
242
|
+
<a href="/login" class="btn btn-primary"><i class="ri-discord-fill"></i> تسجيل الدخول</a>
|
|
243
|
+
<% } %>
|
|
244
|
+
</div>
|
|
245
|
+
</nav>
|
|
246
|
+
|
|
247
|
+
<!-- Hero Section -->
|
|
248
|
+
<section class="hero">
|
|
249
|
+
<div class="hero-container">
|
|
250
|
+
<div class="hero-content">
|
|
251
|
+
<div class="hero-badge"><i class="ri-sparkle-fill"></i> djs-builder </div>
|
|
252
|
+
<h1 class="hero-title">إدارة بوتك<br><span class="highlight">بكل سهولة</span></h1>
|
|
253
|
+
<p class="hero-description">لوحة تحكم عصرية وقوية لإدارة بوت Discord الخاص بك. تحكم في نظام المستويات، المسابقات، الحماية، والمزيد من مكان واحد.</p>
|
|
254
|
+
<div class="hero-buttons">
|
|
255
|
+
<% if (user) { %>
|
|
256
|
+
<a href="/dashboard" class="btn btn-primary btn-lg"><i class="ri-dashboard-line"></i> فتح لوحة التحكم</a>
|
|
257
|
+
<% } else { %>
|
|
258
|
+
<a href="/login" class="btn btn-primary btn-lg"><i class="ri-discord-fill"></i> ابدأ الآن مجاناً</a>
|
|
259
|
+
<% } %>
|
|
260
|
+
<a href="https://www.npmjs.com/package/djs-builder" target="_blank" class="btn btn-secondary btn-lg"><i class="ri-npmjs-line"></i> NPM Package</a>
|
|
261
|
+
</div>
|
|
262
|
+
<div class="hero-stats">
|
|
263
|
+
<div class="hero-stat">
|
|
264
|
+
<div class="stat-value"><%= botStats.guilds %></div>
|
|
265
|
+
<div class="stat-label">سيرفر</div>
|
|
266
|
+
</div>
|
|
267
|
+
<div class="hero-stat">
|
|
268
|
+
<div class="stat-value"><%= botStats.users.toLocaleString() %></div>
|
|
269
|
+
<div class="stat-label">مستخدم</div>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="hero-stat">
|
|
272
|
+
<div class="stat-value"><%= botStats.slashCommands + botStats.prefixCommands %></div>
|
|
273
|
+
<div class="stat-label">أمر</div>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
<div class="hero-visual">
|
|
279
|
+
<div class="floating-el el-1"><i class="ri-terminal-box-line"></i> Slash Commands</div>
|
|
280
|
+
<div class="floating-el el-2"><i class="ri-shield-check-line"></i> Anti-Crash</div>
|
|
281
|
+
<div class="floating-el el-3"><i class="ri-database-2-line"></i> MongoDB</div>
|
|
282
|
+
<div class="floating-el el-4"><i class="ri-speed-line"></i> Fast API</div>
|
|
283
|
+
|
|
284
|
+
<div class="bot-card">
|
|
285
|
+
<div class="bot-card-glow"></div>
|
|
286
|
+
<div class="bot-header">
|
|
287
|
+
<img src="<%= botStats.botAvatar || 'https://cdn.discordapp.com/embed/avatars/0.png' %>" alt="Bot" class="bot-avatar">
|
|
288
|
+
<div class="bot-info">
|
|
289
|
+
<h3><%= botStats.botName %></h3>
|
|
290
|
+
<div class="bot-status"><span class="dot"></span> متصل الآن</div>
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
<div class="bot-stats-grid">
|
|
294
|
+
<div class="bot-stat-item">
|
|
295
|
+
<i class="ri-server-line"></i>
|
|
296
|
+
<span class="value"><%= botStats.guilds %></span>
|
|
297
|
+
<span class="label">سيرفر</span>
|
|
298
|
+
</div>
|
|
299
|
+
<div class="bot-stat-item">
|
|
300
|
+
<i class="ri-group-line"></i>
|
|
301
|
+
<span class="value"><%= botStats.users.toLocaleString() %></span>
|
|
302
|
+
<span class="label">مستخدم</span>
|
|
303
|
+
</div>
|
|
304
|
+
<div class="bot-stat-item">
|
|
305
|
+
<i class="ri-terminal-box-line"></i>
|
|
306
|
+
<span class="value"><%= botStats.slashCommands + botStats.prefixCommands %></span>
|
|
307
|
+
<span class="label">أمر</span>
|
|
308
|
+
</div>
|
|
309
|
+
<div class="bot-stat-item">
|
|
310
|
+
<i class="ri-calendar-event-line"></i>
|
|
311
|
+
<span class="value"><%= botStats.events %></span>
|
|
312
|
+
<span class="label">حدث</span>
|
|
313
|
+
</div>
|
|
314
|
+
<div class="bot-stat-item">
|
|
315
|
+
<i class="ri-flashlight-line"></i>
|
|
316
|
+
<span class="value"><%= botStats.ping %></span>
|
|
317
|
+
<span class="label">Ping</span>
|
|
318
|
+
</div>
|
|
319
|
+
<div class="bot-stat-item">
|
|
320
|
+
<i class="ri-time-line"></i>
|
|
321
|
+
<span class="value" id="uptime">-</span>
|
|
322
|
+
<span class="label">تشغيل</span>
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
</div>
|
|
326
|
+
</div>
|
|
327
|
+
</div>
|
|
328
|
+
</section>
|
|
329
|
+
|
|
330
|
+
<!-- Features Section -->
|
|
331
|
+
<section class="features">
|
|
332
|
+
<div class="features-container">
|
|
333
|
+
<div class="section-header">
|
|
334
|
+
<div class="section-label"><i class="ri-magic-line"></i> المميزات</div>
|
|
335
|
+
<h2 class="section-title">كل ما تحتاجه في حزمة واحدة</h2>
|
|
336
|
+
<p class="section-desc">أدوات متكاملة لبناء بوت Discord احترافي بأقل جهد وأفضل أداء</p>
|
|
337
|
+
</div>
|
|
338
|
+
|
|
339
|
+
<div class="features-grid">
|
|
340
|
+
<div class="feature-card">
|
|
341
|
+
<div class="feature-icon"><i class="ri-trophy-line"></i></div>
|
|
342
|
+
<h4>نظام المستويات</h4>
|
|
343
|
+
<p>نظام XP متكامل يدعم النص والصوت مع لوحة متصدرين جميلة وقابلة للتخصيص</p>
|
|
344
|
+
</div>
|
|
345
|
+
<div class="feature-card">
|
|
346
|
+
<div class="feature-icon"><i class="ri-gift-line"></i></div>
|
|
347
|
+
<h4>نظام المسابقات</h4>
|
|
348
|
+
<p>إنشاء وإدارة المسابقات بسهولة مع دعم الأزرار والتفاعلات وإعادة السحب</p>
|
|
349
|
+
</div>
|
|
350
|
+
<div class="feature-card">
|
|
351
|
+
<div class="feature-icon"><i class="ri-shield-check-line"></i></div>
|
|
352
|
+
<h4>نظام الحماية</h4>
|
|
353
|
+
<p>Anti-crash متقدم يحمي بوتك من الأخطاء مع تقارير تلقائية مفصلة</p>
|
|
354
|
+
</div>
|
|
355
|
+
<div class="feature-card">
|
|
356
|
+
<div class="feature-icon"><i class="ri-file-list-3-line"></i></div>
|
|
357
|
+
<h4>نظام السجلات</h4>
|
|
358
|
+
<p>تتبع جميع الأحداث: الرسائل، القنوات، الأدوار، الانضمام والمغادرة</p>
|
|
359
|
+
</div>
|
|
360
|
+
<div class="feature-card">
|
|
361
|
+
<div class="feature-icon"><i class="ri-terminal-box-line"></i></div>
|
|
362
|
+
<h4>تحميل الأوامر</h4>
|
|
363
|
+
<p>تحميل تلقائي للأوامر Slash و Prefix مع دعم Cooldowns والصلاحيات</p>
|
|
364
|
+
</div>
|
|
365
|
+
<div class="feature-card">
|
|
366
|
+
<div class="feature-icon"><i class="ri-database-2-line"></i></div>
|
|
367
|
+
<h4>قاعدة البيانات</h4>
|
|
368
|
+
<p>اتصال سهل وسريع مع MongoDB مع موديلات جاهزة للاستخدام</p>
|
|
369
|
+
</div>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</section>
|
|
373
|
+
|
|
374
|
+
<!-- CTA Section -->
|
|
375
|
+
<section class="cta">
|
|
376
|
+
<div class="cta-container">
|
|
377
|
+
<h3>جاهز لبناء بوتك؟</h3>
|
|
378
|
+
<p>انضم لآلاف المطورين الذين يستخدمون DJS-Builder لبناء بوتات احترافية</p>
|
|
379
|
+
<div class="cta-buttons">
|
|
380
|
+
<a href="https://www.npmjs.com/package/djs-builder" target="_blank" class="btn btn-primary btn-lg">
|
|
381
|
+
<i class="ri-npmjs-line"></i> معلومات الحزمة
|
|
382
|
+
</a>
|
|
383
|
+
<a href="https://discord.gg/aU3cmPCf" target="_blank" class="btn btn-secondary btn-lg">
|
|
384
|
+
<i class="ri-discord-fill"></i> انضم للسيرفر
|
|
385
|
+
</a>
|
|
386
|
+
</div>
|
|
387
|
+
</div>
|
|
388
|
+
</section>
|
|
389
|
+
|
|
390
|
+
<!-- Footer -->
|
|
391
|
+
<footer class="footer">
|
|
392
|
+
<p>© <%= new Date().getFullYear() %> DJS-Builder Dashboard - مبني بـ ❤️ لمجتمع Discord</p>
|
|
393
|
+
</footer>
|
|
394
|
+
|
|
395
|
+
<script>
|
|
396
|
+
// Uptime calculator
|
|
397
|
+
const startTime = <%= botStats.startedAt || Date.now() %>;
|
|
398
|
+
|
|
399
|
+
function updateUptime() {
|
|
400
|
+
const now = Date.now();
|
|
401
|
+
const diff = now - startTime;
|
|
402
|
+
|
|
403
|
+
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
404
|
+
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
405
|
+
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
|
|
406
|
+
|
|
407
|
+
let uptimeStr = '';
|
|
408
|
+
if (days > 0) uptimeStr = days + 'd';
|
|
409
|
+
else if (hours > 0) uptimeStr = hours + 'h';
|
|
410
|
+
else uptimeStr = minutes + 'm';
|
|
411
|
+
|
|
412
|
+
document.getElementById('uptime').textContent = uptimeStr;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
updateUptime();
|
|
416
|
+
setInterval(updateUptime, 60000);
|
|
417
|
+
</script>
|
|
418
|
+
</body>
|
|
419
|
+
</html>
|