zortlex-bot 0.0.0-stage → 1.0.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/.env.example +65 -0
- package/Dockerfile +38 -0
- package/LICENSE +21 -0
- package/README.md +284 -2
- package/baslat.bat +84 -0
- package/commands/admin/kara-liste.js +106 -0
- package/commands/economy/balance.js +136 -0
- package/commands/economy/buy.js +97 -0
- package/commands/economy/crime.js +74 -0
- package/commands/economy/daily.js +54 -0
- package/commands/economy/deposit.js +64 -0
- package/commands/economy/eco-leaderboard.js +46 -0
- package/commands/economy/ekonomi.js +873 -0
- package/commands/economy/inventory.js +106 -0
- package/commands/economy/pay.js +93 -0
- package/commands/economy/rob.js +149 -0
- package/commands/economy/shop.js +127 -0
- package/commands/economy/withdraw.js +64 -0
- package/commands/economy/work.js +54 -0
- package/commands/game/casino.js +358 -0
- package/commands/game/cekilis.js +200 -0
- package/commands/game/yazi-tura.js +46 -0
- package/commands/game/zar-at.js +42 -0
- package/commands/general/anket.js +205 -0
- package/commands/general/avatar.js +98 -0
- package/commands/general/botinfo.js +136 -0
- package/commands/general/context-kullanici-bilgi.js +78 -0
- package/commands/general/context-mesaj-cevir.js +68 -0
- package/commands/general/context-mesaj-rapor.js +55 -0
- package/commands/general/embed-olustur.js +37 -0
- package/commands/general/help.js +159 -0
- package/commands/general/mesaj-ara.js +146 -0
- package/commands/general/oauth.js +50 -0
- package/commands/general/ping.js +91 -0
- package/commands/general/profile.js +163 -0
- package/commands/general/rol-al.js +78 -0
- package/commands/general/rol-ver.js +76 -0
- package/commands/general/serverinfo.js +153 -0
- package/commands/general/userinfo.js +196 -0
- package/commands/invite/bonus-invites.js +61 -0
- package/commands/invite/invite-leaderboard.js +51 -0
- package/commands/invite/invites.js +53 -0
- package/commands/moderation/ban.js +97 -0
- package/commands/moderation/clear.js +64 -0
- package/commands/moderation/dm-reply.js +105 -0
- package/commands/moderation/invite-bonus.js +53 -0
- package/commands/moderation/kick.js +89 -0
- package/commands/moderation/lock.js +48 -0
- package/commands/moderation/mute.js +111 -0
- package/commands/moderation/slowmode.js +47 -0
- package/commands/moderation/unlock.js +48 -0
- package/commands/moderation/unmute.js +74 -0
- package/commands/moderation/warn.js +123 -0
- package/commands/moderation/warnings.js +58 -0
- package/commands/setup/config.js +1834 -0
- package/commands/setup/setup-antiraid.js +30 -0
- package/commands/setup/setup-autogame.js +158 -0
- package/commands/setup/setup-autoresponder.js +101 -0
- package/commands/setup/setup-autorole.js +35 -0
- package/commands/setup/setup-buttonroles.js +64 -0
- package/commands/setup/setup-level.js +38 -0
- package/commands/setup/setup-log.js +151 -0
- package/commands/setup/setup-private-room.js +122 -0
- package/commands/setup/setup-reactionrole.js +104 -0
- package/commands/setup/setup-shop.js +96 -0
- package/commands/setup/setup-spamfilter.js +29 -0
- package/commands/setup/setup-ticket.js +195 -0
- package/commands/setup/setup-verify.js +120 -0
- package/commands/setup/setup-voicelog.js +37 -0
- package/commands/setup/setup-welcome.js +88 -0
- package/commands/stats/global-leaderboard.js +86 -0
- package/commands/stats/invite-leaderboard.js +52 -0
- package/commands/stats/invite-stats.js +70 -0
- package/commands/stats/istatistik.js +559 -0
- package/commands/stats/leaderboard.js +53 -0
- package/commands/stats/level.js +113 -0
- package/commands/stats/message-stats.js +65 -0
- package/commands/stats/server-stats.js +50 -0
- package/commands/stats/voice-stats.js +74 -0
- package/config.js +123 -0
- package/database/db.js +3343 -0
- package/database/v2/.gitkeep +0 -0
- package/database/v2/global/authorized_users.json +97 -0
- package/database/v2/global/dm_tickets.json +20 -0
- package/docker-compose.yml +49 -0
- package/events/autoModerationActionExecution.js +52 -0
- package/events/autoModerationRuleCreate.js +37 -0
- package/events/autoModerationRuleDelete.js +29 -0
- package/events/channelCreate.js +74 -0
- package/events/channelDelete.js +66 -0
- package/events/channelUpdate.js +86 -0
- package/events/emojiCreate.js +72 -0
- package/events/emojiDelete.js +66 -0
- package/events/guildBanAdd.js +68 -0
- package/events/guildBanRemove.js +68 -0
- package/events/guildCreate.js +57 -0
- package/events/guildDelete.js +14 -0
- package/events/guildIntegrationsUpdate.js +29 -0
- package/events/guildMemberAdd.js +195 -0
- package/events/guildMemberRemove.js +108 -0
- package/events/guildMemberUpdate.js +185 -0
- package/events/guildScheduledEventCreate.js +46 -0
- package/events/guildScheduledEventDelete.js +29 -0
- package/events/guildScheduledEventUserAdd.js +33 -0
- package/events/guildScheduledEventUserRemove.js +33 -0
- package/events/interactionCreate.js +848 -0
- package/events/inviteCreate.js +74 -0
- package/events/inviteDelete.js +57 -0
- package/events/messageCreate.js +690 -0
- package/events/messageDelete.js +123 -0
- package/events/messageReactionAdd.js +83 -0
- package/events/messageReactionRemove.js +74 -0
- package/events/messageUpdate.js +74 -0
- package/events/presenceUpdate.js +17 -0
- package/events/ready.js +484 -0
- package/events/roleCreate.js +70 -0
- package/events/roleDelete.js +66 -0
- package/events/typingStart.js +21 -0
- package/events/voiceStateUpdate.js +103 -0
- package/events/webhooksUpdate.js +83 -0
- package/handlers/commandHandler.js +41 -0
- package/handlers/eventHandler.js +51 -0
- package/index.js +383 -0
- package/locales/README.md +42 -0
- package/locales/de.json +1330 -0
- package/locales/en.json +1535 -0
- package/locales/tr.json +1527 -0
- package/package.json +50 -4
- package/runner.js +111 -0
- package/systems/antiRaid.js +242 -0
- package/systems/autoGameSystem.js +215 -0
- package/systems/consoleRelay.js +122 -0
- package/systems/dmSupport.js +669 -0
- package/systems/earthquakeAlert.js +405 -0
- package/systems/economyEngine.js +1000 -0
- package/systems/embedComposer.js +247 -0
- package/systems/giveawaySystem.js +350 -0
- package/systems/inviteTracker.js +140 -0
- package/systems/legalTracker.js +103 -0
- package/systems/levelSystem.js +289 -0
- package/systems/ownerAlert.js +61 -0
- package/systems/privateRoomSystem.js +812 -0
- package/systems/serverStats.js +151 -0
- package/systems/spamFilter.js +254 -0
- package/systems/suggestionSystem.js +182 -0
- package/systems/supportServerSetup.js +490 -0
- package/systems/ticketSystem.js +982 -0
- package/systems/voiceTracker.js +384 -0
- package/systems/weeklyBulletin.js +155 -0
- package/systems/wordBomb.js +303 -0
- package/utils/asyncQueue.js +66 -0
- package/utils/canvasHelper.js +638 -0
- package/utils/configHandler.js +225 -0
- package/utils/containerHelper.js +248 -0
- package/utils/economyCanvas.js +306 -0
- package/utils/economyCommandHelper.js +57 -0
- package/utils/economyHandler.js +176 -0
- package/utils/embedBuilder.js +75 -0
- package/utils/helpHandler.js +113 -0
- package/utils/languageManager.js +290 -0
- package/utils/logger.js +257 -0
- package/utils/moderationChecks.js +54 -0
- package/utils/oauth2Helper.js +135 -0
- package/utils/profileHandler.js +165 -0
- package/utils/profileImage.js +178 -0
- package/utils/runtimeStatus.js +40 -0
- package/utils/textFix.js +26 -0
- package/utils/ticketForms.js +75 -0
- package/utils/ticketTranscript.js +282 -0
- package/utils/voiceStatsImage.js +165 -0
- package/utils/weekUtils.js +42 -0
- package/utils/welcomeImage.js +194 -0
package/.env.example
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# ============================================================================
|
|
2
|
+
# ZortleX Discord Bot - Environment Configuration
|
|
3
|
+
# ============================================================================
|
|
4
|
+
# Bu dosyayı kopyalayıp .env olarak kaydedin ve değerleri doldurun.
|
|
5
|
+
# .env dosyası asla GitHub'a yüklenmez (.gitignore korur).
|
|
6
|
+
|
|
7
|
+
# --- Discord Bot ---
|
|
8
|
+
BOT_TOKEN=MTExMTExMTExMTExMTExMTEx.Gxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
9
|
+
CLIENT_ID=111111111111111111
|
|
10
|
+
CLIENT_SECRET=your_client_secret_here
|
|
11
|
+
PREFIX=!
|
|
12
|
+
BOT_OWNER_ID=988166725608550411
|
|
13
|
+
REDIRECT_URI=http://localhost:8080/oauth/callback
|
|
14
|
+
|
|
15
|
+
# --- Sunucu / Hosting ---
|
|
16
|
+
PORT=8080
|
|
17
|
+
NODE_ENV=production
|
|
18
|
+
|
|
19
|
+
# --- Veritabanı (MySQL / MariaDB) ---
|
|
20
|
+
# Railway gibi platformlar için:
|
|
21
|
+
MYSQLHOST=mysql.railway.internal
|
|
22
|
+
MYSQLUSER=root
|
|
23
|
+
MYSQLPASSWORD=your_db_password
|
|
24
|
+
MYSQLDATABASE=railway
|
|
25
|
+
MYSQLPORT=3306
|
|
26
|
+
|
|
27
|
+
# Yerel / Standart (yedek):
|
|
28
|
+
DB_HOST=127.0.0.1
|
|
29
|
+
DB_USER=root
|
|
30
|
+
DB_PASS=
|
|
31
|
+
DB_NAME=zortlex
|
|
32
|
+
DB_PORT=3306
|
|
33
|
+
|
|
34
|
+
# --- Veritabanı Modu ---
|
|
35
|
+
# 'db' = MySQL, 'path' = Dosya sistemi (MySQL yoksa)
|
|
36
|
+
DB_MODE=path
|
|
37
|
+
SKIP_DB_INIT=true
|
|
38
|
+
|
|
39
|
+
# --- Gelişmiş ---
|
|
40
|
+
DB_SSL=false
|
|
41
|
+
DB_SSL_REJECT_UNAUTHORIZED=true
|
|
42
|
+
DB_QUERY_CONCURRENCY=12
|
|
43
|
+
DB_QUERY_MAX_PENDING=4000
|
|
44
|
+
|
|
45
|
+
# --- Bot Davranış ---
|
|
46
|
+
AUTO_DEPLOY_COMMANDS=true
|
|
47
|
+
DEPLOY_GUILD_IDS=
|
|
48
|
+
BOT_INTENTS=all
|
|
49
|
+
EXIT_ON_UNHANDLED_REJECTION=false
|
|
50
|
+
BOT_ENTRY=index.js
|
|
51
|
+
|
|
52
|
+
# --- Restart Ayarları (runner.js) ---
|
|
53
|
+
BOT_RESTART_WINDOW_MS=600000
|
|
54
|
+
BOT_MAX_RESTARTS=20
|
|
55
|
+
BOT_RESTART_DELAY_MS=2000
|
|
56
|
+
BOT_RESTART_MAX_DELAY_MS=60000
|
|
57
|
+
|
|
58
|
+
# --- Deprem Sistemi ---
|
|
59
|
+
EARTHQUAKE_POLL_MS=90000
|
|
60
|
+
EARTHQUAKE_CACHE_TTL_MS=60000
|
|
61
|
+
EARTHQUAKE_HTTP_TIMEOUT_MS=7000
|
|
62
|
+
EARTHQUAKE_INTERACTION_COOLDOWN_MS=2500
|
|
63
|
+
|
|
64
|
+
# --- Durum Dosyası ---
|
|
65
|
+
BOT_STATUS_FILE=runtime/bot-status.json
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# ============================================================================
|
|
2
|
+
# ZortleX Discord Bot - Dockerfile
|
|
3
|
+
# ============================================================================
|
|
4
|
+
FROM node:20-alpine
|
|
5
|
+
|
|
6
|
+
# Çalışma dizini
|
|
7
|
+
WORKDIR /app
|
|
8
|
+
|
|
9
|
+
# Sistem bağımlılıkları (canvas, native modüller için)
|
|
10
|
+
RUN apk add --no-cache \
|
|
11
|
+
python3 \
|
|
12
|
+
make \
|
|
13
|
+
g++ \
|
|
14
|
+
cairo-dev \
|
|
15
|
+
pango-dev \
|
|
16
|
+
libjpeg-turbo-dev \
|
|
17
|
+
giflib-dev \
|
|
18
|
+
pixman-dev \
|
|
19
|
+
libcairo2-dev \
|
|
20
|
+
&& rm -rf /var/cache/apk/*
|
|
21
|
+
|
|
22
|
+
# Package dosyalarını önce kopyala (cache için)
|
|
23
|
+
COPY package*.json ./
|
|
24
|
+
|
|
25
|
+
# Bağımlılıkları yükle
|
|
26
|
+
RUN npm ci --only=production --no-audit --no-fund
|
|
27
|
+
|
|
28
|
+
# Uygulama dosyalarını kopyala
|
|
29
|
+
COPY . .
|
|
30
|
+
|
|
31
|
+
# .env dosyası yoksa örnekten oluştur (runtime’da .env gerekli)
|
|
32
|
+
RUN if [ ! -f .env ]; then cp .env.example .env; fi
|
|
33
|
+
|
|
34
|
+
# Port (health check / OAuth2 callback)
|
|
35
|
+
EXPOSE 8080
|
|
36
|
+
|
|
37
|
+
# Botu başlat (runner.js otomatik restart ile)
|
|
38
|
+
CMD ["node", "runner.js"]
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Muhittin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,285 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ⚡ ZortleX Discord Bot
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://nodejs.org/)
|
|
4
|
+
[](https://discord.js.org/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://docker.com/)
|
|
7
|
+
[](SECURITY.md)
|
|
8
|
+
[](https://github.com/ysql-muhittin/Discord-Bot-ZortleX/security/dependabot)
|
|
9
|
+
|
|
10
|
+
Gelişmiş, modüler ve çok dilli Discord botu. Türkçe/İngilizce/Almanca dil desteği, veri tabanı (MySQL/MariaDB) ve dosya sistemi (path) modu, otomatik komut dağıtımı, crash korumalı runner ve OAuth2 destekli.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 🚀 Özellikler
|
|
15
|
+
|
|
16
|
+
| Özellik | Açıklama |
|
|
17
|
+
|---------|----------|
|
|
18
|
+
| 🔀 **Çok Dilli (i18n)** | Türkçe, İngilizce, Almanca, Fransızca dil desteği |
|
|
19
|
+
| ⚡ **Slash Komutları** | Discord.js v14 ile modern application commands |
|
|
20
|
+
| 🛡️ **Moderasyon** | Ban, kick, mute, warn, lock, slowmode, dm-reply |
|
|
21
|
+
| 🎫 **Ticket Sistemi** | Panel, kategori, transkript, yetkili roller |
|
|
22
|
+
| 💰 **Ekonomi** | Para, bank, günlük, çalışma, casco, envanter |
|
|
23
|
+
| 📊 **Seviye** | XP, seviye atlama, rollerle bonus |
|
|
24
|
+
| 🔊 **Ses Takibi** | Ses kanalı süresi, günlük/haftalık/aylık istatistik |
|
|
25
|
+
| 📨 **Davet Takibi** | Davetçi lider tablosu, bonus davet |
|
|
26
|
+
| 📅 **Giveaway** | Çekiliş oluşturma, bitirme, tekrar |
|
|
27
|
+
| 🎲 **Oyunlar** | Zar, yazı-tura, casino, kelime bomba, çizgi permainan |
|
|
28
|
+
| 🎟️ **Sahne / Özel Oda** | Özel ses odası sistemi |
|
|
29
|
+
| 🌍 **Deprem Uyarısı** | AFAD verilerine dayalı deprem bildirimi |
|
|
30
|
+
| 🔐 **OAuth2** | Discord ile web sitesi girişi, kullanıcı verisi kaydı |
|
|
31
|
+
| 🏓 **Health Check** | Railway/Render uyumlu HTTP sunucu (port 8080) |
|
|
32
|
+
| 🔄 **Otomatik Restart** | `runner.js` ile crash loop koruması |
|
|
33
|
+
| 🗄️ **Çift DB Modu** | MySQL/MariaDB veya dosya tabanlı (path) mod |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 📦 Hızlı Başlangıç
|
|
38
|
+
|
|
39
|
+
### 1. Klonla
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git clone https://github.com/KULLANICI_ADINIZ/Discord-Bot-ZortleX-main.git
|
|
43
|
+
cd Discord-Bot-ZortleX-main
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 2. Ortam Değişkenlerini Ayarlayın
|
|
47
|
+
|
|
48
|
+
`.env.example` dosyasını kopyalayıp `.env` oluşturun:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
cp .env.example .env
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Daha sonra `.env` dosyasını bir metin editörü ile açın ve şunları doldurun:
|
|
55
|
+
|
|
56
|
+
| Değişken | Açıklama |
|
|
57
|
+
|----------|----------|
|
|
58
|
+
| `BOT_TOKEN` | Discord Developer Portal'dan aldığınız bot tokeni |
|
|
59
|
+
| `CLIENT_ID` | Bot uygulama ID'si |
|
|
60
|
+
| `CLIENT_SECRET` | OAuth2 gizli anahtarı |
|
|
61
|
+
| `BOT_OWNER_ID` | Sahip Discord ID'niz |
|
|
62
|
+
| `PREFIX` | Mesaj komutu ön eki (varsayılan: `!`) |
|
|
63
|
+
| `MYSQLHOST` | MySQL/MariaDB sunucu adresi |
|
|
64
|
+
| `MYSQLUSER` | Veritabanı kullanıcısı |
|
|
65
|
+
| `MYSQLPASSWORD` | Veritabanı şifresi |
|
|
66
|
+
| `MYSQLDATABASE` | Veritabanı adı |
|
|
67
|
+
| `MYSQLPORT` | Veritabanı portu (varsayılan: `3306`) |
|
|
68
|
+
| `DB_MODE` | `db` (MySQL) veya `path` (dosya sistemi, MySQL yoksa) |
|
|
69
|
+
| `PORT` | Health check / OAuth2 portu (varsayılan: `8080`) |
|
|
70
|
+
|
|
71
|
+
> ⚠️ `.env` dosyası asla GitHub'a yüklenmez (`.gitignore` ile korunur).
|
|
72
|
+
|
|
73
|
+
## 🔒 Güvenlik
|
|
74
|
+
|
|
75
|
+
Güvenlik açığı bildirmek için [SECURITY.md](SECURITY.md) dosyasını okuyun veya security@zortlex.dev adresine e-posta gönderin.
|
|
76
|
+
|
|
77
|
+
### Temel Güvenlik Tavsiyeleri
|
|
78
|
+
|
|
79
|
+
| Öneri | Açıklama |
|
|
80
|
+
|-------|----------|
|
|
81
|
+
| `.env` koruyun | Bot token ve DB şifreleri asla paylaşılmamalıdır |
|
|
82
|
+
| `DB_SSL=true` | Uzak veritabanı bağlantıları için SSL etkinleştirin |
|
|
83
|
+
| `BOT_OWNER_ID` | Kendi Discord ID'nizi girin |
|
|
84
|
+
| `DB_PASS` | Güçlü veritabanı şifresi kullanın |
|
|
85
|
+
|
|
86
|
+
### Bağımlılık Güvenliği
|
|
87
|
+
|
|
88
|
+
Tüm npm paketleri düzenli olarak `npm audit` ile taranır. Mevcut durum: **0 güvenlik açığı**.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### 3. Bağımlılıkları Yükleyin
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm install
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 4. Botu Başlatın
|
|
99
|
+
|
|
100
|
+
**Geliştirme modu (doğrudan):**
|
|
101
|
+
```bash
|
|
102
|
+
npm run start:direct
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Üretim modu (crash korumalı runner ile):**
|
|
106
|
+
```bash
|
|
107
|
+
npm start
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Docker ile:**
|
|
111
|
+
```bash
|
|
112
|
+
docker-compose up -d --build
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 📁 Proje Yapısı
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
Discord-Bot-ZortleX-main/
|
|
121
|
+
├── .github/
|
|
122
|
+
│ └── workflows/
|
|
123
|
+
│ └── ci.yml # GitHub Actions CI
|
|
124
|
+
├── commands/ # Slash komutları
|
|
125
|
+
│ ├── economy/
|
|
126
|
+
│ ├── game/
|
|
127
|
+
│ ├── general/
|
|
128
|
+
│ ├── invite/
|
|
129
|
+
│ ├── moderation/
|
|
130
|
+
│ ├── setup/
|
|
131
|
+
│ └── stats/
|
|
132
|
+
├── database/
|
|
133
|
+
│ ├── db.js # MySQL + path hibrit DB katmanı
|
|
134
|
+
│ └── v2/ # Dosya tabanlı veriler
|
|
135
|
+
├── events/ # Discord gateway eventleri
|
|
136
|
+
├── handlers/ # Komut ve event yükleyicileri
|
|
137
|
+
├── locales/ # Çeviri dosyaları (tr, en, de, fr)
|
|
138
|
+
├── systems/ # Sistemler (ticket, ekonomi, invite, vb.)
|
|
139
|
+
├── utils/ # Yardımcı fonksiyonlar
|
|
140
|
+
├── .env.example # Ortam değişkeni örneği
|
|
141
|
+
├── .gitignore # Git'te yoksayılacak dosyalar
|
|
142
|
+
├── Dockerfile # Docker imajı
|
|
143
|
+
├── docker-compose.yml # Docker Compose (bot + MariaDB)
|
|
144
|
+
├── index.js # Ana giriş noktası
|
|
145
|
+
├── package.json # Bağımlılıklar
|
|
146
|
+
├── runner.js # Otomatik restart korumalı çalıştırıcı
|
|
147
|
+
└── LICENSE # Lisans dosyası
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 🤖 Komut Örnekleri
|
|
153
|
+
|
|
154
|
+
| Komut | Açıklama |
|
|
155
|
+
|-------|----------|
|
|
156
|
+
| `/gecikme` (`/ping`) | Bot gecikmesi ve bağlantı durumu |
|
|
157
|
+
| `/bot-bilgi` (`/botinfo`) | Bot hakkında detaylı bilgi |
|
|
158
|
+
| `/durum` | Ekosistem durumu (kilit, cihazlar) |
|
|
159
|
+
| `/kilit` | Ekranı kilitler |
|
|
160
|
+
| `/kilitac` | Ekran kilidini açar |
|
|
161
|
+
| `/gece` | Gece modu (ampul kapalı, kamera yatağa, kilit) |
|
|
162
|
+
| `/gunduz` | Gündüz modu (kilit aç, ampul açık) |
|
|
163
|
+
| `/kamera` | Kamerayı yatağa dön |
|
|
164
|
+
| `/priz on\|off` | Priz'i açar/kapatır |
|
|
165
|
+
| `/ampul on\|off` | Ampulü açar/kapatır |
|
|
166
|
+
|
|
167
|
+
> 💡 Tüm komutlar Türkçe/İngilizce/Almanca dil desteğine sahiptir.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 🐳 Docker ile Çalıştırma
|
|
172
|
+
|
|
173
|
+
### Sadece Bot (MySQL yoksa):
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
docker build -t zortlex-bot .
|
|
177
|
+
docker run -d --name zortlex-bot --env-file .env zortlex-bot
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Bot + MariaDB (Docker Compose):
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
docker-compose up -d --build
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Logları Görüntüle:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
docker logs -f zortlex-bot
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 🔧 Geliştirme
|
|
195
|
+
|
|
196
|
+
### Yeni Komut Eklemek
|
|
197
|
+
|
|
198
|
+
1. `commands/<kategori>/<komut-ismi>.js` dosyası oluşturun.
|
|
199
|
+
2. Aşağıdaki şablonu kullanın:
|
|
200
|
+
|
|
201
|
+
```javascript
|
|
202
|
+
const { SlashCommandBuilder, ContainerBuilder, MessageFlags } = require('discord.js');
|
|
203
|
+
|
|
204
|
+
module.exports = {
|
|
205
|
+
data: new SlashCommandBuilder()
|
|
206
|
+
.setName('komut-ismi')
|
|
207
|
+
.setDescription('Komut açıklaması')
|
|
208
|
+
.setDescriptionLocalizations({
|
|
209
|
+
'en-US': 'Command description',
|
|
210
|
+
'tr': 'Komut açıklaması'
|
|
211
|
+
}),
|
|
212
|
+
cooldown: 3,
|
|
213
|
+
async execute(interaction, client) {
|
|
214
|
+
await interaction.deferReply();
|
|
215
|
+
// Komut mantığı buraya
|
|
216
|
+
await interaction.editReply({ content: 'İşlem tamamlandı!', flags: MessageFlags.Ephemeral });
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
3. Bot otomatik olarak komutu yükleyecek ve Discord'a dağıtacaktır.
|
|
222
|
+
|
|
223
|
+
### Dil Eklemek
|
|
224
|
+
|
|
225
|
+
1. `locales/tr.json` dosyasını kopyalayıp `locales/fr.json` (veya başka bir dil) olarak kaydedin.
|
|
226
|
+
2. Çevirileri çevirin.
|
|
227
|
+
3. `languageManager.js`'deki `SUPPORTED_LANGUAGES` nesnesine ekleyin.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 🌍 Dağıtım (Deploy)
|
|
232
|
+
|
|
233
|
+
### Railway
|
|
234
|
+
|
|
235
|
+
1. [railway.app](https://railway.app) adresinden yeni proje oluşturun.
|
|
236
|
+
2. GitHub deposunu bağlayın.
|
|
237
|
+
3. Ortam değişkenlerini Railway arayüzünden ekleyin.
|
|
238
|
+
4. MySQL veritabanı ekleyin (Railway MySQL plugin).
|
|
239
|
+
5. `npm start` komutu ile başlatın.
|
|
240
|
+
|
|
241
|
+
### Render
|
|
242
|
+
|
|
243
|
+
1. [render.com](https://render.com) adresinden yeni Web Service oluşturun.
|
|
244
|
+
2. GitHub deposunu bağlayın.
|
|
245
|
+
3. Build komutu: `npm install`
|
|
246
|
+
4. Start komutu: `npm start`
|
|
247
|
+
5. Ortam değişkenlerini ekleyin.
|
|
248
|
+
|
|
249
|
+
### VPS / Linux Sunucu
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
git clone https://github.com/KULLANICI_ADINIZ/Discord-Bot-ZortleX-main.git
|
|
253
|
+
cd Discord-Bot-ZortleX-main
|
|
254
|
+
cp .env.example .env
|
|
255
|
+
nano .env # Token ve DB bilgilerini girin
|
|
256
|
+
npm install
|
|
257
|
+
npm start
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 📄 Lisans
|
|
263
|
+
|
|
264
|
+
Bu proje [ISC Lisansı](LICENSE) altında lisanslanmıştır.
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## 🤝 Katkıda Bulunma
|
|
269
|
+
|
|
270
|
+
1. Bu depoyu forklayın.
|
|
271
|
+
2. Yeni bir dal (branch) oluşturun: `git checkout -b feature/yenı-özellik`
|
|
272
|
+
3. Değişikliklerinizi yapın ve commit atın: `git commit -m "feat: yeni özellik eklendi"`
|
|
273
|
+
4. Dalınızı yükleyin: `git push origin feature/yenı-özellik`
|
|
274
|
+
5. Bir Pull Request açın.
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 📞 İletişim
|
|
279
|
+
|
|
280
|
+
- Destek Sunucusu: [discord.gg/zortlex](https://discord.gg/zortlex)
|
|
281
|
+
- Bot Davet Linki: `https://discord.com/oauth2/authorize?client_id=CLIENT_ID&permissions=8&scope=bot%20applications.commands`
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
⭐ Bu projeyi beğendiyseniz yıldız (star) vermeyi unutmayın!
|
package/baslat.bat
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal enabledelayedexpansion
|
|
3
|
+
cd /d "%~dp0"
|
|
4
|
+
title ZortleX Bot - ULTIMATE ENGINE (CORE v3.0)
|
|
5
|
+
|
|
6
|
+
:: 1. Yönetici Yetkisi Kontrolü ve Otomatik Yükseltme
|
|
7
|
+
:checkPrivileges
|
|
8
|
+
net file 1>nul 2>nul
|
|
9
|
+
if %errorlevel% neq 0 (
|
|
10
|
+
powershell -Command "Write-Host '[!] Yonetici yetkisi gerekiyor. Istek gonderiliyor...' -ForegroundColor Yellow"
|
|
11
|
+
powershell -Command "Start-Process -FilePath '%0' -Verb RunAs"
|
|
12
|
+
exit /b
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
:: 2. Optimizasyon Ayarları
|
|
16
|
+
set VERSION=3.0.0-CORE
|
|
17
|
+
set CRASH_COUNT=0
|
|
18
|
+
set START_TIME=%time%
|
|
19
|
+
|
|
20
|
+
:: Bellek Limitini Artır (Node.js için daha fazla RAM ayır)
|
|
21
|
+
set NODE_OPTIONS=--max-old-space-size=4096 --no-warnings
|
|
22
|
+
|
|
23
|
+
:: Pencere ve Kaydirma (Scroll) Ayarları - Artik yukari kaydirilabilir
|
|
24
|
+
powershell -Command "$p = $Host.UI.RawUI; $newSize = $p.BufferSize; $newSize.Height = 5000; $p.BufferSize = $newSize; $newWinSize = $p.WindowSize; $newWinSize.Height = 35; $p.WindowSize = $newWinSize"
|
|
25
|
+
cls
|
|
26
|
+
|
|
27
|
+
:header
|
|
28
|
+
powershell -Command "Write-Host '========================================================================================' -ForegroundColor Cyan"
|
|
29
|
+
powershell -Command "Write-Host ' ZortleX Discord Bot Engine - CORE ULTIMATE (ADMIN PRIVILEGED) ' -ForegroundColor Blue -BackgroundColor Black"
|
|
30
|
+
powershell -Command "Write-Host ' V: %VERSION% | RAM Max: 4GB | Yonetici: AKTIF | Sistem: %OS% ' -ForegroundColor White"
|
|
31
|
+
powershell -Command "Write-Host '========================================================================================' -ForegroundColor Cyan"
|
|
32
|
+
echo.
|
|
33
|
+
|
|
34
|
+
:: 3. Başlangıç Seçenekleri (İnteraktif Değil, Hızlı)
|
|
35
|
+
powershell -Command "Write-Host '[*] Motor Optimizasyonu Tamamlaniyor...' -ForegroundColor Gray"
|
|
36
|
+
|
|
37
|
+
:: Pid Kontrolü (Aynı anda birden fazla botun çalışmasını engeller - İsteğe bağlı olsa da güvenli)
|
|
38
|
+
tasklist /fi "windowtitle eq ZortleX Bot - ULTIMATE ENGINE (CORE v3.0)" /nh | findstr /i "cmd.exe" > nul
|
|
39
|
+
if %errorlevel% equ 0 (
|
|
40
|
+
set /a INSTANCE_COUNT+=1
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
:: 4. Kritik Dosya Kontrolü
|
|
44
|
+
if not exist ".env" (
|
|
45
|
+
powershell -Command "Write-Host '[KRITIK] .env dosyasi eksik! Sistem durduruldu.' -ForegroundColor DarkRed"
|
|
46
|
+
pause
|
|
47
|
+
exit /b
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
:: node_modules sadece yoksa kurulur (En hızlısı bu)
|
|
51
|
+
if not exist "node_modules\" (
|
|
52
|
+
powershell -Command "Write-Host '[!] Moduller yukleniyor...' -ForegroundColor Yellow"
|
|
53
|
+
call npm install --no-audit --no-fund --quiet
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
:: 5. Ana Çalışma Döngüsü (Yüksek Öncelikli)
|
|
57
|
+
:start
|
|
58
|
+
cls
|
|
59
|
+
powershell -Command "Write-Host '========================================================================================' -ForegroundColor Cyan"
|
|
60
|
+
powershell -Command "Write-Host ' ZortleX CORE » ENGINE AKTIF ' -ForegroundColor Green"
|
|
61
|
+
powershell -Command "Write-Host ' Crash: %CRASH_COUNT% | RAM Limit: 4096MB | Baslatma: %START_TIME% ' -ForegroundColor Gray"
|
|
62
|
+
powershell -Command "Write-Host '========================================================================================' -ForegroundColor Cyan"
|
|
63
|
+
echo.
|
|
64
|
+
|
|
65
|
+
powershell -Command "Write-Host '[RUN] Motor Atesleniyor...' -ForegroundColor White"
|
|
66
|
+
echo [%date% %time%] Core Engine Aktif Edildi.
|
|
67
|
+
|
|
68
|
+
:: Botu başlat
|
|
69
|
+
node index.js
|
|
70
|
+
|
|
71
|
+
:: Çökme Kontrolü
|
|
72
|
+
set /a CRASH_COUNT+=1
|
|
73
|
+
echo.
|
|
74
|
+
powershell -Command "Write-Host '[!] KRİTİK HATA: Sistem Durdu (Cokus: %CRASH_COUNT%)' -ForegroundColor Red -BackgroundColor Black"
|
|
75
|
+
|
|
76
|
+
if %CRASH_COUNT% gtr 20 (
|
|
77
|
+
powershell -Command "Write-Host '[DURDURULDU] Sistem cok fazla hata verdi. Manuel kontrol gerekiyor.' -ForegroundColor DarkRed"
|
|
78
|
+
pause
|
|
79
|
+
exit /b
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
powershell -Command "Write-Host '[YENIDEN] 2 saniye icinde motor tekrar ateslenecek...' -ForegroundColor Yellow"
|
|
83
|
+
timeout /t 2 >nul
|
|
84
|
+
goto start
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
const { SlashCommandBuilder, ContainerBuilder, MessageFlags } = require('discord.js');
|
|
2
|
+
const { lang } = require('../../utils/languageManager');
|
|
3
|
+
|
|
4
|
+
module.exports = {
|
|
5
|
+
data: new SlashCommandBuilder()
|
|
6
|
+
.setName('kara-liste')
|
|
7
|
+
.setNameLocalizations({ 'en-US': 'blacklist', 'tr': 'kara-liste', 'de': 'blacklist' })
|
|
8
|
+
.setDescription('Global kullanıcı kara listesini yönetir (Sadece Bot Sahibi).')
|
|
9
|
+
.setDescriptionLocalizations({ 'en-US': 'Manages the global user blacklist (Bot Owner Only).', 'tr': 'Global kullanıcı kara listesini yönetir (Sadece Bot Sahibi).', 'de': 'Verwaltet die globale Blacklist (Nur Bot-Besitzer).' })
|
|
10
|
+
.addSubcommand(sub =>
|
|
11
|
+
sub.setName('ekle')
|
|
12
|
+
.setNameLocalizations({ 'en-US': 'add', 'tr': 'ekle', 'de': 'hinzufuegen' })
|
|
13
|
+
.setDescription('Bir kullanıcıyı kara listeye ekler.')
|
|
14
|
+
.setDescriptionLocalizations({ 'en-US': 'Adds a user to the blacklist.', 'tr': 'Bir kullanıcıyı kara listeye ekler.', 'de': 'Fügt einen Benutzer zur Blacklist hinzu.' })
|
|
15
|
+
.addUserOption(opt => opt.setName('kullanici').setNameLocalizations({ 'en-US': 'user', 'tr': 'kullanici', 'de': 'benutzer' }).setDescription('Engellenecek kullanıcı').setDescriptionLocalizations({ 'en-US': 'User to be blocked', 'tr': 'Engellenecek kullanıcı', 'de': 'Zu blockierender Benutzer' }).setRequired(true))
|
|
16
|
+
.addStringOption(opt => opt.setName('neden').setNameLocalizations({ 'en-US': 'reason', 'tr': 'neden', 'de': 'grund' }).setDescription('Engelleme nedeni').setDescriptionLocalizations({ 'en-US': 'Block reason', 'tr': 'Engelleme nedeni', 'de': 'Grund der Blockierung' }).setRequired(true)))
|
|
17
|
+
.addSubcommand(sub =>
|
|
18
|
+
sub.setName('cikar')
|
|
19
|
+
.setNameLocalizations({ 'en-US': 'remove', 'tr': 'cikar', 'de': 'entfernen' })
|
|
20
|
+
.setDescription('Bir kullanıcıyı kara listeden çıkarır.')
|
|
21
|
+
.setDescriptionLocalizations({ 'en-US': 'Removes a user from the blacklist.', 'tr': 'Bir kullanıcıyı kara listeden çıkarır.', 'de': 'Entfernt einen Benutzer von der Blacklist.' })
|
|
22
|
+
.addStringOption(opt => opt.setName('id')
|
|
23
|
+
.setNameLocalizations({ 'en-US': 'id', 'tr': 'id', 'de': 'id' }).setDescription('Kullanıcı ID').setDescriptionLocalizations({ 'en-US': 'User ID', 'tr': 'Kullanıcı ID', 'de': 'Benutzer-ID' }).setRequired(true)))
|
|
24
|
+
.addSubcommand(sub =>
|
|
25
|
+
sub.setName('liste')
|
|
26
|
+
.setNameLocalizations({ 'en-US': 'list', 'tr': 'liste', 'de': 'liste' })
|
|
27
|
+
.setDescription('Kara listedeki kullanıcıları gösterir.')
|
|
28
|
+
.setDescriptionLocalizations({ 'en-US': 'Shows the blacklisted users.', 'tr': 'Kara listedeki kullanıcıları gösterir.', 'de': 'Zeigt die Benutzer auf der Blacklist an.' })),
|
|
29
|
+
|
|
30
|
+
async execute(interaction, client) {
|
|
31
|
+
const t = (k, p) => lang(interaction.guildId, k, p);
|
|
32
|
+
|
|
33
|
+
// Sadece bot sahibi kullanabilir
|
|
34
|
+
if (interaction.user.id !== client.config.bot.ownerId) {
|
|
35
|
+
return interaction.reply({ content: t('BLACKLIST.ERR_OWNER_ONLY'), flags: MessageFlags.Ephemeral });
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const sub = interaction.options.getSubcommand();
|
|
39
|
+
const db = client.db;
|
|
40
|
+
|
|
41
|
+
if (sub === 'ekle') {
|
|
42
|
+
const user = interaction.options.getUser('kullanici') || interaction.options.getUser('user');
|
|
43
|
+
const reason = interaction.options.getString('neden') || interaction.options.getString('reason');
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
await db.addBlacklist(user.id, reason, interaction.user.id);
|
|
47
|
+
|
|
48
|
+
const container = new ContainerBuilder()
|
|
49
|
+
.setAccentColor(0xED4245)
|
|
50
|
+
.addTextDisplayComponents(td => td.setContent(`## ${t('BLACKLIST.TITLE_ADDED')}`))
|
|
51
|
+
.addSeparatorComponents(sep => sep.setDivider(true))
|
|
52
|
+
.addTextDisplayComponents(td => td.setContent(t('BLACKLIST.DESC_ADDED', { tag: user.tag, id: user.id, reason })))
|
|
53
|
+
.addSeparatorComponents(sep => sep.setDivider(false))
|
|
54
|
+
.addTextDisplayComponents(td => td.setContent(`-# ZortleX Protection`));
|
|
55
|
+
|
|
56
|
+
await interaction.reply({ components: [container], flags: MessageFlags.IsComponentsV2 });
|
|
57
|
+
|
|
58
|
+
// Botun olduğu tüm sunuculardan banlamaya çalış
|
|
59
|
+
let banCount = 0;
|
|
60
|
+
for (const guild of client.guilds.cache.values()) {
|
|
61
|
+
const member = await guild.members.fetch(user.id).catch(() => null);
|
|
62
|
+
if (member && member.bannable) {
|
|
63
|
+
await member.ban({ reason: `ZortleX Global Blacklist: ${reason}` }).catch(() => { });
|
|
64
|
+
banCount++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (banCount > 0) {
|
|
69
|
+
await interaction.followUp({ content: t('BLACKLIST.BANNED_SERVERS', { count: banCount }), flags: MessageFlags.Ephemeral });
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
} catch (error) {
|
|
73
|
+
await interaction.reply({ content: t('BLACKLIST.ERR_ALREADY_EXISTS'), flags: MessageFlags.Ephemeral });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (sub === 'cikar') {
|
|
77
|
+
const userId = interaction.options.getString('id');
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
await db.removeBlacklist(userId);
|
|
81
|
+
await interaction.reply({ content: t('BLACKLIST.SUCCESS_REMOVED', { id: userId }), flags: MessageFlags.Ephemeral });
|
|
82
|
+
} catch (error) {
|
|
83
|
+
await interaction.reply({ content: t('BLACKLIST.ERR_NOT_FOUND'), flags: MessageFlags.Ephemeral });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (sub === 'liste') {
|
|
87
|
+
const rows = await db.getAllBlacklist(20);
|
|
88
|
+
|
|
89
|
+
if (rows.length === 0) {
|
|
90
|
+
return interaction.reply({ content: t('BLACKLIST.EMPTY_LIST'), flags: MessageFlags.Ephemeral });
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const list = rows.map(r => `\`${r.user_id}\` - ${r.reason} (<t:${Math.floor(new Date(r.created_at).getTime() / 1000)}:R>)`).join('\n');
|
|
94
|
+
|
|
95
|
+
const container = new ContainerBuilder()
|
|
96
|
+
.setAccentColor(0x000000)
|
|
97
|
+
.addTextDisplayComponents(td => td.setContent(`## ${t('BLACKLIST.TITLE_LIST')}`))
|
|
98
|
+
.addSeparatorComponents(sep => sep.setDivider(true))
|
|
99
|
+
.addTextDisplayComponents(td => td.setContent(list))
|
|
100
|
+
.addSeparatorComponents(sep => sep.setDivider(false))
|
|
101
|
+
.addTextDisplayComponents(td => td.setContent(`-# ZortleX Global Blacklist`));
|
|
102
|
+
|
|
103
|
+
await interaction.reply({ components: [container], flags: MessageFlags.IsComponentsV2 });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
};
|