const { mongo_url, trello_token, trello_key } = require('../config.json'); const { userModel, teamModel, } = require('./schemas.js'); let mongoose = require('mongoose'); const fetch = require('node-fetch'); module.exports = { name: 'kick', family: 'team', channels: ['734387503464710165'], description: 'Add user to team', async execute(message) { let targets = message.mentions.members const member_id = message.member.id; if(targets.size == 0){ return message.reply("You must supply at least one member!") }else if(targets.size > 20){ return message.reply("You can add at most 20 users!") } try { await mongoose.connect( mongo_url, {useNewUrlParser: true, useUnifiedTopology: true}, () => null ); }catch (error) { console.log("ERROR WITH MONGODB CONNECTION"); } const user_data = await userModel.find({_id: member_id}, "team_id"); if(user_data[0].team_id === "0"){ return message.reply("You must be in a team to kick a user!"); } const team_data = await teamModel.find({_id: user_data[0].team_id}, "creator board_id mods team_name member_role mod_role"); const team = team_data[0] if(member_id !== team.creator && team.mods.indexOf(member_id) === -1){ return message.reply("You do not have enough privileges for this action!") } let mods = team.mods targets.forEach(async(value, key, map) => { if(key == member_id){ return message.reply("You cannot kick yourself!") }else if (key == team.creator){ return message.reply("You cannot kick the creator!") } let target_data = await userModel.find({_id: key}, "team_id trello_id email"); if(target_data[0].team_id == team._id){ let mod_index = team.mods.indexOf(key) if(mod_index == -1){ value.roles.remove(team.member_role) }else{ value.roles.remove(team.mod_role) mods.splice(mod_index, 1) let result = await teamModel.findOneAndUpdate( {_id: team._id}, {mods: mods}, { new: true, runValidators: true, useFindAndModify: false } ); } let result = await userModel.findOneAndUpdate( {_id: key}, {team_id: "0"}, { new: true, runValidators: true, useFindAndModify: false } ); message.client.users.fetch(key).then((user) => user.send(`You have been kicked from the team ${team.team_name}`)) if(target_data[0].email){ console.log("Deleting user from trello") await fetch(`https://api.trello.com/1/boards/${team.board_id}/members/${target_data[0].trello_id}?key=${trello_key}&token=${trello_token}`, { method: 'DELETE' }) .catch(err => console.error(err)); } message.channel.send(`Kicked user <@${key}>`) }else{ message.channel.send(`Can't kick user <@${key}>`); } }); }, };