2022-05-14 20:40:58 +03:00
const { Client , Intents , Permissions } = require ( 'discord.js' );
2022-02-17 21:42:57 -05:00
const Discord = require ( 'discord.js' );
2022-05-12 17:38:08 +03:00
const { MongoClient , ServerApiVersion } = require ( 'mongodb' );
const fs = require ( 'fs' );
const { exit } = require ( 'process' );
const BASE_LVL_XP = 20 ;
2022-04-30 17:41:44 -04:00
// const { token } = require('./config.json');
2022-04-30 17:02:26 -04:00
//Heroku part
2022-05-12 17:48:49 +03:00
// const { token } = process.env.token;
2022-04-17 08:51:30 -04:00
2022-04-30 15:51:55 -04:00
const bot = new Client ({
2022-02-17 21:42:57 -05:00
intents : [
Intents . FLAGS . GUILDS ,
Intents . FLAGS . GUILD_MESSAGES ,
2022-04-30 15:51:55 -04:00
Intents . FLAGS . GUILD_MESSAGE_REACTIONS ,
2022-05-13 12:14:24 +03:00
Intents . FLAGS . GUILD_VOICE_STATES ,
Intents . FLAGS . GUILD_EMOJIS_AND_STICKERS
2022-02-17 21:42:57 -05:00
],
});
2022-05-18 21:34:58 +03:00
const prefix = '!' ;
bot . prefix = new String ;
bot . prefix = prefix ;
2022-02-17 21:42:57 -05:00
2022-05-09 12:11:18 +03:00
//MongoDB integration
2022-05-12 17:44:24 +03:00
const mongouri = process . env . MONGODB_URI ;
2022-05-12 17:38:08 +03:00
const { connect } = require ( 'mongoose' );
bot . on ( "guildCreate" , guild => {
2022-05-14 20:40:58 +03:00
guild . members . fetch
guild . roles . create ({ name : 'Selmer Bot Mod' });
/*
const role = guild.roles.cache.find((role) => role.name === 'Selmer Bot Mod'); // member.roles.cache.has('role-id-here');
let owner = guild.members.fetch(guild.ownerID);
owner.send('Thank you for adding Selmer Bot to your server!\nPlease give people you want to have access to Selmer Bot\'s restricted commands the <@&' + role + '> role.');
*/
//Get custom inventory
2022-05-12 17:38:08 +03:00
const client = new MongoClient ( mongouri , { useNewUrlParser : true , useUnifiedTopology : true , serverApi : ServerApiVersion . v1 });
client . connect ( err => {
2022-05-14 20:40:58 +03:00
const collection = client . db ( String ( guild )). collection ( "shop" );
2022-05-12 17:38:08 +03:00
// perform actions on the collection object
2022-05-14 20:40:58 +03:00
collection . insertOne ({ owner : guild . ownerId });
2022-05-12 17:38:08 +03:00
client . close ();
});
});
//MongoDB Integration end
// let item = items.filter(function (item) { return item.name.toLowerCase() == 'grapes'; });
2022-05-09 12:11:18 +03:00
2022-04-30 15:51:55 -04:00
bot . commands = new Discord . Collection ();
2022-02-17 21:42:57 -05:00
const commandFiles = fs . readdirSync ( './commands/' ). filter ( file => file . endsWith ( '.js' ));
2022-05-09 12:14:23 +03:00
2022-05-13 22:29:54 +03:00
bot . commands = new Discord . Collection ();
fs . readdirSync ( './commands' )
. forEach ( dir => {
fs . readdirSync ( `./commands/ ${ dir } ` )
. filter ( file => file . endsWith ( '.js' ))
. forEach ( file => {
const command = require ( `./commands/ ${ dir } / ${ file } ` );
bot . commands . set ( command . name , command );
});
});
2022-05-13 22:03:05 +03:00
2022-05-12 17:38:08 +03:00
// const econFiles = fs.readdirSync('./commands/inventory').filter(file => file.endsWith('.js'));;
2022-04-30 17:41:44 -04:00
// const currency = new Discord.Collection();
// const { Users } = require('./commands/currency/dbObjects.js');
// i++;
2022-02-17 21:42:57 -05:00
2022-05-12 17:38:08 +03:00
//XP Table section
let xp_collection = new Map ();
let items ;
2022-02-17 21:42:57 -05:00
2022-04-30 15:51:55 -04:00
bot . on ( 'ready' , async () => {
2022-05-12 17:38:08 +03:00
//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 );
}
2022-04-17 08:51:30 -04:00
2022-05-13 12:14:24 +03:00
//Reaction map area
2022-02-17 21:42:57 -05:00
console . log ( 'SLEEMER BOT ONLINE!!!!! OH MY GOD OH MY GOD!!!' );
});
2022-04-30 15:51:55 -04:00
bot . on ( 'messageCreate' , ( message ) => {
2022-02-17 21:42:57 -05:00
//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
2022-05-14 20:40:58 +03:00
//Admin section
if ( command == 'reactionrole' ) { bot . commands . get ( command ). execute ( message , args , Discord , bot ); }
2022-05-13 22:29:54 +03:00
2022-05-14 20:40:58 +03:00
else if ( bot . commands . has ( command )) { bot . commands . get ( command ). execute ( message , args , Discord , Client , bot ); }
2022-05-13 22:29:54 +03:00
else { bot . commands . get ( 'ECON' ). execute ( bot , message , args , command , Discord , mongouri , items , xp_collection ); }
2022-02-17 21:42:57 -05:00
})
2022-05-09 10:22:33 +03:00
//Look into integrating MySQL into SelmerBot instead of SQLite
2022-02-17 21:42:57 -05:00
2022-05-12 17:38:08 +03:00
//Last Line(s)
2022-05-12 17:48:49 +03:00
// bot.login(token);
2022-05-12 17:38:08 +03:00
2022-05-12 17:48:49 +03:00
bot . login ( process . env . token );