diff --git a/src/api/board.ins/routes/root.ts b/src/api/board.ins/routes/root.ts index 675cd71..26d990a 100644 --- a/src/api/board.ins/routes/root.ts +++ b/src/api/board.ins/routes/root.ts @@ -45,7 +45,7 @@ export default class Root extends Route { private genEmbed( id: string, - type: 'eo' | 'motion' | 'proc' | 'res' | 'confirmMotion', + type: 'eo' | 'motion' | 'proc' | 'res' | 'confirmMotion' | 'resFailed', director: { user: StaffInterface, member: Member @@ -126,8 +126,13 @@ export default class Root extends Route { color = 0x4a6cc5; break; + case 'resFailed': + title = 'Resolution Failed'; + color = 0xff474a; + break; + default: - throw new TypeError('You\'ve specified an invalid type for this action log. Valid types: "eo", "motion", "proc" and "res"'); + throw new TypeError('You\'ve specified an invalid type for this action log. Valid types: "eo", "motion", "proc", "res", "confirmMotion", "resFailed"'); } const embed = new RichEmbed(); @@ -1010,14 +1015,22 @@ export default class Root extends Route { confirmationEmbed.addField('Results', `**Total:** ${total.length}\n**Yea:** ${yea}\n**Nay:** ${nay}\n**Present:** ${present}\n**Absent:** ${absent}`); await this.directorLogs.createMessage({ embed: confirmationEmbed }); + const motionMessage = await this.directorLogs.getMessage(motion.msg); + await motionMessage.delete(); + + const issuer = this.guild.members.get(motion.issuer) || await this.guild.getRESTMember(motion.issuer); + const issuerProfile = await this.server.client.db.Staff.findOne({ userID: motion.issuer }); + const totalDirectors = yea + nay + present + absent; if (yea / totalDirectors >= 0.6) { + const resolutionID = genUUID(); + const resolutionEmbed = this.genEmbed( - motion.oID, + resolutionID, 'res', { - user: authenticated.director, - member: authenticated.member, + user: issuerProfile, + member: issuer, }, { subject: motion.subject, @@ -1025,7 +1038,6 @@ export default class Root extends Route { }, ); const resolutionMessage = await this.directorLogs.createMessage({ embed: resolutionEmbed }); - const resolutionID = genUUID(); await this.server.client.db.Resolution.create({ issuer: motion.issuer, @@ -1041,6 +1053,21 @@ export default class Root extends Route { }, msg: resolutionMessage.id, }); + } else { + const resFailedEmbed = this.genEmbed( + motion.oID, + 'resFailed', + { + user: issuerProfile, + member: issuer, + }, + { + subject: motion.subject, + body: motion.body, + }, + ); + + await this.directorLogs.createMessage({ embed: resFailedEmbed }); } res.status(200).json({ diff --git a/src/events/messageReactionAdd.ts b/src/events/messageReactionAdd.ts index bab3cdc..677bf36 100644 --- a/src/events/messageReactionAdd.ts +++ b/src/events/messageReactionAdd.ts @@ -81,7 +81,7 @@ export default class MessageReactionAdd extends Event { const totalDirectors = message.channel.guild.members.filter((member) => member.roles.includes('662163685439045632')); - if (votes.yea / totalDirectors.length >= 0.6) { + if (votes.yea / totalDirectors.length >= 0.6 || (votes.nay + votes.present) / totalDirectors.length >= 0.6) { await proc.updateOne({ processed: true, results: { @@ -92,47 +92,50 @@ export default class MessageReactionAdd extends Event { await message.delete(`Proclamation with ID ${proc.oID} processed.`); + const approved = votes.yea / totalDirectors.length >= 0.6; + const embed = new RichEmbed(); embed.setAuthor(message.embeds[0].author.name, message.embeds[0].author.icon_url); embed.setTitle('Proclamation'); embed.setDescription(`${proc.oID}\n\n_This action is available on the Board Register System Directory. You can make changes or edit it [here](https://board.ins/repository)._\n\n__This proclamation was confirmed at ${new Date().toLocaleString()}.__`); embed.addField('Subject', proc.subject); embed.addField('Body', proc.body); - embed.setColor(0x29b350); + embed.setColor(approved ? 0x29b350 : 0xff474a); embed.setFooter('Library of Code sp-us | Board Register System', 'https://static.libraryofcode.org/library_of_code.png'); embed.setTimestamp(); - this.client.util.transporter.sendMail({ - to: 'all-staff@lists.libraryofcode.org', - from: 'Board Register System ', - subject: `PROCLAMATION ${proc.oID}`, - text: ` - PROCLAMATION ${proc.oID} + if (approved) { + await this.client.util.transporter.sendMail({ + to: 'all-staff@lists.libraryofcode.org', + from: 'Board Register System ', + subject: `PROCLAMATION ${proc.oID}`, + text: ` + PROCLAMATION ${proc.oID} - SPONSOR: - ${message.embeds[0].author.name.split('#').slice(0, 1)}, ${message.embeds[0].author.name.split('#').slice(1).join(' ').split(', ').slice(1).join(', ')} + SPONSOR: + ${message.embeds[0].author.name.split('#').slice(0, 1)}, ${message.embeds[0].author.name.split('#').slice(1).join(' ').split(', ').slice(1).join(', ')} - VOTING RESULTS: - YEA: ${proc.results.yea} - NAY: ${proc.results.nay} - PRESENT ${proc.results.present} + VOTING RESULTS: + YEA: ${proc.results.yea} + NAY: ${proc.results.nay} + PRESENT ${proc.results.present} - SUBJECT: - ${proc.subject} + SUBJECT: + ${proc.subject} - BODY: - ${proc.body} + BODY: + ${proc.body} - _____________________________________________________________________ - LIBRARY OF CODE SP-US | BOARD OF DIRECTORS - BOARD REGISTER SYSTEM https://board.ins/ - `, - }); + _____________________________________________________________________ + LIBRARY OF CODE SP-US | BOARD OF DIRECTORS + BOARD REGISTER SYSTEM https://board.ins/ + `, + }); + } await message.channel.createMessage({ embed }); } } } } -