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'); module.exports = { name: 'email', channels: ['dm'], description: 'Update the email address of the user', async execute(message) { let email = message.content.split(" ")[1]; if(!email){ return message.reply("You must supply an email!") } if(!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)){ return message.reply("You must supply an email address, not some other input!."); } var member_id = message.author.id; 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 email trello_id"); if(user_data.length == 0){ return message.reply("You should be a member of the ΞΎ.network discord channel to run this command!") } if(user_data[0].email && user_data[0].team_id !== 0){ console.log("Deleting user") let team_data = await teamModel.find({_id: user_data[0].team_id}, "board_id"); await fetch(`https://api.trello.com/1/boards/${team_data[0].board_id}/members/${user_data[0].trello_id}?key=${trello_key}&token=${trello_token}`, { method: 'DELETE' }) .catch(err => console.error(err)); } if(user_data[0].team_id !== "0"){ let team_data = await teamModel.find({_id: user_data[0].team_id}, "board_id creator"); let type = "normal"; if(team_data[0].creator == member_id){ type = "admin" } let addition = await fetch(`https://api.trello.com/1/boards/${team_data[0].board_id}/members?key=${trello_key}&token=${trello_token}&email=${email}&type=${type}`, { method: 'PUT', }) .catch(err => console.error(err)); let data = await addition.json() let result = await userModel.findOneAndUpdate( {_id: member_id}, {email: email, trello_id: data.memberships[data.memberships.length - 1].idMember}, { new: true, runValidators: true, useFindAndModify: false } ); }else{ userModel.findOneAndUpdate( {_id: member_id}, {email: email}, { new: true, runValidators: true, useFindAndModify: false } ); } message.reply("Email set successfully! You should receive an invite email from trello if you are a member of a team.") }, };