├── LICENSE ├── ayarlar.json ├── events ├── message.js └── ready.js ├── komutlar ├── ekle.js ├── me.js ├── temizle.js ├── top.js └── çıkar.js ├── package.json ├── server.js └── util └── eventLoader.js /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 CodAre 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 | -------------------------------------------------------------------------------- /ayarlar.json: -------------------------------------------------------------------------------- 1 | { 2 | "prefix": "", 3 | "sahip": "", 4 | "token": "" 5 | } -------------------------------------------------------------------------------- /events/message.js: -------------------------------------------------------------------------------- 1 | const ayarlar = require('../ayarlar.json'); 2 | module.exports = message => { 3 | let client = message.client; 4 | if (message.author.bot) return; 5 | if (!message.content.startsWith(ayarlar.prefix)) return; 6 | let command = message.content.split(' ')[0].slice(ayarlar.prefix.length); 7 | let params = message.content.split(' ').slice(1); 8 | let perms = client.elevation(message); 9 | let cmd; 10 | if (client.commands.has(command)) { 11 | cmd = client.commands.get(command); 12 | } else if (client.aliases.has(command)) { 13 | cmd = client.commands.get(client.aliases.get(command)); 14 | } 15 | if (cmd) { 16 | if (perms < cmd.conf.permLevel) return; 17 | cmd.run(client, message, params, perms); 18 | } 19 | 20 | }; 21 | -------------------------------------------------------------------------------- /events/ready.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk'); 2 | const moment = require('moment'); 3 | const Discord = require('discord.js'); 4 | const ayarlar = require('../ayarlar.json'); 5 | 6 | var prefix = ayarlar.prefix; 7 | module.exports = client => { 8 | client.user.setStatus("dnd"); 9 | }; -------------------------------------------------------------------------------- /komutlar/ekle.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const db = require('quick.db'); 3 | 4 | exports.run = async(client, message, args) => { 5 | let kisi = message.mentions.members.first() 6 | if(!kisi) return message.channel.send('Birisini etiketlemelisin.') 7 | if(!args[1]) return message.channel.send('Paylaşım kategorisi girmen gerekiyor.') 8 | if(!['gif','pp'].includes(args[1])) return message.channel.send('Kategorileri doğru girmelisin.') 9 | if(!args[2]) return message.channel.send('Sayı girmelisin.') 10 | if(isNaN(args[2]))return message.channel.send('Sayı girmelisin.') 11 | if(args[2].startsWith('-')) return message.channel.send('Ekleme yapıyorsun çıkarma değil.') 12 | db.add(`${args[1]}.${kisi.user.id}`,args[2]) 13 | db.add(`sayı.${kisi.user.id}`,args[2]) 14 | message.channel.send('Belirtilen kadar puan ekledim.') 15 | }; 16 | 17 | exports.conf = { 18 | enabled: true, 19 | guildOnly: false, 20 | aliases: [], 21 | permLevel: 4 // EĞER KOMUT ÇALIŞMAZSA AYARLAR.JSON'a SAHİP YERİNE İDNİZİ GİRİN. 22 | }; 23 | 24 | exports.help = { 25 | name: 'ekle', 26 | description: 'by kerem.', 27 | usage: 'kaldır' 28 | } 29 | -------------------------------------------------------------------------------- /komutlar/me.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const db = require('quick.db'); 3 | 4 | exports.run = async(client, message, args) => { 5 | let kisi = message.mentions.members.first() ? message.mentions.members.first() : message.member 6 | let stat = [] 7 | if(db.has(`pp.${kisi.user.id}`)){ 8 | stat.push(`\`${db.fetch(`pp.${kisi.user.id}`)}\` pp`) 9 | } 10 | if(db.has(`gif.${kisi.user.id}`)){ 11 | stat.push(`\`${db.fetch(`gif.${kisi.user.id}`)}\` gif`) 12 | } 13 | let embed = new Discord.MessageEmbed() 14 | .setAuthor(client.gif.sunucu+' 🔥') 15 | .setDescription(stat[0] ? stat.join(', ') + ' paylaşımında bulunmuşsun.\nToplam Paylaşım:' + db.fetch(`sayı.${kisi.user.id}`)||0 : `\`•\` Paylaşımda bulunmamış.`) 16 | message.channel.send(embed) 17 | 18 | }; 19 | 20 | exports.conf = { 21 | enabled: true, 22 | guildOnly: false, 23 | aliases: ['bilgi','stat'], 24 | permLevel: 0 25 | }; 26 | 27 | exports.help = { 28 | name: 'me', 29 | description: 'by kerem.', 30 | usage: '' 31 | } 32 | -------------------------------------------------------------------------------- /komutlar/temizle.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const db = require('quick.db'); 3 | 4 | exports.run = async(client, message, args) => { 5 | const filter = response => { 6 | return response.author.id == message.author.id; 7 | } 8 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send('**Mesajları Yönet** adlı izin gerekiyor.'); 9 | else { 10 | message.channel.send('Ne kadar mesaj kaldırılacak?').then(() => { 11 | message.channel.awaitMessages(filter, {max: 1}) 12 | .then((eslesen) => { 13 | if(isNaN(eslesen.first().content)){message.channel.send('Sayı girmelisin!')} else { 14 | if(eslesen.first().content > 99) return message.channel.send('Maks. 99 mesaj silinebilir!') 15 | if(eslesen.first().content < 1) return message.channel.send('En az 1 en fazla 99 kadar mesaj silebilirsin.') 16 | message.channel.bulkDelete(1) 17 | message.channel.bulkDelete(eslesen.first().content).then(message.channel.send(eslesen.first().content + ' adet mesaj kaldırıldı.').then(i => i.delete({timeout:5000}))) 18 | } 19 | }) 20 | }); 21 | } 22 | }; 23 | 24 | exports.conf = { 25 | enabled: true, 26 | guildOnly: false, 27 | aliases: ['sil','temizle','purge'], 28 | permLevel: 0 29 | }; 30 | 31 | exports.help = { 32 | name: 'kaldır', 33 | description: 'by kerem.', 34 | usage: 'kaldır' 35 | } -------------------------------------------------------------------------------- /komutlar/top.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const db = require('quick.db'); 3 | 4 | exports.run = async(client, message, args) => { 5 | 6 | if(args[0] == 'pp'){ 7 | 8 | 9 | const sorted = message.guild.members.cache.filter(m=>db.has(`pp.${m.user.id}`)&&!m.user.bot).array().sort((a, b) => { return (db.fetch(`pp.${b.user.id}`) || 0) - (db.fetch(`pp.${a.user.id}`) || 0) }); 10 | const top10 = sorted.splice(0, args[1] || 10) 11 | var sira = 1 12 | const map = top10.map(s=>`\`•\` ${sira++}. <@${s.user.id}> | \`${db.fetch(`pp.${s.user.id}`)||0}\` pp`).join('\n') 13 | let embed = new Discord.MessageEmbed() 14 | .setAuthor(client.gif.sunucu+' 🔥') 15 | .setDescription(map||`\`•\` Kimse paylaşımda bulunmamış.`) 16 | message.channel.send(embed) 17 | return 18 | } 19 | 20 | if(args[0] == 'gif'){ 21 | 22 | 23 | const sorted = message.guild.members.cache.filter(m=>db.has(`gif.${m.user.id}`)&&!m.user.bot).array().sort((a, b) => { return (db.fetch(`gif.${b.user.id}`) || 0) - (db.fetch(`gif.${a.user.id}`) || 0) }); 24 | const top10 = sorted.splice(0, args[1] || 10) 25 | var sira = 1 26 | const map = top10.map(s=>`\`•\` ${sira++}. <@${s.user.id}> | \`${db.fetch(`gif.${s.user.id}`)||0}\` gif`).join('\n') 27 | let embed = new Discord.MessageEmbed() 28 | .setAuthor(client.gif.sunucu+' 🔥') 29 | .setDescription(map||`\`•\` Kimse paylaşımda bulunmamış.`) 30 | message.channel.send(embed) 31 | 32 | return 33 | } 34 | 35 | const sorted = message.guild.members.cache.filter(m=>db.has(`sayı.${m.user.id}`)&&!m.user.bot).array().sort((a, b) => { return (db.fetch(`sayı.${b.user.id}`) || 0) - (db.fetch(`sayı.${a.user.id}`) || 0) }); 36 | const top10 = sorted.splice(0, args[0] || 10) 37 | var sira = 1 38 | const map = top10.map(s=>`\`•\` ${sira++}. <@!${s.user.id}> | Toplam: \`${db.fetch(`sayı.${s.user.id}`)||0}\` (\`${db.fetch(`pp.${s.user.id}`)||0} pp, ${db.fetch(`gif.${s.user.id}`)||0} gif\`)`).join('\n') 39 | let embed = new Discord.MessageEmbed() 40 | .setAuthor(client.gif.sunucu+' 🔥') 41 | .setDescription(map||`\`•\` Kimse paylaşımda bulunmamış.`) 42 | message.channel.send(embed) 43 | 44 | }; 45 | 46 | exports.conf = { 47 | enabled: true, 48 | guildOnly: false, 49 | aliases: [], 50 | permLevel: 0 51 | }; 52 | 53 | exports.help = { 54 | name: 'top', 55 | description: 'by kerem.', 56 | usage: '' 57 | } -------------------------------------------------------------------------------- /komutlar/çıkar.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const db = require('quick.db'); 3 | 4 | exports.run = async(client, message, args) => { 5 | let kisi = message.mentions.members.first() 6 | if(!kisi) return message.channel.send('Birisini etiketlemelisin.') 7 | if(!args[1]) return message.channel.send('Paylaşım kategorisi girmen gerekiyor.') 8 | if(!['gif','pp'].includes(args[1])) return message.channel.send('Kategorileri doğru girmelisin.') 9 | if(!args[2]) return message.channel.send('Sayı girmelisin.') 10 | if(isNaN(args[2]))return message.channel.send('Sayı girmelisin.') 11 | if(args[2].startsWith('-')) return message.channel.send('Lütfen başına - koymadan yaz.') 12 | if(db.fetch(`${args[1]}.${kisi.user.id}`) - args[2] <= 0) return message.channel.send('Çıkarınca 0\'ın altına düşüyor.') 13 | db.subtract(`${args[1]}.${kisi.user.id}`,args[2]) 14 | db.subtract(`sayı.${kisi.user.id}`,args[2]) 15 | message.channel.send('Belirtilen kadar puan çıkardım.') 16 | }; 17 | 18 | exports.conf = { 19 | enabled: true, 20 | guildOnly: false, 21 | aliases: [], 22 | permLevel: 4 // EĞER KOMUT ÇALIŞMAZSA AYARLAR.JSON'a SAHİP YERİNE İDNİZİ GİRİN. 23 | }; 24 | 25 | exports.help = { 26 | name: 'çıkar', 27 | description: 'by kerem.', 28 | usage: 'kaldır' 29 | } 30 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gifbot", 3 | "version": "0.0.1", 4 | "author": "kerem ★#2250", 5 | "description": "Gif sunucuları için gif bot.", 6 | "main": "server.js", 7 | "scripts": { 8 | "start": "node server.js" 9 | }, 10 | "dependencies": { 11 | "chalk": "^4.0.0", 12 | "discord-logs": "^1.7.5", 13 | "discord.js": "^12.2.0", 14 | "express": "^4.17.1", 15 | "google-tts-api": "^0.0.4", 16 | "moment": "^2.25.3", 17 | "moment-duration-format": "^2.3.2", 18 | "mongoose": "^5.9.13", 19 | "opusscript": "^0.0.7", 20 | "parse-ms": "^2.0.0", 21 | "quick.db": "^7.0.0b22", 22 | "request": "^2.88.2", 23 | "canvas": "^2.6.1", 24 | "snekfetch": "^4.0.4", 25 | "node-superfetch": "^0.1.10" 26 | }, 27 | "engines": { 28 | "node": "12.x" 29 | }, 30 | "license": "MIT", 31 | "keywords": [ 32 | "node", 33 | "glitch", 34 | "express" 35 | ] 36 | } -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js") 2 | const client = new Discord.Client() 3 | const ayarlar = require("./ayarlar.json") 4 | const chalk = require("chalk") 5 | const fs = require("fs") 6 | const moment = require("moment") 7 | const db = require("quick.db") 8 | const request = require("request") 9 | const ms = require("parse-ms") 10 | const express = require("express") 11 | const http = require("http") 12 | const app = express() 13 | const logs = require("discord-logs") 14 | require("moment-duration-format") 15 | logs(client) 16 | require("./util/eventLoader")(client) 17 | var prefix = ayarlar.prefix 18 | const log = message => { 19 | console.log(`[${moment().format("YYYY-MM-DD HH:mm:ss")}] ${message}`); 20 | }; 21 | 22 | client.gif = { 23 | kategoriler: [], //GİF KATEGORİLERİ, ÖRNEK: ANİME GİF(idsi girilecek), COUPLE GİF(idsi girilecek) vb. 24 | log: "", //GİF ATINCA MESAJIN GİDECEĞİ LOG KANALI İDSİ 25 | sunucu: "", //SUNUCU İSMİ / ÖRNEK: GifAre 26 | rastgele: { 27 | PP: "", // BİRİSİ AVATAR DEĞİŞİNCE PP İSE PP KANALI İD 28 | GIF: "" // BİRİSİ AVATAR DEĞİŞİNCE GIF İSE GIF KANALI İD 29 | } 30 | 31 | } 32 | 33 | client.commands = new Discord.Collection(); 34 | client.aliases = new Discord.Collection(); 35 | fs.readdir("./komutlar/", (err, files) => { 36 | if (err) console.error(err); 37 | log(`${files.length} komut yüklenecek.`); 38 | files.forEach(f => { 39 | let props = require(`./komutlar/${f}`); 40 | log(`Yüklenen komut ${props.help.name}.`); 41 | client.commands.set(props.help.name, props); 42 | props.conf.aliases.forEach(alias => { 43 | client.aliases.set(alias, props.help.name); 44 | }); 45 | }); 46 | }); 47 | 48 | client.reload = command => { 49 | return new Promise((resolve, reject) => { 50 | try { 51 | delete require.cache[require.resolve(`./komutlar/${command}`)]; 52 | let cmd = require(`./komutlar/${command}`); 53 | client.commands.delete(command); 54 | client.aliases.forEach((cmd, alias) => { 55 | if (cmd === command) client.aliases.delete(alias); 56 | }); 57 | client.commands.set(command, cmd); 58 | cmd.conf.aliases.forEach(alias => { 59 | client.aliases.set(alias, cmd.help.name); 60 | }); 61 | resolve(); 62 | } catch (e) { 63 | reject(e); 64 | } 65 | }); 66 | }; 67 | 68 | client.unload = command => { 69 | return new Promise((resolve, reject) => { 70 | try { 71 | delete require.cache[require.resolve(`./komutlar/${command}`)]; 72 | let cmd = require(`./komutlar/${command}`); 73 | client.commands.delete(command); 74 | client.aliases.forEach((cmd, alias) => { 75 | if (cmd === command) client.aliases.delete(alias); 76 | }); 77 | resolve(); 78 | } catch (e) { 79 | reject(e); 80 | } 81 | }); 82 | }; 83 | client.on('message', async msg =>{ 84 | 85 | let categories = client.gif.kategoriler 86 | 87 | if(msg.attachments.size == 0&&categories.includes(msg.channel.parentID)){ 88 | 89 | if(msg.author.bot) return; 90 | 91 | msg.delete({timeout:500}) 92 | 93 | msg.reply('Bu kanalda sadece pp/gif paylaşabilirsin!').then(m=>m.delete({timeout:5000})) 94 | 95 | } 96 | if(msg.attachments.size > 0 && categories.includes(msg.channel.parentID)){ 97 | 98 | db.add(`sayı.${msg.author.id}`,msg.attachments.size) 99 | let emojis = ['💸','⭐','🌙','⚡','🌌','✨'] 100 | var random = Math.floor(Math.random()*(emojis.length)); 101 | let pp = 0 102 | let gif = 0 103 | msg.attachments.forEach(atch=>{ 104 | if(atch.url.endsWith('.webp')||atch.url.endsWith('.png')||atch.url.endsWith('.jpeg')||atch.url.endsWith('.jpg')){ 105 | db.add(`pp.${msg.author.id}`,1) 106 | pp = pp + 1 107 | } 108 | if(atch.url.endsWith('.gif')){ 109 | db.add(`gif.${msg.author.id}`,1) 110 | gif = gif +1 111 | } 112 | }) 113 | let mesaj = `` 114 | if(gif > 0 && pp === 0){ 115 | mesaj = `${gif} gif` 116 | } 117 | if(pp > 0 && gif === 0){ 118 | mesaj = `${pp} pp` 119 | } 120 | if(gif > 0 && pp > 0){ 121 | mesaj = `${pp} pp, ${gif} gif` 122 | } 123 | client.channels.cache.get(client.gif.log).send(new Discord.MessageEmbed().setColor('RANDOM').setAuthor(client.gif.sunucu +' 🔥').setDescription(`${emojis[random]} \`•\` **${msg.author.tag}** (\`${msg.author.id}\`) kişisi,\n<#${msg.channel.id}> kanalına ${mesaj} gönderdi.\nBu kişi şuanda kanallara toplam ${db.fetch(`sayı.${msg.author.id}`)||0} pp/gif göndermiş.`)) 124 | } 125 | }) 126 | 127 | client.elevation = message => { 128 | if (!message.guild) { 129 | return; 130 | } 131 | let permlvl = 0; 132 | if (message.member.hasPermission("BAN_MEMBERS")) permlvl = 2; 133 | if (message.member.hasPermission("ADMINISTRATOR")) permlvl = 3; 134 | if (message.author.id === ayarlar.sahip) permlvl = 4; 135 | return permlvl; 136 | }; 137 | 138 | var regToken = /[\w\d]{24}\.[\w\d]{6}\.[\w\d-_]{27}/g; 139 | 140 | client.on("warn", e => { 141 | console.log(chalk.bgYellow(e.replace(regToken, "that was redacted"))); 142 | }); 143 | 144 | client.on("error", e => { 145 | console.log(chalk.bgRed(e.replace(regToken, "that was redacted"))); 146 | }); 147 | 148 | client.on('ready',()=>{ 149 | let oynanacaklar = 150 | [ client.gif.sunucu+' ⭐','En iyi gifler!',client.gif.sunucu+' 🌙',client.gif.sunucu+' 💸'] 151 | 152 | setInterval(function() { 153 | 154 | var random = Math.floor(Math.random()*(oynanacaklar.length-0+1)+0); 155 | 156 | client.user.setActivity(oynanacaklar[random],{type:'STREAMING'}); 157 | }, 2 * 2000); 158 | setTimeout(()=>{ 159 | client.user.setStatus("idle"); 160 | 161 | },2000) 162 | }) 163 | client.on("userUpdate", async(eski, yeni) => { 164 | if(eski.avatarURL() === yeni.avatarURL()) return; 165 | let avatar = (yeni.avatarURL({dynamic:true,size:1024})).split("?")[0]; 166 | if((avatar).endsWith(".gif")) { 167 | client.channels.cache.get(client.gif.rastgele.PP).send(new Discord.MessageEmbed().setColor('BLUE').setFooter(`${yeni.tag}`).setImage(avatar)); 168 | } else { 169 | client.channels.cache.get(client.gif.rastgele.GIF).send(new Discord.MessageEmbed().setColor('BLUE').setFooter(`${yeni.tag}`).setImage(avatar)); 170 | }; 171 | }); 172 | console.log('CODARE Bot Başladı!') 173 | client.login(ayarlar.token).catch(err=> console.error('[HATA] Token Hatalı Lütfen Tokeninizi Değiştirin. Hata yine olursa CodAre sunucumuza gelebilirsiniz. discord.gg/Wytq5PK')); 174 | -------------------------------------------------------------------------------- /util/eventLoader.js: -------------------------------------------------------------------------------- 1 | const reqEvent = (event) => require(`../events/${event}`); 2 | module.exports = client => { 3 | client.on('ready', () => reqEvent('ready')(client)); 4 | client.on('message', reqEvent('message')); 5 | }; --------------------------------------------------------------------------------