const { Client, Intents } = require('discord.js'); const Discord = require('discord.js'); const { MongoClient, ServerApiVersion } = require('mongodb'); const fs = require('fs'); const { exit } = require('process'); const BASE_LVL_XP = 20; // const { token } = require('./config.json'); //Heroku part // const { token } = process.env.token; const bot = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.GUILD_VOICE_STATES, Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS ], }); const prefix = '/'; //MongoDB integration const mongouri = process.env.MONGODB_URI; const { connect } = require('mongoose'); bot.on("guildCreate", guild => { // guild.owner.send('Thanks! You can use +help to discover commands.') //Get total inventory const client = new MongoClient(mongouri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 }); client.connect(err => { const collection = client.db(guild).collection("shop"); // perform actions on the collection object console.log(guild); client.close(); }); }); //MongoDB Integration end // let item = items.filter(function (item) { return item.name.toLowerCase() == 'grapes'; }); bot.commands = new Discord.Collection(); bot.commNames = new Discord.Collection(); bot.econ = new Discord.Collection(); const commandFiles = fs.readdirSync('./commands/').filter(file => file.endsWith('.js')); let i = 0; for (const file of commandFiles) { const command = require(`./commands/${file}`); bot.commands.set(command.name, command); bot.commNames.set(i, [command.name, command.description]); i ++; } // const econFiles = fs.readdirSync('./commands/inventory').filter(file => file.endsWith('.js'));; bot.commands.set('ANIME', require(`./commands/anime_and_manga/anime_main`)); bot.commands.set('MANGA', require(`./commands/anime_and_manga/manga_main`)); // const currency = new Discord.Collection(); // const { Users } = require('./commands/currency/dbObjects.js'); // i++; bot.commNames.set('length', i); //XP Table section let xp_collection = new Map(); let items; bot.on('ready', async () => { //Make then copy the shop const client = new MongoClient(mongouri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 }); client.connect(err => { const shop = client.db("main").collection("shop"); shop.find().toArray(function(err, itemstemp) { if (err) throw err; items = [...itemstemp]; client.close(); }); }); //Note the xp numbers are a little wonky on levels 6, 8 and 13 (why though?) //See https://stackoverflow.com/questions/72212928/why-are-the-differences-between-my-numbers-inconsistent-sort-of-compund-interes for (let i = 1; i < 101; i ++) { // xp_collection.set(i, BASE_LVL_XP * .1); let amount = BASE_LVL_XP * (Math.ceil(Math.pow((1.1), (2 * i))) + i); xp_collection.set(i+1, amount); } //Reaction map area console.log('SLEEMER BOT ONLINE!!!!! OH MY GOD OH MY GOD!!!'); }); bot.on('messageCreate', (message) => { //COMMAND AREA //Check if the prefix exists if (!message.content.startsWith(prefix) || message.author.bot) return; const args = message.content.slice(prefix.length).split(' '); const command = args.shift().toLowerCase(); //Check if the user has sufficient permission //Performes the command //Anime uses if/else, all else uses switch (can't make a multi-case case) if (command.indexOf('anime') != -1) { bot.commands.get('ANIME').execute(command, message, args, bot); } else if (command.indexOf('MANGA')) { //Do nothing for now } else { switch(command) { case 'test': bot.commands.get('Hello World').execute(message, args); break; case 'profile': bot.commands.get('profile').execute(message, args, Discord); break; case 'links': bot.commands.get('links').execute(message, args, Discord); break; case 'arrow': bot.commands.get('arrow').execute(message, args, Discord); break; case 'audio': bot.commands.get('playaudio').execute(message, args, bot, Discord); break; case 'quotes': bot.commands.get('quotes').execute(message, args, Discord, Client); break; case 'extracredit': bot.commands.get('EC').execute(message); break; case 'scrape': bot.commands.get('scraper').execute(message, args); break; case 'kareoke': bot.commands.get('kareoke').execute(message, args); break; case 'react': bot.commands.get('reaction').execute(message, args, bot); break; case 'stocks': bot.commands.get('stocks').execute(message, args); break; default: bot.commands.get('ECON').execute(bot, message, args, command, Discord, mongouri, items, xp_collection); //Removed because Heroku doesn't work with sqlite //default: bot.commands.get('ECON').execute(bot, prefix, message, args, command, Users, currency); } } }) //Look into integrating MySQL into SelmerBot instead of SQLite //Last Line(s) // bot.login(token); bot.login(process.env.token);