├── LICENSE ├── kei.js ├── package.json └── src ├── commands ├── Backup.js ├── Eval.js └── Safe.js ├── configs └── config.json ├── events ├── RoleCreateGuard.js ├── RoleDeleteGuard.js ├── RoleUpdateGuard.js ├── commandHandler.js ├── functions.js └── ready.js ├── handlers ├── commandHandler.js ├── eventHandler.js └── mongoHandler.js └── schemas └── Database.js /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 keixyz 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. 22 | -------------------------------------------------------------------------------- /kei.js: -------------------------------------------------------------------------------- 1 | const { Client, Collection } = require("discord.js"); 2 | const Discord = require("discord.js"); 3 | const client = (global.client = new Client({ fetchAllMembers: true })); 4 | const request = require("request"); 5 | const logs = require('discord-logs'); 6 | logs(client); 7 | const cfg = require("./src/configs/config.json"); 8 | const moment = require("moment"); 9 | const mongo = require("mongoose"); 10 | require("moment-duration-format") 11 | client.commands = global.commands = new Collection(); 12 | client.aliases = new Collection(); 13 | client.cooldown = new Map(); 14 | 15 | require("./src/handlers/commandHandler"); 16 | require("./src/handlers/eventHandler"); 17 | require("./src/handlers/mongoHandler"); 18 | require("./src/events/functions.js")(client, cfg, moment, Discord, request); 19 | 20 | let Tokens = cfg.Bot.DestekçiToken; 21 | let danger = false; 22 | const Bots = global.Bots = []; 23 | 24 | Tokens.forEach(token => { 25 | let bot = new Client(); 26 | bot.on("ready", () => { 27 | console.log(`(${bot.user.username}) adlı destekçi hesapta [${bot.guilds.cache.get(cfg.Server.GuildID).name}] adlı sunucuda giriş yapıldı.`); 28 | bot.user.setPresence({ activity: { name: cfg.Bot.DestekçiDurum }, status: cfg.Bot.DestekçiStatus}); 29 | bot.Busy = false; 30 | bot.Uj = 0; 31 | Bots.push(bot);}) 32 | bot.login(token).then(e => {}).catch(e => {console.error(`${token.substring(Math.floor(token.length / 2))} adlı bota giriş yapılırken başarısız olundu!.`)})}) 33 | 34 | client.login(cfg.Bot.Token).catch(err => console.error("Bota giriş yapılırken başarısız olundu!")); 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.0.1", 3 | "main": "kei.js", 4 | "scripts": { 5 | "start": "node kei.js" 6 | }, 7 | "dependencies": { 8 | "discord.js": "^12.2.0", 9 | "moment": "^2.29.1", 10 | "ms": "^2.1.3", 11 | "moment-duration-format": "^2.3.2", 12 | "humanize-duration": "^3.25.1", 13 | "mongoose": "^5.11.20", 14 | "discord-logs": "^1.9.0", 15 | "request": "^2.88.2" 16 | }, 17 | "engines": { 18 | "node": "12.x" 19 | } 20 | } -------------------------------------------------------------------------------- /src/commands/Backup.js: -------------------------------------------------------------------------------- 1 | const moment = require("moment"); 2 | module.exports = { 3 | conf: { 4 | aliases: ["kur","rolebackup","kurulum"], 5 | name: "backup", 6 | serverowner: true 7 | }, 8 | 9 | run: async ({client, msg, args, guild, cfg, fs, prefix}) => { 10 | 11 | const Database = require("../schemas/Backup.js"); 12 | const channelDatabase = require("../schemas/ChannelBackup.js"); 13 | const dataa = await Database.findOne({ guildID: guild}); 14 | let dataxd = await Database.findOne({Id: args[0]}) 15 | if(!dataa) return client.timemessage(client.normalEmbed(`Veritabanında rol verisi bulunamadı.`, msg), msg.channel.id, 10000) 16 | if (!args[0] || isNaN(args[0])) return client.timemessage(client.normalEmbed(`Lütfen tüm argümanları doğru giriniz!\nÖrnek Kullanım: ${prefix}backup {rol}`, msg), msg.channel.id, 10000); 17 | client.timemessage(client.normalEmbed(`Başarıyla rolü yeniden kurdunuz.`, msg), msg.channel.id, 10000) 18 | let newRole = await msg.guild.roles.create({data: {name: dataxd.name,color: dataxd.color,hoist: dataxd.hoist,permissions: dataxd.permissions,position: dataxd.position,mentionable: dataxd.mentionable},reason: "Backup atıldı."}) 19 | let data = await Database.findOneAndUpdate({Id: args[0]}, {$set: {Id: newRole.id}}).exec(); 20 | if(!data) return client.timemessage(client.normalEmbed(`\`${data.name}\` (\`${data.id}\`) rolünde veri olmadığı için işlem iptal edildi.`, msg), msg.channel.id, 10000) 21 | await channelDatabase.findOneAndUpdate({roleID: args[0]}, {$set: {roleID: newRole.id}}).exec(); 22 | channelDatabase.findOne({guildID: msg.guild.id, roleID: newRole.id}, async (err, cData) => { 23 | if (!cData) return; 24 | setTimeout(() => { 25 | let kanalPermVeri = cData.channelOverwrites; 26 | if (kanalPermVeri) kanalPermVeri.forEach((perm, index) => { 27 | let kanal = msg.guild.channels.cache.get(perm.id); 28 | if (!kanal) return; 29 | setTimeout(() => { 30 | let yeniKanalPermVeri = {}; 31 | perm.allow.forEach(p => { 32 | yeniKanalPermVeri[p] = true;}); 33 | perm.deny.forEach(p => { 34 | yeniKanalPermVeri[p] = false;}); 35 | kanal.createOverwrite(newRole, yeniKanalPermVeri).catch(console.error); 36 | }, index*5000)}) 37 | }, 5000)}) 38 | let length = data.Members.length; 39 | if(length <= 0) return console.log(`[${args[0]}] Olayında kayıtlı üye olmadığından dolayı rol dağıtımı gerçekleştirmedim.`); 40 | let availableBots = Bots.filter(e => !e.Busy); 41 | if(availableBots.length <= 0) availableBots = Bots.sort((x,y) => y.Uj - x.Uj).slice(0, Math.round(length / Bots.length)); 42 | let perAnyBotMembers = Math.floor(length / availableBots.length); 43 | if(perAnyBotMembers < 1) perAnyBotMembers = 1; 44 | for (let index = 0; index < availableBots.length; index++) { 45 | const bot = availableBots[index]; 46 | client.processBot(bot, true, perAnyBotMembers); 47 | let ids = data.Members.slice(index * perAnyBotMembers, (index + 1) * perAnyBotMembers); 48 | if(ids.length <= 0) {client.processBot(bot, false, -perAnyBotMembers); break;} 49 | let guild = bot.guilds.cache.first(); 50 | ids.every(async id => { 51 | let member = guild.member(id); 52 | if(!member){ 53 | console.log(`[${args[0]}] Olayından sonra ${bot.user.username} - ${id} adlı üyeyi sunucuda bulamadım.`); 54 | return true;} 55 | await member.roles.add(newRole.id).then(e => {console.log(`[${args[0]}] Olayından sonra ${bot.user.tag} - ${member.user.username} adlı üye ${newRole.name} rolünü aldı.`);}).catch(e => {console.log(`[${newRole.id}] Olayından sonra ${bot.user.username} - ${member.user.username} adlı üyeye rol veremedim.`);});}); 56 | client.processBot(bot, false, -perAnyBotMembers);}}} -------------------------------------------------------------------------------- /src/commands/Eval.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | conf: { 3 | aliases: ["databaseval"], 4 | name: "databaseeval", 5 | owner: true, 6 | usage: 'backupeval [kod]', 7 | description: 'Kod denemek için kullanılan komut.', 8 | }, 9 | 10 | run: async ({client, msg, args}) => { 11 | 12 | if (!args[0]) return; 13 | let code = args.join(" "); 14 | function clean(text) { 15 | if (typeof text !== 'string') text = require('util').inspect(text, { depth: 0 }) 16 | text = text.replace(/`/g, '`' + String.fromCharCode(8203)).replace(/@/g, '@' + String.fromCharCode(8203)) 17 | return text;}; 18 | try {var evaled = clean(await eval(code)); 19 | if(evaled.match(new RegExp(`${client.token}`, 'g'))) evaled.replace("token", "Yasaklı komut").replace(client.token, "Yasaklı komut"); 20 | msg.channel.send(`${evaled.replace(client.token, "Yasaklı komut")}`, {code: "js", split: true});} catch(err) { msg.channel.send(err, {code: "js", split: true}) };}} -------------------------------------------------------------------------------- /src/commands/Safe.js: -------------------------------------------------------------------------------- 1 | const moment = require("moment"); 2 | module.exports = { 3 | conf: { 4 | aliases: ["backupsafe","backupwhite","backupwhitelist","databasesafe","databasegüvenli","databasewhite","databasewhitelist"], 5 | name: "backupgüvenli", 6 | serverowner: true 7 | }, 8 | 9 | run: async ({client, msg, args, guild, Database, uye, cfg, fs, prefix}) => { 10 | 11 | let seçenek = args[0] 12 | const data = await Database.findOne({ guildID: guild}); 13 | if(seçenek == "list" || seçenek == "liste"){client.message(client.normalEmbed(`Backup Safe List: ${data && data.Safe ? `${data.Safe.map((x ,i) => `<@!${x}>`).join(',')}`: '**Veritabanında güvenli üye bulunamadı.**'}`, msg), msg.channel.id)} 14 | if(!(seçenek == "list" || seçenek == "liste")){ 15 | if (!uye) return client.timemessage(client.normalEmbed(`Lütfen tüm argümanları doğru giriniz!\nÖrnek Kullanım: ${prefix}safe {user}`, msg), msg.channel.id, 5000) 16 | if (!data) {client.message(client.normalEmbed(`${uye} üyesi başarıyla güvenli veritabanına eklendi!`, msg), msg.channel.id);new Database({guildID: msg.guild.id, Safe: uye.id}).save();} else { 17 | let Safe = data.Safe; 18 | if(Safe.includes(uye.id)) {client.message(client.normalEmbed(`${uye} üyesi başarıyla güvenli veritabanından çıkarıldı!`, msg), msg.channel.id);Safe.remove(uye.id);data.save();return}client.message(client.normalEmbed(`${uye} üyesi başarıyla güvenli veritabanına eklendi!`, msg), msg.channel.id); Safe.push(uye.id);data.save();}}}} -------------------------------------------------------------------------------- /src/configs/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "Bot": { 3 | "Token": "", 4 | "DestekçiToken": [], 5 | "MongoURL": "", 6 | "Durum": "Coded by kei", 7 | "Status": "", 8 | "DestekçiDurum": "Coded by kei", 9 | "DestekçiStatus": "", 10 | "Owners": ["209631461865816064"], 11 | "Prefix": [] 12 | }, 13 | 14 | "Server": { 15 | "GuildID": "" 16 | }, 17 | 18 | "Channels":{ 19 | "VoiceChannelID": "" 20 | }, 21 | 22 | "Roles":{ 23 | "Booster": "", 24 | "Jail": "", 25 | "YetkiKapatılmayacakRoller": [] 26 | }, 27 | 28 | "Webhook": { 29 | "LogWebhook": { 30 | "ID": "", 31 | "Token": "" 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/events/RoleCreateGuard.js: -------------------------------------------------------------------------------- 1 | const client = global.client; 2 | const cfg = require("../configs/config.json"); 3 | const moment = require("moment"); 4 | const Database = require("../schemas/Database"); 5 | 6 | module.exports = async role => { 7 | 8 | const data = await Database.findOne({ guildID: cfg.Server.GuildID}); 9 | let Tarih = `${moment(Date.now()).format("DD")} ${moment(Date.now()).format("MM").replace(/01/, 'Ocak').replace(/02/, 'Şubat').replace(/03/, 'Mart').replace(/04/, 'Nisan').replace(/05/, 'Mayıs').replace(/06/, 'Haziran').replace(/07/, 'Temmuz').replace(/08/, 'Ağustos').replace(/09/, 'Eylül').replace(/10/, 'Ekim').replace(/11/, 'Kasım').replace(/12/, 'Aralık')} ${moment(Date.now()).format("YYYY")} ${moment(Date.now()).format("HH:mm")}` 10 | const entry = await client.guilds.cache.get(cfg.Server.GuildID).fetchAuditLogs({type: 'ROLE_CREATE'}).then(audit => audit.entries.first()) 11 | if (!entry || !entry.executor || Date.now()-entry.createdTimestamp > 5000 || safe(entry.executor.id)) return; 12 | client.punish(entry.executor.id, "Forbidden") 13 | client.deleteRole(role) 14 | closeAllPermsRoles() 15 | client.logSend(`${entry.executor} üyesi **rol açtı** ve rolü silip, rolü açan kişiyi banladım.\n\n\`⦁\` Rol: \`${role.name}\` (\`${role.id}\`)\n\`⦁\` Yetkili: ${entry.executor} (\`${entry.executor.tag.replace("`", "")}\` - \`${entry.executor.id}\`)\n\n\`-\` Tarih: \`${Tarih}\``) 16 | 17 | function safe(userID) { 18 | let user = client.guilds.cache.get(cfg.Server.GuildID).members.cache.get(userID); 19 | let Owner = cfg.Bot.Owners || []; 20 | if (!user || user.id === client.user.id || Owner.some(g => user.id === g) || user.id === user.guild.owner.id || (data && data.Safe.includes(user.id))) return true 21 | else return false} 22 | 23 | function closeAllPermsRoles() { 24 | let guild = client.guilds.cache.get(cfg.Server.GuildID); 25 | let role = guild.roles.cache.filter(role => role.managed && role.position < guild.me.roles.highest.position && role.permissions.has("MANAGE_GUILD") || role.permissions.has("BAN_MEMBERS") || role.permissions.has("MANAGE_ROLES") || role.permissions.has("MANAGE_WEBHOOKS") || role.permissions.has("MANAGE_NICKNAMES") || role.permissions.has("MANAGE_CHANNELS") || role.permissions.has("KICK_MEMBERS") || role.permissions.has("ADMINISTRATOR")) 26 | let roles = guild.roles.cache.filter(role => role.managed && role.position < guild.me.roles.highest.position && role.permissions.has("MANAGE_GUILD") || role.permissions.has("BAN_MEMBERS") || role.permissions.has("MANAGE_ROLES") || role.permissions.has("MANAGE_WEBHOOKS") || role.permissions.has("MANAGE_NICKNAMES") || role.permissions.has("MANAGE_CHANNELS") || role.permissions.has("KICK_MEMBERS") || role.permissions.has("ADMINISTRATOR")).forEach(async r => { 27 | if(cfg.Roles.YetkiKapatılmayacakRoller.some(x => r.id === x)) return 28 | await r.setPermissions(0).catch(() => { })}); 29 | 30 | role.forEach(role => { 31 | if(role.permissions.has("ADMINISTRATOR")){ 32 | if(cfg.Roles.YetkiKapatılmayacakRoller.some(x => role.id === x)) return 33 | role.members.filter(e => e.manageable).forEach(member => { 34 | if(safe(member.id)) return; 35 | if(member.roles.highest.position < guild.me.roles.highest.position) member.roles.remove(role).catch(() => { })})}})}} 36 | 37 | module.exports.conf = { 38 | name: "roleCreate", 39 | }; -------------------------------------------------------------------------------- /src/events/RoleDeleteGuard.js: -------------------------------------------------------------------------------- 1 | const client = global.client; 2 | const cfg = require("../configs/config.json"); 3 | const moment = require("moment"); 4 | const Database = require("../schemas/Database"); 5 | 6 | module.exports = async role => { 7 | 8 | const roleDatabase = require("../schemas/Backup.js"); 9 | const Channel = require("../schemas/ChannelBackup.js"); 10 | 11 | const data = await Database.findOne({ guildID: cfg.Server.GuildID}); 12 | let Tarih = `${moment(Date.now()).format("DD")} ${moment(Date.now()).format("MM").replace(/01/, 'Ocak').replace(/02/, 'Şubat').replace(/03/, 'Mart').replace(/04/, 'Nisan').replace(/05/, 'Mayıs').replace(/06/, 'Haziran').replace(/07/, 'Temmuz').replace(/08/, 'Ağustos').replace(/09/, 'Eylül').replace(/10/, 'Ekim').replace(/11/, 'Kasım').replace(/12/, 'Aralık')} ${moment(Date.now()).format("YYYY")} ${moment(Date.now()).format("HH:mm")}` 13 | const entry = await client.guilds.cache.get(cfg.Server.GuildID).fetchAuditLogs({type: 'ROLE_DELETE'}).then(audit => audit.entries.first()) 14 | if (!entry || !entry.executor || Date.now()-entry.createdTimestamp > 5000 || safe(entry.executor.id)) return; 15 | client.punish(entry.executor.id, "Forbidden") 16 | closeAllPermsRoles() 17 | let newRole = await role.guild.roles.create({data:{color: role.color,hoist: role.hoist,mentionable: role.mentionable,name: role.name,permissions: role.permissions,position: role.rawPosition}}).catch(() => { }) 18 | client.logSend(`${entry.executor} üyesi **rol sildi** ve rolü tekrar açıp, kanal izinlerini tekrar ayarlayıp, rolü üyelerine geri dağıttım ve rolü silen kişiyi banladım.\n\n\`⦁\` Rol: \`${role.name}\` (\`${role.id}\`)\n\`⦁\` Yetkili: ${entry.executor} (\`${entry.executor.tag.replace("`", "")}\` - \`${entry.executor.id}\`)\n\n\`-\` Tarih: \`${Tarih}\``) 19 | let rolemembersdata = await roleDatabase.findOneAndUpdate({Id: role.id}, {$set: {Id: newRole.id}}).exec(); 20 | if(!rolemembersdata) return console.log(`Veritabanında ${role.name} (${role.id}) rolüne ait veri bulunmadığı için rol dağıtma işlemi iptal edildi.`) 21 | await Channel.findOneAndUpdate({roleID: role.id}, {$set: {roleID: newRole.id}}).exec(); 22 | Channel.findOne({guildID: role.guild.id, roleID: newRole.id}, async (err, cData) => { 23 | if (!cData) return; 24 | setTimeout(() => { 25 | let kanalPermVeri = cData.channelOverwrites; 26 | if (kanalPermVeri) kanalPermVeri.forEach((perm, index) => { 27 | let kanal = role.guild.channels.cache.get(perm.id); 28 | if (!kanal) return; 29 | setTimeout(() => { 30 | let yeniKanalPermVeri = {}; 31 | perm.allow.forEach(p => { 32 | yeniKanalPermVeri[p] = true;}); 33 | perm.deny.forEach(p => { 34 | yeniKanalPermVeri[p] = false;}); 35 | kanal.createOverwrite(newRole, yeniKanalPermVeri).catch(console.error); 36 | }, index*5000)}) 37 | }, 5000)}) 38 | let length = rolemembersdata.Members.length; 39 | if(length <= 0) return console.log(`${role.name} (${role.id}) Olayında kayıtlı üye olmadığından dolayı rol dağıtımı gerçekleştirmedim.`); 40 | let availableBots = global.Bots.filter(e => !e.Busy); 41 | if(availableBots.length <= 0) availableBots = global.Bots.sort((x,y) => y.Uj - x.Uj).slice(0, Math.round(length / global.Bots.length)); 42 | let perAnyBotMembers = Math.floor(length / availableBots.length); 43 | if(perAnyBotMembers < 1) perAnyBotMembers = 1; 44 | for (let index = 0; index < availableBots.length; index++) { 45 | const bot = availableBots[index]; 46 | if(newRole.deleted){ 47 | console.log(`${role.name} (${role.id}) Olayından sonra ${bot.user.username} - rol tekrar silindi, döngü kırılıyor.`); 48 | break; 49 | } 50 | client.processBot(bot, true, perAnyBotMembers); 51 | let ids = rolemembersdata.Members.slice(index * perAnyBotMembers, (index + 1) * perAnyBotMembers); 52 | if(ids.length <= 0) {client.processBot(bot, false, -perAnyBotMembers); break;} 53 | let guild = bot.guilds.cache.first(); 54 | ids.every(async id => { 55 | if(newRole.deleted){ 56 | client.processBot(bot, false, -perAnyBotMembers); 57 | console.log(`${role.name} (${role.id}) Olayından sonra ${bot.user.username} - rol tekrar silindi, döngü kırılıyor. #2`); 58 | return false;} 59 | let member = guild.member(id); 60 | if(!member){ 61 | console.log(`${role.name} (${role.id}) Olayından sonra ${bot.user.username} - ${id} adlı üyeyi sunucuda bulamadım.`); 62 | return true;} 63 | await member.roles.add(newRole.id).then(e => {console.log(`${role.name} (${role.id}) Olayından sonra ${bot.user.tag} - ${member.user.username} adlı üye ${newRole.name} rolünü aldı.`);}).catch(e => {console.log(`${role.name} (${role.id}) Olayından sonra ${bot.user.username} - ${member.user.username} adlı üyeye rol veremedim.`);});}); 64 | client.processBot(bot, false, -perAnyBotMembers);} 65 | 66 | function safe(userID) { 67 | let user = client.guilds.cache.get(cfg.Server.GuildID).members.cache.get(userID); 68 | let Owner = cfg.Bot.Owners || []; 69 | if (!user || user.id === client.user.id /*|| Owner.some(g => user.id === g) */|| user.id === user.guild.owner.id || (data && data.Safe.includes(user.id))) return true 70 | else return false} 71 | 72 | function closeAllPermsRoles() { 73 | let guild = client.guilds.cache.get(cfg.Server.GuildID); 74 | let role = guild.roles.cache.filter(role => role.managed && role.position < guild.me.roles.highest.position && role.permissions.has("MANAGE_GUILD") || role.permissions.has("BAN_MEMBERS") || role.permissions.has("MANAGE_ROLES") || role.permissions.has("MANAGE_WEBHOOKS") || role.permissions.has("MANAGE_NICKNAMES") || role.permissions.has("MANAGE_CHANNELS") || role.permissions.has("KICK_MEMBERS") || role.permissions.has("ADMINISTRATOR")) 75 | let roles = guild.roles.cache.filter(role => role.managed && role.position < guild.me.roles.highest.position && role.permissions.has("MANAGE_GUILD") || role.permissions.has("BAN_MEMBERS") || role.permissions.has("MANAGE_ROLES") || role.permissions.has("MANAGE_WEBHOOKS") || role.permissions.has("MANAGE_NICKNAMES") || role.permissions.has("MANAGE_CHANNELS") || role.permissions.has("KICK_MEMBERS") || role.permissions.has("ADMINISTRATOR")).forEach(async r => { 76 | if(cfg.Roles.YetkiKapatılmayacakRoller.some(x => r.id === x)) return 77 | await r.setPermissions(0).catch(() => { })}) 78 | 79 | role.forEach(role => { 80 | if(role.permissions.has("ADMINISTRATOR")){ 81 | if(cfg.Roles.YetkiKapatılmayacakRoller.some(x => role.id === x)) return 82 | role.members.filter(e => e.manageable).forEach(member => { 83 | if(safe(member.id)) return; 84 | if(member.roles.highest.position < guild.me.roles.highest.position) member.roles.remove(role).catch(() => { })})}})}} 85 | 86 | module.exports.conf = { 87 | name: "roleDelete", 88 | }; -------------------------------------------------------------------------------- /src/events/RoleUpdateGuard.js: -------------------------------------------------------------------------------- 1 | const client = global.client; 2 | const cfg = require("../configs/config.json"); 3 | const moment = require("moment"); 4 | const Database = require("../schemas/Database"); 5 | 6 | module.exports = async (oldRole, newRole) => { 7 | 8 | const data = await Database.findOne({ guildID: cfg.Server.GuildID}); 9 | let Tarih = `${moment(Date.now()).format("DD")} ${moment(Date.now()).format("MM").replace(/01/, 'Ocak').replace(/02/, 'Şubat').replace(/03/, 'Mart').replace(/04/, 'Nisan').replace(/05/, 'Mayıs').replace(/06/, 'Haziran').replace(/07/, 'Temmuz').replace(/08/, 'Ağustos').replace(/09/, 'Eylül').replace(/10/, 'Ekim').replace(/11/, 'Kasım').replace(/12/, 'Aralık')} ${moment(Date.now()).format("YYYY")} ${moment(Date.now()).format("HH:mm")}` 10 | const entry = await client.guilds.cache.get(cfg.Server.GuildID).fetchAuditLogs({type: 'ROLE_UPDATE'}).then(audit => audit.entries.first()) 11 | if (!entry || !entry.executor || Date.now()-entry.createdTimestamp > 5000 || safe(entry.executor.id)) return; 12 | client.punish(entry.executor.id, "Forbidden") 13 | client.setRole(oldRole, newRole) 14 | closeAllPermsRoles() 15 | client.logSend(`${entry.executor} üyesi **rol güncelledi** ve rolü eski haline getirip, rolü güncelleyen kişiyi banladım.\n\n\`⦁\` Rol: <@&${oldRole.id}> (\`${oldRole.name}\` - \`${oldRole.id}\`)\n\`⦁\` Yetkili: ${entry.executor} (\`${entry.executor.tag.replace("`", "")}\` - \`${entry.executor.id}\`)\n\n\`-\` Tarih: \`${Tarih}\``) 16 | 17 | function safe(userID) { 18 | let user = client.guilds.cache.get(cfg.Server.GuildID).members.cache.get(userID); 19 | let Owner = cfg.Bot.Owners || []; 20 | if (!user || user.id === client.user.id || Owner.some(g => user.id === g) || user.id === user.guild.owner.id || (data && data.Safe.includes(user.id))) return true 21 | else return false} 22 | 23 | function closeAllPermsRoles() { 24 | let guild = client.guilds.cache.get(cfg.Server.GuildID); 25 | let role = guild.roles.cache.filter(role => role.managed && role.position < guild.me.roles.highest.position && role.permissions.has("MANAGE_GUILD") || role.permissions.has("BAN_MEMBERS") || role.permissions.has("MANAGE_ROLES") || role.permissions.has("MANAGE_WEBHOOKS") || role.permissions.has("MANAGE_NICKNAMES") || role.permissions.has("MANAGE_CHANNELS") || role.permissions.has("KICK_MEMBERS") || role.permissions.has("ADMINISTRATOR")) 26 | let roles = guild.roles.cache.filter(role => role.managed && role.position < guild.me.roles.highest.position && role.permissions.has("MANAGE_GUILD") || role.permissions.has("BAN_MEMBERS") || role.permissions.has("MANAGE_ROLES") || role.permissions.has("MANAGE_WEBHOOKS") || role.permissions.has("MANAGE_NICKNAMES") || role.permissions.has("MANAGE_CHANNELS") || role.permissions.has("KICK_MEMBERS") || role.permissions.has("ADMINISTRATOR")).forEach(async r => { 27 | if(cfg.Roles.YetkiKapatılmayacakRoller.some(x => r.id === x)) return 28 | await r.setPermissions(0).catch(() => { })}); 29 | 30 | role.forEach(role => { 31 | if(role.permissions.has("ADMINISTRATOR")){ 32 | if(cfg.Roles.YetkiKapatılmayacakRoller.some(x => role.id === x)) return 33 | role.members.filter(e => e.manageable).forEach(member => { 34 | if(safe(member.id)) return; 35 | if(member.roles.highest.position < guild.me.roles.highest.position) member.roles.remove(role).catch(() => { })})}})}} 36 | 37 | module.exports.conf = { 38 | name: "roleUpdate", 39 | }; -------------------------------------------------------------------------------- /src/events/commandHandler.js: -------------------------------------------------------------------------------- 1 | const cfg = require("../configs/config.json"); 2 | const fs = require("fs"); 3 | const moment = require("moment"); 4 | const ms = require("ms"); 5 | const {MessageEmbed} = require("discord.js"); 6 | const Discord = require("discord.js"); 7 | const MessageAttachment = require("discord.js"); 8 | const client = global.client; 9 | let sended = false; 10 | const Database = require("../schemas/Database.js"); 11 | 12 | setInterval(() => { 13 | client.cooldown.forEach((x, index) => { 14 | if (Date.now() - x.lastUsage > x.cooldown) client.cooldown.delete(index); 15 | }); 16 | }, 5000); 17 | 18 | module.exports = async (msg) => { 19 | let prefix = cfg.Bot.Prefix.find((x) => msg.content.toLowerCase().startsWith(x)); 20 | if (msg.author.bot || !msg.guild || !prefix) return; 21 | let args = msg.content.substring(prefix.length).trim().split(" "); 22 | let commandName = args[0].toLowerCase(); 23 | 24 | const guild = msg.guild.id 25 | args = args.splice(1); 26 | let cmd = client.commands.has(commandName) ? client.commands.get(commandName) : client.commands.get(client.aliases.get(commandName)); 27 | 28 | if (cmd) { 29 | let author = msg.guild.member(msg.author); 30 | let uye = msg.guild.member(msg.mentions.users.first()) || msg.guild.members.cache.get(args[0]); 31 | if (cmd.conf.owner && !cfg.Bot.Owners.includes(msg.author.id)) return; 32 | if (cmd.conf.serverowner && !msg.guild.owner.user.id.includes(msg.author.id) && !cfg.Bot.Owners.includes(msg.author.id)) return; 33 | const cooldown = cmd.conf.cooldown || 3000; 34 | const cd = client.cooldown.get(msg.author.id); 35 | if (cd) { 36 | const diff = Date.now() - cd.lastUsage; 37 | if (diff < cooldown) 38 | if (!sended) { 39 | sended = true; 40 | return client.timemessage(client.normalEmbed(`Bu komutu tekrar kullanabilmek için **${Number(((cooldown - diff) / 1000).toFixed(2))}** daha beklemelisin!`, msg), msg.channel.id, cooldown - diff) 41 | } 42 | } else client.cooldown.set(msg.author.id, { cooldown: cooldown, lastUsage: Date.now() }); 43 | cmd.run({client: client, msg: msg, args: args, prefix: prefix, guild: guild, author: author, uye: uye, cfg: cfg, fs: fs, MessageEmbed: MessageEmbed, Discord: Discord, moment: moment, Database: Database, MessageAttachment: MessageAttachment, ms: ms}); 44 | } 45 | }; 46 | 47 | module.exports.conf = { 48 | name: "message", 49 | }; 50 | -------------------------------------------------------------------------------- /src/events/functions.js: -------------------------------------------------------------------------------- 1 | module.exports = async(client, cfg, moment, Discord, request) => { 2 | 3 | client.Colors = new Array("#6959cd","#1f0524", "#0b0067", "#4a0038", "#07052a", "#FFDF00", "#00FFFF", "#0091CC", "#0047AB", "#384B77", "#ffffff", "#000000", "#04031a", "#f9ffba"); 4 | const Log = new Discord.WebhookClient(cfg.Webhook.LogWebhook.ID, cfg.Webhook.LogWebhook.Token); 5 | 6 | client.normalEmbed = (message, msj) => { 7 | return { 8 | embed: { 9 | description: message, 10 | author: { name: msj.guild.member(msj.author).displayName, icon_url: msj.author.avatarURL({dynamic: true}) }, 11 | color: client.Colors[Math.floor(Math.random() * client.Colors.length)],}}} 12 | 13 | client.logSend = (content) => { 14 | const logEmbed = new Discord.MessageEmbed().setThumbnail(client.guilds.cache.get(cfg.Server.GuildID).iconURL({dynamic: true})).setDescription(content).setAuthor(client.guilds.cache.get(cfg.Server.GuildID).name, client.guilds.cache.get(cfg.Server.GuildID).iconURL({dynamic: true})).setColor(client.Colors[Math.floor(Math.random() * client.vegasRenkler.length)]) 15 | Log.send(logEmbed).catch(() => { })} 16 | 17 | client.timemessage = (content, Channel, timeout) => { 18 | const channel = client.channels.cache.get(Channel) 19 | if (channel) channel.send(content).then((msg) => msg.delete({ timeout: timeout })).catch(() => { });}; 20 | 21 | client.message = (content, Channel) => { 22 | const channel = client.channels.cache.get(Channel); 23 | if (channel) channel.send(content).catch(() => { });}; 24 | 25 | client.setRole = (oldRole, newRole) => { 26 | newRole.edit({ ...oldRole });}; 27 | 28 | client.deleteRole = (role) => { 29 | role.delete({reason: "Role Guard"}).catch(() => { })} 30 | 31 | client.processBot = (bot, busy, job, equal = false) => { 32 | bot.Busy = busy; 33 | if(equal) bot.Uj = job; 34 | else bot.Uj += job; 35 | let index = global.Bots.findIndex(e => e.user.id == bot.user.id); 36 | global.Bots[index] = bot;} 37 | client.giveBot = (length) => { 38 | if(length > global.Bots.length) length = global.Bots.length; 39 | let availableBots = global.Bots.filter(e => !e.Busy); 40 | if(availableBots.length <= 0) availableBots = global.Bots.sort((x,y) => x.Uj - y.Uj).slice(0, length); 41 | return availableBots;} 42 | 43 | client.backup = () => { 44 | const Database = require("../schemas/Backup.js"); 45 | Database.deleteMany({}); 46 | client.guilds.cache.get(cfg.Server.GuildID).roles.cache.filter(e => !e.managed).forEach(async role => { 47 | new Database({ 48 | guildID: client.guilds.cache.get(cfg.Server.GuildID).id, 49 | Id: role.id, 50 | name: role.name, 51 | color: role.hexColor, 52 | hoist: role.hoist, 53 | position: role.rawPosition, 54 | permler: role.permissions, 55 | mentionable: role.mentionable, 56 | Members: role.members.map(e => e.id)}).save()}) 57 | let rolsize = client.guilds.cache.get(cfg.Server.GuildID).roles.cache.filter(rls => rls.name !== "@everyone").size 58 | console.log(`Başarıyla sunucuda ki ${rolsize} rolün yedeği alındı!`)} 59 | 60 | client.channelBackup = () => { 61 | const channelDatabase = require("../schemas/ChannelBackup.js"); 62 | channelDatabase.deleteMany({}); 63 | let roleChannelOverwrites = []; 64 | let guild = client.guilds.cache.get(cfg.Server.GuildID); 65 | let kanalsize = client.guilds.cache.get(cfg.Server.GuildID).channels.cache.filter(chnls => chnls.name !== "@everyone").size 66 | if (guild) { 67 | guild.roles.cache.filter(r => r.name !== "@everyone" && !r.managed).forEach(role => { 68 | let roleChannelOverwrites = []; 69 | guild.channels.cache.filter(c => c.permissionOverwrites.has(role.id)).forEach(c => { 70 | let channelPerm = c.permissionOverwrites.get(role.id); 71 | let pushlanacak = { id: c.id, allow: channelPerm.allow.toArray(), deny: channelPerm.deny.toArray() }; 72 | roleChannelOverwrites.push(pushlanacak);}); 73 | new channelDatabase({ 74 | guildID: client.guilds.cache.get(cfg.Server.GuildID).id, 75 | roleID: role.id, 76 | channelOverwrites: roleChannelOverwrites}).save()})} 77 | console.log(`Başarıyla sunucuda ki ${kanalsize} kanalın yedeği alındı!`)} 78 | 79 | client.punish = (userID, tür) => { 80 | let user = client.guilds.cache.get(cfg.Server.GuildID).members.cache.get(userID); 81 | if (!user) return; 82 | if (tür == "Suspended") return user.roles.cache.has(cfg.Roles.Booster) ? user.roles.set([cfg.Roles.Booster, cfg.Roles.Jail]) : user.roles.set([cfg.Roles.Jail]).catch(() => { }); 83 | if (tür == "Forbidden") return user.ban({ reason: "Role Guard" }).catch(() => { })}} 84 | 85 | -------------------------------------------------------------------------------- /src/events/ready.js: -------------------------------------------------------------------------------- 1 | const client = global.client; 2 | const cfg = require("../configs/config.json"); 3 | 4 | module.exports = async () => { 5 | 6 | let danger = false; 7 | client.user.setPresence({ activity: { name: cfg.Bot.Durum }, status: cfg.Bot.Status }); 8 | let VoiceChannelID = client.channels.cache.get(cfg.Channels.VoiceChannelID); 9 | if (VoiceChannelID) VoiceChannelID.join().catch(() => { }); 10 | console.log(`(${client.user.username}) adlı ana hesapta [${client.guilds.cache.get(cfg.Server.GuildID).name}] adlı sunucuda giriş yapıldı.`) 11 | let guild = client.guilds.cache.get(cfg.Server.GuildID) 12 | client.backup(); 13 | client.channelBackup(); 14 | setInterval(() => { 15 | if(danger != true) client.backup() 16 | }, 900000) 17 | setInterval(() => { 18 | if(danger != true) client.channelBackup() 19 | }, 900000)} 20 | 21 | module.exports.conf = { 22 | name: "ready", 23 | }; 24 | -------------------------------------------------------------------------------- /src/handlers/commandHandler.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const client = global.client; 3 | fs.readdir("./src/commands", (err, files, komutlar = []) => { 4 | console.log("Komutlar Yükleniyor."); 5 | if (err) console.error(err); 6 | files.forEach((f) => { 7 | let props = require(`../commands/${f}`); 8 | client.commands.set(props.conf.name, props); 9 | props.conf.aliases.forEach((alias) => { 10 | client.aliases.set(alias, props.conf.name); 11 | }); 12 | }); 13 | for (var value of client.commands.values()) komutlar.push(value.conf.name); 14 | console.log("[" + komutlar.join(", ") + "]" + " isimli komut(lar) yüklendi. (" + files.length + ")"); 15 | console.log("--------------------------"); 16 | }); 17 | -------------------------------------------------------------------------------- /src/handlers/eventHandler.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const client = global.client; 3 | fs.readdir("./src/events", (err, files, events = []) => { 4 | if (err) return console.error(err); 5 | console.log("--------------------------"); 6 | console.log("Eventler yükleniyor."); 7 | files 8 | .filter((file) => file.endsWith(".js")) 9 | .forEach((file) => { 10 | let prop = require(`../events/${file}`); 11 | if (!prop.conf) return; 12 | client.on(prop.conf.name, prop); 13 | events.push(prop.conf.name);}); 14 | console.log("[" + events.join(", ") + "] " + " isimli event(ler) yüklendi."); 15 | console.log("--------------------------");}); -------------------------------------------------------------------------------- /src/handlers/mongoHandler.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const cfg = require("../configs/config.json"); 3 | mongoose.connect(cfg.Bot.MongoURL, {useUnifiedTopology: true,useNewUrlParser: true,useFindAndModify: false,}).then(console.log("Mongoose bağlandı!\n"+ mongoose.connections[0]._connectionString)).catch(err => console.log(err.message)); -------------------------------------------------------------------------------- /src/schemas/Database.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = new Schema({ 4 | guildID: { type: String, default: "" }, 5 | Safe: Array, 6 | }); 7 | 8 | module.exports = model("databasefenice", schema); --------------------------------------------------------------------------------