const chalk = require('chalk'); const moment = require('moment'); const lastfm = require("lastfm"); const GuildSettings = require('../models/guild'); const BotDataSchema = require('../models/bot'); const LogData = require('../models/log'); const Saves = require('../models/saves'); const siftStatuses = require('../util/siftstatuses'); const localXPCacheClean = require('../util/lxp/cacheloop'); const monitorCacheClean = require('../util/monitorloop'); const vcloop = require('../util/vcloop'); let prefix = 'n?'; module.exports = async client => { if (client.misc.readied) {return;} client.misc.readied = true; await client.misc.botFinished; const config = client.config; /*let db = mongoose.connection; await db.guild.update({}, {"$set": {'prefix': ''}}, false, true);*/ console.log(`\n${chalk.green('[BOOT]')} >> [${moment().format('L LTS')}] -> ${chalk.greenBright("Connected to Discord")}.`); let date = new Date; date = date.toString().slice(date.toString().search(":") - 2, date.toString().search(":") + 6); console.log(`\n${chalk.gray('[INFO]')} >> ${chalk.white(`Logged in at ${date}.`)}`); console.log(`\n${chalk.gray('[INFO]')} >> ${chalk.white(`Logged in as ${client.user.username}!`)}`); console.log(`${chalk.gray('[INFO]')} >> ${chalk.white(`Client ID: ${client.user.id}`)}`); console.log(`${chalk.gray('[INFO]')} >> ${chalk.white(`Running on ${client.guilds.cache.size} servers!`)}`); console.log(`${chalk.gray('[INFO]')} >> ${chalk.white(`Serving ${client.users.cache.size} users!`)}`); client.lfm = new lastfm.LastFmNode({api_key: client.config.lfm.key, secret: client.config.lfm.secret}); let responses = { "PLAYING": [ `with my darling`, 'RAIN: Shadow Lords', "with my waifu", "with the neko formula", "with magic", "terrible anime games", "anime OSTs at max volume", `${Math.ceil(Math.random() * 100)} days of trying to become a samurai`, "with the sauce", "witch hats are >", "explosion magic is the best magic", "with Kazuma's sanity", "please help i gave myself cat ears", "starting my own harem", "wor. wor never changes", "a little more UwU than necessary", "please i just want a cat girl in my life", "i'm your waifu now.", "i'm in intervention for my neko addiction", "i tried to make a catgirl and broke my staff", "fluffy tails = drugs", "in a dungeon without wearing my plot armor", "benefits of Natsuki worship: my beautiful face" ,`in ${client.guilds.cache.size} servers` ], "WATCHING": [ `for ${client.commands.size} commands`, "I'm not a bad slime, slurp!", "Lelouch rule the world!", "a slime somehow start an empire", "a fox-maid get her tail fluffed", "a raccoon-girl and some guy with a shield", "some chick with unusually red hair", "Mob hit 100", "a really bad harem anime", "The Black Swordsman", "The Misfit of Demon King Academy", "Akame ga Kill", "a witch explode a castle", "Code Geass", "\"did you really think ___ would be enough to kill me?\"", "hentacle tentai", "JIBUN WO-", "he did it... he actually made risotto", "sasageyo, sasageyo, chi nto wo sasegeyo", "scientists make nekos real :3", "yet another isekai don't @ me", "magical girl anime", "episode 1 of One Piece.. pain.", "a white-haired dude and a goddess with some MELONS" ,`over ${client.guilds.cache.size} servers` ] }; const setR = () => { let type = Object.keys(responses)[Math.floor(Math.random() * Object.keys(responses).length)]; if (type === "PLAYING") {client.user.setActivity(responses[type][Math.floor(Math.random() * responses[type].length)] + " | " + prefix + "help");} else {client.user.setActivity(responses[type][Math.floor(Math.random() * responses[type].length)] + " | " + prefix + "help", {type: type});} } setR(); setInterval(setR, 14400000); const setPL = async () => {let tg; for (tg of Array.from(client.guilds.cache.values)) { let tguild = await GuildSettings.findOne({gid: tg.id}); if (tguild && tguild.prefix && tguild.prefix.length) {client.guildconfig.prefixes.set(tg.id, tguild.prefix);} let tl = await LogData.findOne({gid: tg.id}); if (tl) { let keys = Object.keys(tl.logs); let k; for (k of keys) {if (typeof tl.logs[k] === "string" && tl.logs[k].length) { if (!client.guildconfig.logs.has(tg.id)) {client.guildconfig.logs.set(tg.id, new Map());} client.guildconfig.logs.get(tg.id).set(k, tl.logs[k]); }} } }}; setPL(); siftStatuses(); setInterval(() => {siftStatuses(client, null);}, 120000); await require('../util/cache')(client); let mnsaves = await Saves.findOne({name: 'monnersnames'}) || new Saves({name: 'monnersnames'}); client.misc.cache.monnersNames = mnsaves.saves; setInterval(() => localXPCacheClean(client), 150000); setInterval(() => monitorCacheClean(client), 150000); setInterval(() => vcloop(client), 60000); let botData = await BotDataSchema.findOne({finder: 'lel'}) ? await BotDataSchema.findOne({finder: 'lel'}) : new BotDataSchema({ finder: 'lel', commands: 0, servers: 0, servers_all: 0, restarts: 0, lastRestart: new Date(), errors_all: 0, }); botData.restarts = botData.restarts + 1; botData.lastRestart = new Date(); console.log(`${chalk.gray('\n[INFO]')} >> ${chalk.white(`This is restart #${botData.restarts}.`)}`); let cms = new Date().getTime(); console.log(`${chalk.gray('\n[INFO]')} >> ${chalk.white(`Startup completed in ${cms - client.misc.startup.getTime() - (client.misc.forcedReady ? 5000 : 0)}ms (${cms - client.misc.startupNoConnect.getTime() - (client.misc.forcedReady ? 5000 : 0)}ms post-connect).`)}`); await botData.save(); client.misc.fullyReady = true; require('../console')(client); };