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.
Files changed (172) hide show
  1. package/.env.example +65 -0
  2. package/Dockerfile +38 -0
  3. package/LICENSE +21 -0
  4. package/README.md +284 -2
  5. package/baslat.bat +84 -0
  6. package/commands/admin/kara-liste.js +106 -0
  7. package/commands/economy/balance.js +136 -0
  8. package/commands/economy/buy.js +97 -0
  9. package/commands/economy/crime.js +74 -0
  10. package/commands/economy/daily.js +54 -0
  11. package/commands/economy/deposit.js +64 -0
  12. package/commands/economy/eco-leaderboard.js +46 -0
  13. package/commands/economy/ekonomi.js +873 -0
  14. package/commands/economy/inventory.js +106 -0
  15. package/commands/economy/pay.js +93 -0
  16. package/commands/economy/rob.js +149 -0
  17. package/commands/economy/shop.js +127 -0
  18. package/commands/economy/withdraw.js +64 -0
  19. package/commands/economy/work.js +54 -0
  20. package/commands/game/casino.js +358 -0
  21. package/commands/game/cekilis.js +200 -0
  22. package/commands/game/yazi-tura.js +46 -0
  23. package/commands/game/zar-at.js +42 -0
  24. package/commands/general/anket.js +205 -0
  25. package/commands/general/avatar.js +98 -0
  26. package/commands/general/botinfo.js +136 -0
  27. package/commands/general/context-kullanici-bilgi.js +78 -0
  28. package/commands/general/context-mesaj-cevir.js +68 -0
  29. package/commands/general/context-mesaj-rapor.js +55 -0
  30. package/commands/general/embed-olustur.js +37 -0
  31. package/commands/general/help.js +159 -0
  32. package/commands/general/mesaj-ara.js +146 -0
  33. package/commands/general/oauth.js +50 -0
  34. package/commands/general/ping.js +91 -0
  35. package/commands/general/profile.js +163 -0
  36. package/commands/general/rol-al.js +78 -0
  37. package/commands/general/rol-ver.js +76 -0
  38. package/commands/general/serverinfo.js +153 -0
  39. package/commands/general/userinfo.js +196 -0
  40. package/commands/invite/bonus-invites.js +61 -0
  41. package/commands/invite/invite-leaderboard.js +51 -0
  42. package/commands/invite/invites.js +53 -0
  43. package/commands/moderation/ban.js +97 -0
  44. package/commands/moderation/clear.js +64 -0
  45. package/commands/moderation/dm-reply.js +105 -0
  46. package/commands/moderation/invite-bonus.js +53 -0
  47. package/commands/moderation/kick.js +89 -0
  48. package/commands/moderation/lock.js +48 -0
  49. package/commands/moderation/mute.js +111 -0
  50. package/commands/moderation/slowmode.js +47 -0
  51. package/commands/moderation/unlock.js +48 -0
  52. package/commands/moderation/unmute.js +74 -0
  53. package/commands/moderation/warn.js +123 -0
  54. package/commands/moderation/warnings.js +58 -0
  55. package/commands/setup/config.js +1834 -0
  56. package/commands/setup/setup-antiraid.js +30 -0
  57. package/commands/setup/setup-autogame.js +158 -0
  58. package/commands/setup/setup-autoresponder.js +101 -0
  59. package/commands/setup/setup-autorole.js +35 -0
  60. package/commands/setup/setup-buttonroles.js +64 -0
  61. package/commands/setup/setup-level.js +38 -0
  62. package/commands/setup/setup-log.js +151 -0
  63. package/commands/setup/setup-private-room.js +122 -0
  64. package/commands/setup/setup-reactionrole.js +104 -0
  65. package/commands/setup/setup-shop.js +96 -0
  66. package/commands/setup/setup-spamfilter.js +29 -0
  67. package/commands/setup/setup-ticket.js +195 -0
  68. package/commands/setup/setup-verify.js +120 -0
  69. package/commands/setup/setup-voicelog.js +37 -0
  70. package/commands/setup/setup-welcome.js +88 -0
  71. package/commands/stats/global-leaderboard.js +86 -0
  72. package/commands/stats/invite-leaderboard.js +52 -0
  73. package/commands/stats/invite-stats.js +70 -0
  74. package/commands/stats/istatistik.js +559 -0
  75. package/commands/stats/leaderboard.js +53 -0
  76. package/commands/stats/level.js +113 -0
  77. package/commands/stats/message-stats.js +65 -0
  78. package/commands/stats/server-stats.js +50 -0
  79. package/commands/stats/voice-stats.js +74 -0
  80. package/config.js +123 -0
  81. package/database/db.js +3343 -0
  82. package/database/v2/.gitkeep +0 -0
  83. package/database/v2/global/authorized_users.json +97 -0
  84. package/database/v2/global/dm_tickets.json +20 -0
  85. package/docker-compose.yml +49 -0
  86. package/events/autoModerationActionExecution.js +52 -0
  87. package/events/autoModerationRuleCreate.js +37 -0
  88. package/events/autoModerationRuleDelete.js +29 -0
  89. package/events/channelCreate.js +74 -0
  90. package/events/channelDelete.js +66 -0
  91. package/events/channelUpdate.js +86 -0
  92. package/events/emojiCreate.js +72 -0
  93. package/events/emojiDelete.js +66 -0
  94. package/events/guildBanAdd.js +68 -0
  95. package/events/guildBanRemove.js +68 -0
  96. package/events/guildCreate.js +57 -0
  97. package/events/guildDelete.js +14 -0
  98. package/events/guildIntegrationsUpdate.js +29 -0
  99. package/events/guildMemberAdd.js +195 -0
  100. package/events/guildMemberRemove.js +108 -0
  101. package/events/guildMemberUpdate.js +185 -0
  102. package/events/guildScheduledEventCreate.js +46 -0
  103. package/events/guildScheduledEventDelete.js +29 -0
  104. package/events/guildScheduledEventUserAdd.js +33 -0
  105. package/events/guildScheduledEventUserRemove.js +33 -0
  106. package/events/interactionCreate.js +848 -0
  107. package/events/inviteCreate.js +74 -0
  108. package/events/inviteDelete.js +57 -0
  109. package/events/messageCreate.js +690 -0
  110. package/events/messageDelete.js +123 -0
  111. package/events/messageReactionAdd.js +83 -0
  112. package/events/messageReactionRemove.js +74 -0
  113. package/events/messageUpdate.js +74 -0
  114. package/events/presenceUpdate.js +17 -0
  115. package/events/ready.js +484 -0
  116. package/events/roleCreate.js +70 -0
  117. package/events/roleDelete.js +66 -0
  118. package/events/typingStart.js +21 -0
  119. package/events/voiceStateUpdate.js +103 -0
  120. package/events/webhooksUpdate.js +83 -0
  121. package/handlers/commandHandler.js +41 -0
  122. package/handlers/eventHandler.js +51 -0
  123. package/index.js +383 -0
  124. package/locales/README.md +42 -0
  125. package/locales/de.json +1330 -0
  126. package/locales/en.json +1535 -0
  127. package/locales/tr.json +1527 -0
  128. package/package.json +50 -4
  129. package/runner.js +111 -0
  130. package/systems/antiRaid.js +242 -0
  131. package/systems/autoGameSystem.js +215 -0
  132. package/systems/consoleRelay.js +122 -0
  133. package/systems/dmSupport.js +669 -0
  134. package/systems/earthquakeAlert.js +405 -0
  135. package/systems/economyEngine.js +1000 -0
  136. package/systems/embedComposer.js +247 -0
  137. package/systems/giveawaySystem.js +350 -0
  138. package/systems/inviteTracker.js +140 -0
  139. package/systems/legalTracker.js +103 -0
  140. package/systems/levelSystem.js +289 -0
  141. package/systems/ownerAlert.js +61 -0
  142. package/systems/privateRoomSystem.js +812 -0
  143. package/systems/serverStats.js +151 -0
  144. package/systems/spamFilter.js +254 -0
  145. package/systems/suggestionSystem.js +182 -0
  146. package/systems/supportServerSetup.js +490 -0
  147. package/systems/ticketSystem.js +982 -0
  148. package/systems/voiceTracker.js +384 -0
  149. package/systems/weeklyBulletin.js +155 -0
  150. package/systems/wordBomb.js +303 -0
  151. package/utils/asyncQueue.js +66 -0
  152. package/utils/canvasHelper.js +638 -0
  153. package/utils/configHandler.js +225 -0
  154. package/utils/containerHelper.js +248 -0
  155. package/utils/economyCanvas.js +306 -0
  156. package/utils/economyCommandHelper.js +57 -0
  157. package/utils/economyHandler.js +176 -0
  158. package/utils/embedBuilder.js +75 -0
  159. package/utils/helpHandler.js +113 -0
  160. package/utils/languageManager.js +290 -0
  161. package/utils/logger.js +257 -0
  162. package/utils/moderationChecks.js +54 -0
  163. package/utils/oauth2Helper.js +135 -0
  164. package/utils/profileHandler.js +165 -0
  165. package/utils/profileImage.js +178 -0
  166. package/utils/runtimeStatus.js +40 -0
  167. package/utils/textFix.js +26 -0
  168. package/utils/ticketForms.js +75 -0
  169. package/utils/ticketTranscript.js +282 -0
  170. package/utils/voiceStatsImage.js +165 -0
  171. package/utils/weekUtils.js +42 -0
  172. 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
- # Temporary Holding Version
1
+ # ⚡ ZortleX Discord Bot
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![Node.js](https://img.shields.io/badge/Node.js-20+-green?logo=node.js)](https://nodejs.org/)
4
+ [![discord.js](https://img.shields.io/badge/discord.js-v14-blue?logo=discord)](https://discord.js.org/)
5
+ [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](LICENSE)
6
+ [![Docker](https://img.shields.io/badge/Docker-Ready-blue?logo=docker)](https://docker.com/)
7
+ [![Security](https://img.shields.io/badge/Security-Policy-blue?logo=shield)](SECURITY.md)
8
+ [![Vulnerabilities](https://img.shields.io/badge/vulnerabilities-0-green?logo=github)](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
+ };