const { mongo_url, trello_token, trello_key } = require('../config.json'); const { userModel, teamModel, } = require('./schemas.js'); let mongoose = require('mongoose'); var Trello = require('trello-node-api')(trello_key, trello_token); const fetch = require('node-fetch'); const { strict } = require('assert'); const { parse } = require('path'); module.exports = { name: 'quit', family: 'team', channels: ['734387503464710165'], description: 'Quit from a team', async execute(message) { var member_id = message.member.id; try { await mongoose.connect( mongo_url, {useNewUrlParser: true, useUnifiedTopology: true}, () => null); }catch (error) { console.log("could not connect"); } const user_data = await userModel.find({_id: member_id},"team_id trello_id email"); const team_id = user_data[0].team_id if(team_id == '0'){ return message.reply('You must be in a team to quit!'); } const filter = { _id : member_id }; const update = { team_id : '0' }; var def = await userModel.findOneAndUpdate(filter, update,{ new: true, runValidators: true, useFindAndModify: false }); var teamdata = await teamModel.find({ _id :team_id },'member_role mod_role text_channel voice_channel mods board_id'); var team = teamdata[0]; var mods = team.mods; let mod_index = team.mods.indexOf(member_id) if(mod_index === -1){ message.member.roles.remove(team.member_role) }else{ message.member.roles.remove(team.mod_role) mods.splice(mod_index, 1) } teamModel.findOneAndUpdate({_id :team_id},{mods : mods}); if(user_data[0].email){ await fetch(`https://api.trello.com/1/boards/${team.board_id}/members/${user_data[0].trello_id}?key=${trello_key}&token=${trello_token}`, { method: 'DELETE' }) .catch(err => console.error(err)); } let team_members = await userModel.find({team_id: team_id}) if(team_members.length == 0){ message.channel.send("No users left in this team. Deleting"); message.guild.roles.fetch(team.member_role).then((role) => role.delete()); message.guild.roles.fetch(team.mod_role).then((role) => role.delete()); message.client.channels.fetch(team.text_channel).then((channel) => channel.delete()); message.client.channels.fetch(team.voice_channel).then((channel) => channel.delete()); team.mods = mods; let old_team = new teamModel(team); old_team.remove(); Trello.board.del(team.board_id) .catch(function (error) { console.log('error', error); }); } return message.reply('Done!'); }, };