text: ﻿﻿const fs = require('fs');
  const db = require('quick.db')
  const ayarlar = require('./ayarlar.json');
  require('events').EventEmitter.prototype._maxListeners = 70;
  require('events').defaultMaxListeners = 70;
    process.on('warning', function (err) {
      if ( 'MaxListenersExceededWarning' == err.name ) {
      process.exit(1); 
  
      }
    });
  function foo() {
    return new Promise((resolve, reject) => {
    return resolve();
  });
  }
  async function foobar() {
  foobar();
  foo().then(() => {}).catch(() => {});
  foobar().catch(console.error);
  }
  
  var prefix = ayarlar.prefix
  
  const Discord = require("discord.js");
  const client = new Discord.Client({ partials: ['MESSAGE', 'REACTION']});
  Discord.Role.prototype.toString = function() {
  return `@${this.name}`
  }
  const log = message => {
    console.log(` ${message}`);
  };
  require('./util/eventLoader.js')(client);
  
  client.commands = new Discord.Collection();
  client.aliases = new Discord.Collection();
  fs.readdir('./komutlar/', (err, files) => {
      if (err) console.error(err);
      log(`${files.length} komut yüklenecek.`);
      files.forEach(f => {
          let props = require(`./komutlar/${f}`);
          log(`Yüklenen komut: ${props.help.name}.`);
          client.commands.set(props.help.name, props);
          props.conf.aliases.forEach(alias => {
              client.aliases.set(alias, props.help.name);
          });
      });
  });
  
  
  
  
  client.reload = command => {
      return new Promise((resolve, reject) => {
          try {
              delete require.cache[require.resolve(`./komutlar/${command}`)];
              let cmd = require(`./komutlar/${command}`);
              client.commands.delete(command);
              client.aliases.forEach((cmd, alias) => {
                  if (cmd === command) client.aliases.delete(alias);
              });
              client.commands.set(command, cmd);
              cmd.conf.aliases.forEach(alias => {
                  client.aliases.set(alias, cmd.help.name);
              });
              resolve();
          } catch (e) {
           reject(e);
          }
      });
  };
  
  client.load = command => {
      return new Promise((resolve, reject) => {
          try {
              let cmd = require(`./komutlar/${command}`);
              client.commands.set(command, cmd);
              cmd.conf.aliases.forEach(alias => {
                  client.aliases.set(alias, cmd.help.name);
              });
              resolve();
          } catch (e) {
              reject(e);
          }
      });
  };
  
  
  
  
  client.unload = command => {
      return new Promise((resolve, reject) => {
          try {
              delete require.cache[require.resolve(`./komutlar/${command}`)];
              let cmd = require(`./komutlar/${command}`);
              client.commands.delete(command);
              client.aliases.forEach((cmd, alias) => {
                  if (cmd === command) client.aliases.delete(alias);
              });
              resolve();
          } catch (e) {
              reject(e);
          }
      });
  };
  
  
  
  client.elevation = message => {
      if (!message.guild) {
          return;
      }
      let permlvl = 0;
      if (message.member.hasPermission("BAN_MEMBERS")) permlvl = 2;
      if (message.member.hasPermission("ADMINISTRATOR")) permlvl = 3;
     if (ayarlar.sahip.includes(message.author.id)) permlvl = 4;
      return permlvl;
  };
  
  client.login(ayarlar.token).then(
    function() {
      console.log("[Token-Log] Token doğru bir şekilde çalışıyor.");
    },
    function(err) {
      console.log("[ERROR] Token'de bir hata oluştu: " + err);
      setInterval(function() {
        process.exit(0);
      }, 20000);
    }
  );
  
  
  client.on('ready', async () => {
    
        function destructMS(milli) {
          if (isNaN(milli) || milli < 0) {
            return null;
          }
        
          var d, h, m, s;
          s = Math.floor(milli / 1000);
          m = Math.floor(s / 60);
          s = s % 60;
          h = Math.floor(m / 60);
          m = m % 60;
          d = Math.floor(h / 24);
          h = h % 24;
          var yazi;
          if (d !== 0) yazi = `${d} gün`;
          if (h !== 0 && yazi) yazi = yazi + `, ${h} saat`;
          if (h !== 0 && !yazi) yazi = `${h} saat`;
          if (m !== 0 && yazi) yazi = yazi + `, ${m} dakika`;
          if (m !== 0 && !yazi) yazi = `${m} dakika`;
          if (s !== 0 && yazi) yazi = yazi + `, ${s} saniye`;
          if (s !== 0 && !yazi) yazi = `${s} saniye`;
          if (yazi) return yazi;
          if (!yazi) return `1 saniye`;
        };
    
        function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
  }
    
        function cekme(message, array) {
        var eskikazananlar = db.fetch(`cekilis_${message.id}.kazananlar`) || []
        var cekilenkisi = array[Math.floor(Math.random() * array.length)]
        if (!client.users.cache.get(cekilenkisi.id)) {
          return cekme(message, array)
        }
        while (eskikazananlar.includes(cekilenkisi.id)) {
          return cekme(message, array)
        }
        if (!eskikazananlar.includes(cekilenkisi.id)) {
          if (db.has(`cekilis_${message.id}.kazananlar`)) {
            db.push(`cekilis_${message.id}.kazananlar`, cekilenkisi.id)
          }else{
            db.set(`cekilis_${message.id}.kazananlar`, [cekilenkisi.id])
          }
        }
      }
    
    let dasall = db.all().filter(i => i.ID.startsWith('cekilis_'))
    for (const ii of dasall) {
      const channel = client.channels.cache.get(db.fetch(`${ii.ID}.mesaj.kanal`))
      const mesaj = db.fetch(`${ii.ID}.mesaj.id`)
      const bitecegizamanms = db.fetch(`${ii.ID}.bitecek`)
      const kazanacak = db.fetch(`${ii.ID}.kazanacak`)
      const verilecek = db.fetch(`${ii.ID}.verilecek`)
      const cekilisid = db.fetch(`${ii.ID}.cekilisid`)
      let embed = new Discord.MessageEmbed()
      .setAuthor('🎉 Çekiliş 🎉')
      .setTitle('**' + verilecek + '**')
      .setDescription(`Aşağıdaki 🎉 emojisine tıklayarak çekilişe katılabilirsiniz!\n**Kalan süre:** Bekleniyor...`)
      .setFooter(`${kazanacak} kazanan | ID: ${cekilisid} | Bitecek:`)
      .setTimestamp(bitecegizamanms)
      .setColor("#2F3136")
      if(channel) {
  channel.messages.fetch(mesaj).then(async msg => {
    msg.edit(embed)
    const reaction = msg.reactions.cache.first()
                  const intervaley = setInterval(async function(){
                  if (!db.has(ii.ID)) return clearInterval(intervaley)
                  const kalanzaman = bitecegizamanms - Date.now()   
                  if (kalanzaman <= 0) {
                    embed.setDescription(`Çekiliyor...`)
                    msg.edit(embed)
                    clearInterval(intervaley)
                    reaction.users.fetch().then(async kasiler => {
                      const gercekkisisayisi = kasiler.size - 1
                      if (gercekkisisayisi < kazanacak) {
                          let embed = new Discord.MessageEmbed()
                          .setAuthor('🎉 Çekiliş Bitti 🎉')
                          .setTitle('**' + verilecek + '**')
                          .setDescription(`Yeterli katılım olmadığından kazanan seçilemedi.`)
                          .setFooter(`${kazanacak} kazanan | Çekiliş Başlatıldı | Çekiliş ID: ${cekilisid} | Bitti:`)
                          .setTimestamp(bitecegizamanms)
                          .setColor("#2F3136")
                          msg.edit(embed)
                          msg.reactions.removeAll()
                          db.delete(`cekilis_${msg.id}`)
                          let thall = db.all().filter(i => i.ID.includes(msg.id))
                          for (const uu of thall) {
                            db.delete(uu.ID)
                          }
                      }else{
                          var array = reaction.users.cache.array()
                          var ukuk;
                          for (ukuk = 0; ukuk < kazanacak; ukuk++) {
                            cekme(msg, array)
                          }
                        await sleep(50)
                          let kazananherkes = db.fetch(`cekilis_${msg.id}.kazananlar`)
                              let embed = new Discord.MessageEmbed()
                              .setAuthor('🎉 Çekiliş Bitti 🎉')
                              .setTitle('**' + verilecek + '**')
                              .setDescription(`**Kazananlar:** <@${kazananherkes.join('>, <@')}>`)
                              .setFooter(`${kazanacak} kazanan | Çekiliş Başlatıldı |Çekiliş ID: ${cekilisid} | Bitti:`)
                              .setTimestamp(bitecegizamanms)
                              .setColor("#2F3136")
                              msg.edit(embed)
                              msg.channel.send(`**Tebrikler** <@${kazananherkes.join('>, <@')}>! **\`${verilecek}\` çekilişini kazandınız!**`)
                              db.set(`cekilisidsi_${cekilisid}.kazananlar`, kazananherkes)
                              db.delete(`cekilis_${msg.id}`)
                              let theall = db.all().filter(i => i.ID.includes(msg.id))
                              for (const ua of theall) {
                                db.delete(ua.ID)
                              }
                      }
                    })
                  }else{
                  const kalanzamanyazi = destructMS(kalanzaman)
                  embed.setDescription(`Aşağıdaki 🎉 emojisine tıklayarak çekilişe katılabilirsiniz!\n**Kalan süre:** ${kalanzamanyazi}`)
                  msg.edit(embed)
                  }
              }, 5000)
           })
      }
    }
  })