const fs = require('fs')
|
|
const Discord = require('discord.js');
|
|
const Client = require('./client');
|
|
let mongoose = require('mongoose');
|
|
|
|
const {
|
|
prefix,
|
|
token,
|
|
mongo_url,
|
|
role_message_id
|
|
} = require('./config.json');
|
|
|
|
const {
|
|
userModel,
|
|
teamModel,
|
|
} = require('./commands/schemas.js');
|
|
|
|
const client = new Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION'] });
|
|
client.commands = new Discord.Collection();
|
|
|
|
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
|
|
|
|
for (const file of commandFiles) {
|
|
const command = require(`./commands/${file}`);
|
|
let prefix = ""
|
|
if(!command.name) continue;
|
|
if(command.family){
|
|
prefix = command.family + "_"
|
|
}
|
|
client.commands.set(prefix + command.name, command);
|
|
}
|
|
|
|
console.log(client.commands);
|
|
|
|
client.once('ready', async () => {
|
|
console.log('Ready!');
|
|
|
|
async function delete_messages(){
|
|
let fetched;
|
|
|
|
channel = client.channels.cache.get("734387503464710165")
|
|
message_manager = channel.messages
|
|
|
|
do {
|
|
fetched = await message_manager.fetch({ limit: 100 });
|
|
fetched.delete(role_message_id)
|
|
channel.bulkDelete(fetched);
|
|
}
|
|
while(fetched.size >= 3);
|
|
}
|
|
|
|
await delete_messages();
|
|
|
|
|
|
var minutes = 1, interval = minutes * 60 * 1000;
|
|
setInterval(delete_messages, interval);
|
|
|
|
});
|
|
|
|
client.once('reconnecting', () => {
|
|
console.log('Reconnecting!');
|
|
});
|
|
|
|
client.once('disconnect', () => {
|
|
console.log('Disconnect!');
|
|
});
|
|
|
|
client.on('message', async message => {
|
|
if (message.author.bot) return;
|
|
if (!message.content.startsWith(prefix)) return;
|
|
|
|
const args = message.content.slice(prefix.length).split(/ +/);
|
|
const c1 = args.shift().toLowerCase();
|
|
let c2 = args.shift();
|
|
if(c2){
|
|
c2 = c2.toLowerCase()
|
|
}
|
|
var commandName = null;
|
|
|
|
if (client.commands.has(c1)){
|
|
commandName = c1;
|
|
}else if(client.commands.has(c1 + "_" + c2)){
|
|
commandName = c1 + "_" + c2;
|
|
}else{
|
|
return;
|
|
}
|
|
|
|
const command = client.commands.get(commandName);
|
|
const permitted_roles = client.commands.get(commandName)["roles"];
|
|
const permitted_channels = client.commands.get(commandName)["channels"]
|
|
|
|
has_roles = false
|
|
|
|
if (permitted_roles){
|
|
for(i = 0; i < permitted_roles.length; i++){
|
|
if(message.member.roles.cache.has(permitted_roles[i])){
|
|
has_roles = true
|
|
}
|
|
}
|
|
|
|
if (!has_roles){
|
|
message.reply('You are not allowed to run this command!');
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(permitted_channels){
|
|
msg_channel = message.channel;
|
|
channel_allowed = false
|
|
for(i = 0; i < permitted_channels.length; i++){
|
|
if(permitted_channels[i] == "dm" && msg_channel instanceof Discord.DMChannel){
|
|
channel_allowed = true;
|
|
break;
|
|
}else if(permitted_channels[i] == msg_channel.id){
|
|
channel_allowed = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(!channel_allowed){
|
|
return;
|
|
}
|
|
}
|
|
|
|
try {
|
|
command.execute(message,args);
|
|
} catch (error) {
|
|
console.error(error);
|
|
message.reply('There was an error trying to execute that command!');
|
|
}
|
|
});
|
|
|
|
client.on('guildMemberAdd', member => {
|
|
let new_user = new userModel({
|
|
_id: member.id,
|
|
joined_at: Date.now(),
|
|
team_id: "0",
|
|
profession: "",
|
|
rank: 1,
|
|
xp: 0,
|
|
email: "",
|
|
trello_id: ""
|
|
})
|
|
member.guild.channels.cache.get('734387938418360362').send("Welcome <@"+ member.id +">. Xi up!");
|
|
member.roles.add('732558019409346603');
|
|
try {
|
|
mongoose.connect( mongo_url, {useNewUrlParser: true, useUnifiedTopology: true}, () => null );
|
|
let db = mongoose.connection;
|
|
db.once("open", function callback () {
|
|
new_user.save();
|
|
});
|
|
}catch (error) {
|
|
console.log("ERROR WITH MONGODB CONNECTION");
|
|
}
|
|
});
|
|
|
|
const reaction_to_prof = {
|
|
"🔐" : ["734453192921710604" ,"Cryptology"],
|
|
"🙃" : ["734453691318403072" ,"Reverse Engineer"],
|
|
"📱" : ["734453796306026576" ,"Mobile Developer"],
|
|
"🔩" : ["734453830669959218" ,"Hardware Developer"],
|
|
"🕸️" : ["734453917345120316" ,"Web security Expert"],
|
|
"🏭" : ["734453944700502186" ,"Backend Developer"],
|
|
"🕷️" : ["734454002082775040" ,"Web developer"],
|
|
"🌐" : ["734454060417024072" ,"Network Engineer"],
|
|
"👮" : ["734454093833175151" ,"Network Security "],
|
|
"🐧" : ["734454127551053924" ,"Linux Guru"]
|
|
};
|
|
|
|
const limits = {
|
|
1 : 1,
|
|
2 : 4,
|
|
3 : 6,
|
|
4 : 0,
|
|
5 : 0
|
|
}
|
|
|
|
client.on('messageReactionAdd', async (reaction, user) => {
|
|
if(reaction.message.id === role_message_id){
|
|
|
|
if (reaction.partial) {
|
|
try {
|
|
await reaction.fetch();
|
|
} catch (error) {
|
|
console.log('Something went wrong when fetching the message: ', error);
|
|
return;
|
|
}
|
|
}
|
|
|
|
let emoji = reaction.emoji.name;
|
|
let member = await reaction.message.guild.members.fetch(user.id);
|
|
|
|
try {
|
|
mongoose.connect( mongo_url, {useNewUrlParser: true, useUnifiedTopology: true}, () => null );
|
|
let db = mongoose.connection;
|
|
|
|
db.once("open", async function callback () {
|
|
|
|
let user_data = await userModel.find({_id: user.id}, "profession rank")
|
|
let profession = user_data[0].profession
|
|
let rank = user_data[0].rank
|
|
if(profession.indexOf(reaction_to_prof[emoji][1]) != -1){
|
|
return;
|
|
}
|
|
|
|
if(limits[rank] < profession.length + 1 && limits[rank] !== 0){
|
|
user.send(`You cannot have more than ${limits[rank]} professions at this rank!`)
|
|
return;
|
|
}
|
|
|
|
profession.push(reaction_to_prof[emoji][1]);
|
|
|
|
member.roles.add( reaction_to_prof[emoji][0]);
|
|
|
|
userModel.findOneAndUpdate(
|
|
{_id: user.id},
|
|
{profession: profession},
|
|
{
|
|
new: true,
|
|
runValidators: true,
|
|
useFindAndModify: false
|
|
}, function(err, result) {
|
|
//if (err) {console.log(err); } else {console.log(result);}
|
|
});
|
|
user.send(`You now have the profession ${reaction_to_prof[emoji][1]}!`)
|
|
});
|
|
}catch (error) {
|
|
console.log(error)
|
|
console.log("ERROR WITH MONGODB CONNECTION");
|
|
}
|
|
|
|
}
|
|
});
|
|
|
|
client.on('messageReactionRemove', async (reaction, user) => {
|
|
if(reaction.message.id === role_message_id){
|
|
if (reaction.partial) {
|
|
try {
|
|
await reaction.fetch();
|
|
} catch (error) {
|
|
console.log('Something went wrong when fetching the message: ', error);
|
|
return;
|
|
}
|
|
}
|
|
|
|
let emoji = reaction.emoji.name;
|
|
let member = await reaction.message.guild.members.fetch(user.id);
|
|
|
|
try {
|
|
mongoose.connect( mongo_url, {useNewUrlParser: true, useUnifiedTopology: true}, () => null );
|
|
let db = mongoose.connection;
|
|
|
|
db.once("open", async function callback () {
|
|
|
|
let user_data = await userModel.find({_id: user.id}, "profession rank")
|
|
let profession = user_data[0].profession
|
|
let rank = user_data[0].rank
|
|
let profession_index = profession.indexOf(reaction_to_prof[emoji][1])
|
|
|
|
if(profession_index != -1){
|
|
profession.splice(profession_index, 1)
|
|
}else{
|
|
return;
|
|
}
|
|
|
|
member.roles.remove(reaction_to_prof[emoji][0]);
|
|
|
|
userModel.findOneAndUpdate(
|
|
{_id: user.id},
|
|
{profession: profession},
|
|
{
|
|
new: true,
|
|
runValidators: true,
|
|
useFindAndModify: false
|
|
}, function(err, result) {
|
|
// if (err) {console.log(err); } else {console.log(result);}
|
|
});
|
|
});
|
|
user.send(`You now don't have the profession ${reaction_to_prof[emoji][1]}!`)
|
|
}catch (error) {
|
|
console.log(error)
|
|
console.log("ERROR WITH MONGODB CONNECTION");
|
|
}
|
|
}
|
|
});
|
|
|
|
// login to Discord with your app's token
|
|
client.login(token);
|