Other stuff
parent
5a9738d560
commit
7ff4afdc15
|
@ -1,3 +0,0 @@
|
||||||
import { Server, ServerManagement } from '../../class';
|
|
||||||
|
|
||||||
export default (management: ServerManagement) => new Server(management, 3892, `${__dirname}/routes`);
|
|
|
@ -1 +0,0 @@
|
||||||
export { default as Root } from './root';
|
|
|
@ -1,834 +0,0 @@
|
||||||
import { TextChannel } from 'eris';
|
|
||||||
import { v4 as genUUID } from 'uuid';
|
|
||||||
import { Request, Response } from 'express';
|
|
||||||
import { RichEmbed, Route, Server } from '../../../class';
|
|
||||||
|
|
||||||
export default class Root extends Route {
|
|
||||||
constructor(server: Server) {
|
|
||||||
super(server);
|
|
||||||
this.conf = {
|
|
||||||
path: '/',
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public bind() {
|
|
||||||
this.router.post('/eo', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
|
|
||||||
if (!director || !staffGuild.members.get(director.userID)?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof req.body.subject !== 'string' || typeof req.body.body !== 'string' || req.body.subject.length > 1024 || req.body.body.length > 1024) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const eoID = genUUID();
|
|
||||||
|
|
||||||
const directorDiscord = this.server.client.users.get(director.userID) || await this.server.client.getRESTUser(director.userID);
|
|
||||||
const directorInformation = await this.server.client.db.Staff.findOne({ userID: director.userID });
|
|
||||||
|
|
||||||
const embed = new RichEmbed();
|
|
||||||
embed.setTitle('Executive Order');
|
|
||||||
embed.setAuthor(`${directorDiscord.username}#${directorDiscord.discriminator}, ${directorInformation.pn.join(', ')}`, directorDiscord.avatarURL);
|
|
||||||
embed.setColor('#dd3acd');
|
|
||||||
embed.addField('Subject', req.body.subject);
|
|
||||||
embed.addField('Body', req.body.body);
|
|
||||||
embed.setDescription(eoID);
|
|
||||||
embed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
const channel = <TextChannel>this.server.client.getChannel('807444198969835550');
|
|
||||||
const msg = await channel.createMessage({ embed });
|
|
||||||
|
|
||||||
const executiveOrder = await this.server.client.db.ExecutiveOrder.create({
|
|
||||||
issuer: director.userID,
|
|
||||||
subject: req.body.subject,
|
|
||||||
body: req.body.body,
|
|
||||||
at: Date.now(),
|
|
||||||
oID: eoID,
|
|
||||||
msg: msg.id,
|
|
||||||
});
|
|
||||||
|
|
||||||
res.status(200).json({
|
|
||||||
code: this.constants.codes.SUCCESS,
|
|
||||||
message: `Created new Executive Order with ID ${executiveOrder.oID} by ${directorDiscord.username}#${directorDiscord.discriminator}, ${directorInformation.pn.join(', ')}.`,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.post('/motion', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
|
|
||||||
if (!director || !staffGuild.members.get(director.userID)?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof req.body.subject !== 'string' || typeof req.body.body !== 'string' || req.body.subject.length > 1024 || req.body.body.length > 1024) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const motionID = genUUID();
|
|
||||||
|
|
||||||
const directorDiscord = this.server.client.users.get(director.userID) || await this.server.client.getRESTUser(director.userID);
|
|
||||||
const directorInformation = await this.server.client.db.Staff.findOne({ userID: director.userID });
|
|
||||||
|
|
||||||
const embed = new RichEmbed();
|
|
||||||
embed.setTitle('Motion');
|
|
||||||
embed.setAuthor(`${directorDiscord.username}#${directorDiscord.discriminator}, ${directorInformation.pn.join(', ')}`, directorDiscord.avatarURL);
|
|
||||||
embed.setColor('#dd3acd');
|
|
||||||
embed.addField('Subject', req.body.subject);
|
|
||||||
embed.addField('Body', req.body.body);
|
|
||||||
embed.setDescription(motionID);
|
|
||||||
embed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
const channel = <TextChannel>this.server.client.getChannel('807444198969835550');
|
|
||||||
const msg = await channel.createMessage({ embed });
|
|
||||||
|
|
||||||
const motion = await this.server.client.db.Motion.create({
|
|
||||||
issuer: director.userID,
|
|
||||||
subject: req.body.subject,
|
|
||||||
body: req.body.body,
|
|
||||||
at: Date.now(),
|
|
||||||
oID: motionID,
|
|
||||||
msg: msg.id,
|
|
||||||
processed: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
res.status(200).json({
|
|
||||||
code: this.constants.codes.SUCCESS,
|
|
||||||
message: `Created new Motion with ID ${motion.oID} by ${directorDiscord.username}#${directorDiscord.discriminator}, ${directorInformation.pn.join(', ')}.`,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.post('/proc', async (req: Request, res: Response) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
|
|
||||||
if (!director || !staffGuild.members.get(director.userID)?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof req.body.subject !== 'string' || typeof req.body.body !== 'string' || req.body.subject.length > 1024 || req.body.body.length > 1024) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const proclamationID = genUUID();
|
|
||||||
|
|
||||||
const directorDiscord = this.server.client.users.get(director.userID) || await this.server.client.getRESTUser(director.userID);
|
|
||||||
const directorInformation = await this.server.client.db.Staff.findOne({ userID: director.userID });
|
|
||||||
|
|
||||||
const embed = new RichEmbed();
|
|
||||||
embed.setTitle('Proclamation');
|
|
||||||
embed.setAuthor(`${directorDiscord.username}#${directorDiscord.discriminator}, ${directorInformation.pn.join(', ')}`, directorDiscord.avatarURL);
|
|
||||||
embed.setColor('#66e1ff');
|
|
||||||
embed.addField('Subject', req.body.subject);
|
|
||||||
embed.addField('Body', req.body.body);
|
|
||||||
embed.setDescription(proclamationID);
|
|
||||||
embed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
const channel = <TextChannel>this.server.client.getChannel('807444198969835550');
|
|
||||||
const procMessage = await channel.createMessage({ embed });
|
|
||||||
await procMessage.addReaction('modSuccess:578750988907970567');
|
|
||||||
await procMessage.addReaction('modError:578750737920688128');
|
|
||||||
await procMessage.addReaction('🙋');
|
|
||||||
|
|
||||||
const proclamation = await this.server.client.db.Proclamation.create({
|
|
||||||
issuer: director.userID,
|
|
||||||
subject: req.body.subject,
|
|
||||||
body: req.body.body,
|
|
||||||
at: Date.now(),
|
|
||||||
oID: proclamationID,
|
|
||||||
processed: false,
|
|
||||||
msg: procMessage.id,
|
|
||||||
});
|
|
||||||
|
|
||||||
res.status(200).json({
|
|
||||||
code: this.constants.codes.SUCCESS,
|
|
||||||
message: `Created new Proclamation with ID ${proclamation.oID} by ${directorDiscord.username}#${directorDiscord.discriminator}, ${directorInformation.pn.join(', ')}.`,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.delete('/eo/:id', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
|
|
||||||
if (!director || !staffGuild.members.get(director.userID)?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(await this.server.client.db.ExecutiveOrder.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const executiveOrder = await this.server.client.db.ExecutiveOrder.findOne({ oID: req.params.id });
|
|
||||||
|
|
||||||
if (!['278620217221971968', executiveOrder.issuer].includes(director.userID)) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await executiveOrder.delete();
|
|
||||||
|
|
||||||
res.status(200).json({ message: `Executive Order with ID ${req.params.id} deleted.` });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.delete('/motion/:id', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
|
|
||||||
if (!director || !staffGuild.members.get(director.userID)?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(await this.server.client.db.Motion.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const motion = await this.server.client.db.Motion.findOne({ oID: req.params.id });
|
|
||||||
|
|
||||||
if (!['278620217221971968', motion.issuer].includes(director.userID)) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await motion.delete();
|
|
||||||
|
|
||||||
res.status(200).json({ message: `Motion with ID ${req.params.id} deleted.` });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.delete('/proc/:id', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
|
|
||||||
if (!director || !staffGuild.members.get(director.userID)?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.Proclamation.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const proclamation = await this.server.client.db.Proclamation.findOne({ oID: req.params.id });
|
|
||||||
|
|
||||||
if (!['278620217221971968', proclamation.issuer].includes(director.userID)) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await proclamation.delete();
|
|
||||||
|
|
||||||
res.status(200).json({ message: `Proclamation with ID ${req.params.id} deleted.` });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.get('/eo/:id', async (req, res) => {
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.ExecutiveOrder.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const executiveOrder = await this.server.client.db.ExecutiveOrder.findOne({ oID: req.params.id }).lean();
|
|
||||||
|
|
||||||
res.status(200).json(executiveOrder);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.get('/motion/:id', async (req, res) => {
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.Motion.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const motion = await this.server.client.db.Motion.findOne({ oID: req.params.id }).lean();
|
|
||||||
|
|
||||||
res.status(200).json(motion);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.get('/proc/:id', async (req: Request, res: Response) => {
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.Proclamation.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const proclamation = await this.server.client.db.Proclamation.findOne({ oID: req.params.id }).lean();
|
|
||||||
|
|
||||||
res.status(200).json(proclamation);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.get('/resolution/:id', async (req, res) => {
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.Resolution.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const resolution = await this.server.client.db.Resolution.findOne({ oID: req.params.id }).lean();
|
|
||||||
|
|
||||||
res.status(200).json(resolution);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.patch('/eo/:id', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
const directorDiscord = staffGuild.members.get(director.userID);
|
|
||||||
|
|
||||||
if (!director || !directorDiscord?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.ExecutiveOrder.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (typeof req.body.subject !== 'string' || typeof req.body.body !== 'string' || req.body.subject.length > 1024 || req.body.body.length > 1024) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const executiveOrder = await this.server.client.db.ExecutiveOrder.findOne({ oID: req.params.id });
|
|
||||||
|
|
||||||
if (!['278620217221971968', executiveOrder.issuer].includes(director.userID)) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await executiveOrder.updateOne({
|
|
||||||
subject: req.body.subject || executiveOrder.subject,
|
|
||||||
body: req.body.body || executiveOrder.body,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (executiveOrder.subject !== req.body.subject || executiveOrder.body !== req.body.body) {
|
|
||||||
const channel = <TextChannel>this.server.client.getChannel('807444198969835550');
|
|
||||||
const eoMessage = await channel.getMessage(executiveOrder.msg);
|
|
||||||
|
|
||||||
const embed = new RichEmbed();
|
|
||||||
embed.setTitle('Executive Order');
|
|
||||||
embed.author = eoMessage.embeds[0].author;
|
|
||||||
embed.setColor('#66e1ff');
|
|
||||||
embed.addField('Subject', req.body.subject || executiveOrder.subject);
|
|
||||||
embed.addField('Body', req.body.body || executiveOrder.body);
|
|
||||||
embed.setDescription(req.params.id);
|
|
||||||
embed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
await eoMessage.edit({ embed });
|
|
||||||
}
|
|
||||||
|
|
||||||
res.status(200).json({ message: `Updated Executive Order with ID ${executiveOrder.oID}.` });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.patch('/motion/:id', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
const directorDiscord = staffGuild.members.get(director.userID);
|
|
||||||
|
|
||||||
if (!director || !directorDiscord?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.Motion.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (typeof req.body.subject !== 'string' || typeof req.body.body !== 'string' || req.body.subject.length > 1024 || req.body.body.length > 1024) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const motion = await this.server.client.db.Motion.findOne({ oID: req.params.id });
|
|
||||||
|
|
||||||
if (!['278620217221971968', motion.issuer].includes(director.userID)) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await motion.updateOne({
|
|
||||||
subject: req.body.subject || motion.subject,
|
|
||||||
body: req.body.body || motion.body,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (motion.subject !== req.body.subject || motion.body !== req.body.body) {
|
|
||||||
const channel = <TextChannel>this.server.client.getChannel('807444198969835550');
|
|
||||||
const motionMessage = await channel.getMessage(motion.msg);
|
|
||||||
|
|
||||||
const embed = new RichEmbed();
|
|
||||||
embed.setTitle('Motion');
|
|
||||||
embed.author = motionMessage.embeds[0].author;
|
|
||||||
embed.setColor('#66e1ff');
|
|
||||||
embed.addField('Subject', req.body.subject || motion.subject);
|
|
||||||
embed.addField('Body', req.body.body || motion.body);
|
|
||||||
embed.setDescription(req.params.id);
|
|
||||||
embed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
await motionMessage.edit({ embed });
|
|
||||||
}
|
|
||||||
|
|
||||||
res.status(200).json({ message: `Updated Motion with ID ${motion.oID}.` });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.patch('/proc/:id', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
const directorDiscord = staffGuild.members.get(director.userID);
|
|
||||||
|
|
||||||
if (!director || !directorDiscord?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.Proclamation.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (typeof req.body.subject !== 'string' || typeof req.body.body !== 'string' || req.body.subject.length > 1024 || req.body.body.length > 1024) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const proclamation = await this.server.client.db.Proclamation.findOne({ oID: req.params.id });
|
|
||||||
|
|
||||||
if (!['278620217221971968', proclamation.issuer].includes(director.userID)) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await proclamation.updateOne({
|
|
||||||
subject: req.body.subject || proclamation.subject,
|
|
||||||
body: req.body.body || proclamation.body,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (proclamation.subject !== req.body.subject || proclamation.body !== req.body.body) {
|
|
||||||
const channel = <TextChannel>this.server.client.getChannel('807444198969835550');
|
|
||||||
const procMessage = await channel.getMessage(proclamation.msg);
|
|
||||||
|
|
||||||
const embed = new RichEmbed();
|
|
||||||
embed.setTitle('Proclamation');
|
|
||||||
embed.author = procMessage.embeds[0].author;
|
|
||||||
embed.setColor('#66e1ff');
|
|
||||||
embed.addField('Subject', req.body.subject || proclamation.subject);
|
|
||||||
embed.addField('Body', req.body.body || proclamation.body);
|
|
||||||
embed.setDescription(req.params.id);
|
|
||||||
embed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
await procMessage.edit({ embed });
|
|
||||||
}
|
|
||||||
|
|
||||||
res.status(200).json({ message: `Updated Proclamation with ID ${proclamation.oID}.` });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.patch('/resolution/:id', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
const directorDiscord = staffGuild.members.get(director.userID);
|
|
||||||
|
|
||||||
if (!director || !directorDiscord?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.Resolution.exists({ oID: req.params.id }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (typeof req.body.subject !== 'string' || typeof req.body.body !== 'string' || req.body.subject.length > 1024 || req.body.body.length > 1024) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const resolution = await this.server.client.db.Resolution.findOne({ oID: req.params.id });
|
|
||||||
|
|
||||||
if (!['278620217221971968', resolution.issuer].includes(director.userID)) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await resolution.updateOne({
|
|
||||||
subject: req.body.subject || resolution.subject,
|
|
||||||
body: req.body.body || resolution.body,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (resolution.subject !== req.body.subject || resolution.body !== req.body.body) {
|
|
||||||
const channel = <TextChannel>this.server.client.getChannel('807444198969835550');
|
|
||||||
const resMessage = await channel.getMessage(resolution.msg);
|
|
||||||
|
|
||||||
const embed = new RichEmbed();
|
|
||||||
embed.setTitle('Resolution');
|
|
||||||
embed.author = resMessage.embeds[0].author;
|
|
||||||
embed.setColor('#75b0ff');
|
|
||||||
embed.addField('Subject', req.body.subject || resolution.subject);
|
|
||||||
embed.addField('Body', req.body.body || resolution.body);
|
|
||||||
embed.setDescription(req.params.id);
|
|
||||||
embed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
await resMessage.edit({
|
|
||||||
content: `<@!${resolution.issuer}>`,
|
|
||||||
embed,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
res.status(200).json({ message: `Updated Resolution with ID ${resolution.oID}.` });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.get('/eo', async (_req, res) => {
|
|
||||||
const executiveOrders = await this.server.client.db.ExecutiveOrder.find().lean();
|
|
||||||
|
|
||||||
|
|
||||||
res.status(200).json(executiveOrders);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.get('/motion', async (_req, res) => {
|
|
||||||
const motions = await this.server.client.db.Motion.find().lean();
|
|
||||||
|
|
||||||
res.status(200).json(motions);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.get('/proc', async (_req: Request, res: Response) => {
|
|
||||||
const proclamations = await this.server.client.db.Proclamation.find().lean();
|
|
||||||
|
|
||||||
res.status(200).send({ proclamations });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.get('/resolution', async (_req, res) => {
|
|
||||||
const resolutions = await this.server.client.db.Resolution.find().lean();
|
|
||||||
|
|
||||||
res.status(200).json(resolutions);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.router.patch('/motion/confirm/:id', async (req, res) => {
|
|
||||||
if (!req.headers.authorization) {
|
|
||||||
return res.status(401).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const users = await this.server.client.db.Score.find();
|
|
||||||
const director = users.filter((user) => user.pin.join('-') === req.headers.authorization)[0];
|
|
||||||
const staffGuild = this.server.client.guilds.get(this.server.client.config.guildID) || await this.server.client.getRESTGuild(this.server.client.config.guildID);
|
|
||||||
const directorDiscord = staffGuild.members.get(director.userID);
|
|
||||||
|
|
||||||
if (!director || !directorDiscord?.roles?.includes('662163685439045632')) {
|
|
||||||
return res.status(403).json({
|
|
||||||
code: this.constants.codes.UNAUTHORIZED,
|
|
||||||
message: this.constants.messages.UNAUTHORIZED,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!req.params.id) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!(await this.server.client.db.Motion.exists({ oID: req.params.id, processed: false }))) {
|
|
||||||
return res.status(404).json({
|
|
||||||
code: this.constants.codes.NOT_FOUND,
|
|
||||||
message: this.constants.messages.NOT_FOUND,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const yea = Number(req.body.yea);
|
|
||||||
const nay = Number(req.body.nay);
|
|
||||||
const present = Number(req.body.present);
|
|
||||||
const absent = Number(req.body.absent);
|
|
||||||
|
|
||||||
if (Number.isNaN(yea) || Number.isNaN(nay) || Number.isNaN(present) || Number.isNaN(absent)) {
|
|
||||||
return res.status(400).json({
|
|
||||||
code: this.constants.codes.CLIENT_ERROR,
|
|
||||||
message: this.constants.messages.CLIENT_ERROR,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const motion = await this.server.client.db.Motion.findOne({ oID: req.params.id });
|
|
||||||
await motion.updateOne({
|
|
||||||
processed: true,
|
|
||||||
results: {
|
|
||||||
yea,
|
|
||||||
nay,
|
|
||||||
present,
|
|
||||||
absent,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const directorStaffProfile = await this.server.client.db.Staff.findOne({ userID: directorDiscord.id });
|
|
||||||
|
|
||||||
const channel = <TextChannel>this.server.client.getChannel('807444198969835550');
|
|
||||||
|
|
||||||
const embed = new RichEmbed();
|
|
||||||
embed.setTitle('Motion Confirmed');
|
|
||||||
embed.setAuthor(`${directorDiscord.username}#${directorDiscord.discriminator}, ${directorStaffProfile.pn.join(', ')}`, directorDiscord.avatarURL);
|
|
||||||
embed.setColor('#27b17a');
|
|
||||||
embed.addField('Subject', motion.subject);
|
|
||||||
embed.addField('Body', motion.body);
|
|
||||||
embed.addField('Results', `Yea: ${yea}\nNay: ${nay}\nPresent: ${present}\nAbsent: ${absent}`);
|
|
||||||
embed.setDescription(motion.oID);
|
|
||||||
embed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
await channel.createMessage({ embed });
|
|
||||||
|
|
||||||
const excludingYea = nay + present + absent;
|
|
||||||
if (yea > excludingYea) {
|
|
||||||
const resolutionEmbed = new RichEmbed();
|
|
||||||
resolutionEmbed.setTitle('Resolution');
|
|
||||||
resolutionEmbed.setAuthor(`${directorDiscord.username}#${directorDiscord.discriminator}, ${directorStaffProfile.pn.join(', ')}`, directorDiscord.avatarURL);
|
|
||||||
resolutionEmbed.setColor('#75b0ff');
|
|
||||||
resolutionEmbed.addField('Subject', motion.subject);
|
|
||||||
resolutionEmbed.addField('Body', motion.body);
|
|
||||||
resolutionEmbed.addField('Director', `<@!${motion.issuer}>`);
|
|
||||||
resolutionEmbed.setDescription(motion.oID);
|
|
||||||
resolutionEmbed.setTimestamp(new Date());
|
|
||||||
|
|
||||||
const resMsg = await channel.createMessage({
|
|
||||||
content: `<@!${motion.issuer}>`,
|
|
||||||
embed: resolutionEmbed,
|
|
||||||
});
|
|
||||||
|
|
||||||
await this.server.client.db.Resolution.create({
|
|
||||||
issuer: motion.issuer,
|
|
||||||
subject: motion.subject,
|
|
||||||
body: motion.body,
|
|
||||||
at: Date.now(),
|
|
||||||
oID: motion.oID,
|
|
||||||
results: {
|
|
||||||
yea,
|
|
||||||
nay,
|
|
||||||
present,
|
|
||||||
absent,
|
|
||||||
},
|
|
||||||
msg: resMsg.id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
res.status(200).json({ message: `Confirmed results of motion with ID ${motion.oID}.` });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,10 +1,8 @@
|
||||||
import locsh from './loc.sh/main';
|
import locsh from './loc.sh/main';
|
||||||
import crins from './cr.ins/main';
|
import crins from './cr.ins/main';
|
||||||
import commlibraryofcodeorg from './comm.libraryofcode.org/main';
|
import commlibraryofcodeorg from './comm.libraryofcode.org/main';
|
||||||
import boardins from './board.ins/main';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
'board.ins': boardins,
|
|
||||||
'loc.sh': locsh,
|
'loc.sh': locsh,
|
||||||
'cr.ins': crins,
|
'cr.ins': crins,
|
||||||
'comm.libraryofcode.org': commlibraryofcodeorg,
|
'comm.libraryofcode.org': commlibraryofcodeorg,
|
||||||
|
|
|
@ -80,22 +80,7 @@ export default class Whois extends Command {
|
||||||
embed.addField('Created At', `${moment(new Date(member.user.createdAt)).format('dddd, MMMM Do YYYY, h:mm:ss A')} ET`, true);
|
embed.addField('Created At', `${moment(new Date(member.user.createdAt)).format('dddd, MMMM Do YYYY, h:mm:ss A')} ET`, true);
|
||||||
const score = await this.client.db.Score.findOne({ userID: member.id }).lean().exec();
|
const score = await this.client.db.Score.findOne({ userID: member.id }).lean().exec();
|
||||||
if (score) {
|
if (score) {
|
||||||
<<<<<<< HEAD
|
|
||||||
await this.client.db.Score.updateOne({ userID: member.id }, { $addToSet: { softInquiries: { name: 'Library of Code sp-us | Bureau of Community Reports', date: new Date() } } });
|
|
||||||
const embed2 = new RichEmbed();
|
|
||||||
embed2.setTitle('Inquiry Notification');
|
|
||||||
embed2.setColor('#00FFFF');
|
|
||||||
const mem = this.client.util.resolveMember(score.userID, this.client.guilds.get(this.client.config.guildID));
|
|
||||||
embed2.addField('Member', `${mem.user.username}#${mem.user.discriminator} | <@${score.userID}>`, true);
|
|
||||||
embed2.addField('Type', 'SOFT', true);
|
|
||||||
embed2.addField('Department/Service', 'Library of Code sp-us | Bureau of Community Reports'.toUpperCase(), true);
|
|
||||||
embed2.setTimestamp();
|
|
||||||
embed2.setFooter(this.client.user.username, this.client.user.avatarURL);
|
|
||||||
const log = <TextChannel>this.client.guilds.get(this.client.config.guildID).channels.get('611584771356622849');
|
|
||||||
log.createMessage({ embed: embed2 }).catch(() => { });
|
|
||||||
=======
|
|
||||||
await this.client.report.createInquiry(member.id, 'Library of Code sp-us | Bureau of Community Reports', 1);
|
await this.client.report.createInquiry(member.id, 'Library of Code sp-us | Bureau of Community Reports', 1);
|
||||||
>>>>>>> upstream/master
|
|
||||||
let totalScore = '0';
|
let totalScore = '0';
|
||||||
if (score.total < 200) totalScore = '---';
|
if (score.total < 200) totalScore = '---';
|
||||||
else if (score.total > 800) totalScore = '800';
|
else if (score.total > 800) totalScore = '800';
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
export { default as CallBackHandler } from './CallBackHandler';
|
export { default as CallBackHandler } from './CallBackHandler';
|
||||||
export { default as CommandHandler } from './CommandHandler';
|
export { default as CommandHandler } from './CommandHandler';
|
||||||
export { default as guildMemberAdd } from './guildMemberAdd';
|
export { default as guildMemberAdd } from './guildMemberAdd';
|
||||||
export { default as messageReactionAdd } from './messageReactionAdd';
|
|
||||||
export { default as ready } from './ready';
|
export { default as ready } from './ready';
|
||||||
export { default as Training } from './Training';
|
export { default as Training } from './Training';
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
import { Emoji, GuildTextableChannel, Member, Message } from 'eris';
|
|
||||||
import { Client, Event } from '../class';
|
|
||||||
|
|
||||||
export default class MessageReactionAdd extends Event {
|
|
||||||
public client: Client;
|
|
||||||
|
|
||||||
constructor(client: Client) {
|
|
||||||
super(client);
|
|
||||||
this.event = 'messageReactionAdd';
|
|
||||||
}
|
|
||||||
|
|
||||||
public async run(message: Message<GuildTextableChannel>, _emoji: Emoji, reactor: Member) {
|
|
||||||
if (message.channel.id !== '807444198969835550') return;
|
|
||||||
if (message.author.id !== this.client.user.id) return;
|
|
||||||
|
|
||||||
if (!reactor.roles[0]) {
|
|
||||||
reactor = await message.channel.guild.getRESTMember(reactor.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reactor.roles.includes('662163685439045632')) return;
|
|
||||||
|
|
||||||
if ((await this.client.db.Proclamation.exists({ msg: message.id, processed: false }))) {
|
|
||||||
let yea = await message.getReaction('modSuccess:578750988907970567');
|
|
||||||
yea = yea.filter((val) => !val.bot);
|
|
||||||
let nay = await message.getReaction('modError:578750737920688128');
|
|
||||||
nay = nay.filter((val) => !val.bot);
|
|
||||||
let present = await message.getReaction('🙋');
|
|
||||||
present = present.filter((val) => !val.bot);
|
|
||||||
const totalDirectors = 6;
|
|
||||||
const proc = await this.client.db.Proclamation.findOne({ msg: message.id });
|
|
||||||
if (proc.votedDirectors?.includes(message.author.id)) return;
|
|
||||||
const processed = totalDirectors === (yea.length + nay.length + present.length) || Date.now() - proc.at > 604800000;
|
|
||||||
const absent = totalDirectors - (yea.length + nay.length + present.length);
|
|
||||||
|
|
||||||
await proc.updateOne({
|
|
||||||
results: {
|
|
||||||
yea: yea.length,
|
|
||||||
nay: nay.length,
|
|
||||||
present: present.length,
|
|
||||||
absent,
|
|
||||||
},
|
|
||||||
processed,
|
|
||||||
votedDirectors: [...(proc.votedDirectors || []), message.author.id],
|
|
||||||
});
|
|
||||||
const inTheMajority = yea.length > nay.length + present.length;
|
|
||||||
|
|
||||||
if (processed) {
|
|
||||||
const author = this.client.users.get(proc.issuer) || await this.client.getRESTUser(proc.issuer);
|
|
||||||
|
|
||||||
if (inTheMajority) {
|
|
||||||
await author.createMessage(`__**Proclamation Majority Vote Received**__\nThe Proclamation you created at Library of Code sp-us, titled **${proc.subject}** (\`${proc.oID}\`) received the majority vote.`);
|
|
||||||
await message.channel.createMessage(`__**Proclamation Results**__\nProclamation issued by ${author.mention} **received** the majority vote. Proclamation ID: ${proc.oID}\n\n__Results:__\n**Yea:** ${yea.length}\n**Nay:** ${nay.length}\n**Present:** ${present.length}\n**Absent:** ${absent}`);
|
|
||||||
} else {
|
|
||||||
await author.createMessage(`__**Proclamation Majority Vote Lost**__\nThe Proclamation you created at Library of Code sp-us, titled **${proc.subject}** (\`${proc.oID}\`) lost the majority vote.`);
|
|
||||||
await message.channel.createMessage(`__**Proclamation Results**__\nProclamation issued by ${author.mention} **lost** the majority vote. Proclamation ID: ${proc.oID}\n\n__Results:__\n**Yea:** ${yea.length}\n**Nay:** ${nay.length}\n**Present:** ${present.length}\n**Absent:** ${absent}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await reactor.user.createMessage(`__**Vote Recorded**__\nYour vote on the proclamation with ID \`${proc.id}\` at Library of Code sp-us was successfully recorded.`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
import { Document, model, Schema } from 'mongoose';
|
|
||||||
|
|
||||||
export interface ExecutiveOrderInterface extends Document {
|
|
||||||
issuer: string;
|
|
||||||
subject: string;
|
|
||||||
body: string;
|
|
||||||
at: number;
|
|
||||||
oID: string;
|
|
||||||
msg: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ExecutiveOrder = new Schema({
|
|
||||||
issuer: { type: String, required: true },
|
|
||||||
subject: { type: String, required: true },
|
|
||||||
body: { type: String, required: true },
|
|
||||||
at: { type: Number, required: true },
|
|
||||||
oID: { type: String, required: true, unique: true },
|
|
||||||
msg: { type: String, required: true, unique: true },
|
|
||||||
});
|
|
||||||
|
|
||||||
export default model<ExecutiveOrderInterface>('ExecutiveOrders', ExecutiveOrder);
|
|
|
@ -1,35 +0,0 @@
|
||||||
import { Document, model, Schema } from 'mongoose';
|
|
||||||
|
|
||||||
export interface MotionInterface extends Document {
|
|
||||||
issuer: string;
|
|
||||||
subject: string;
|
|
||||||
body: string;
|
|
||||||
at: number;
|
|
||||||
oID: string;
|
|
||||||
results: {
|
|
||||||
yea: number;
|
|
||||||
nay: number;
|
|
||||||
present: number;
|
|
||||||
absent: number;
|
|
||||||
};
|
|
||||||
processed: boolean;
|
|
||||||
msg: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Motion = new Schema({
|
|
||||||
issuer: { type: String, required: true },
|
|
||||||
subject: { type: String, required: true },
|
|
||||||
body: { type: String, required: true },
|
|
||||||
at: { type: Number, required: true },
|
|
||||||
oID: { type: String, required: true, unique: true },
|
|
||||||
results: {
|
|
||||||
yea: Number,
|
|
||||||
nay: Number,
|
|
||||||
present: Number,
|
|
||||||
absent: Number,
|
|
||||||
},
|
|
||||||
processed: Boolean,
|
|
||||||
msg: { required: true, unique: true, type: String },
|
|
||||||
});
|
|
||||||
|
|
||||||
export default model<MotionInterface>('Motions', Motion);
|
|
|
@ -1,39 +0,0 @@
|
||||||
import { Document, model, Schema } from 'mongoose';
|
|
||||||
|
|
||||||
export interface ProclamationInterface extends Document {
|
|
||||||
issuer: string;
|
|
||||||
subject: string;
|
|
||||||
body: string;
|
|
||||||
at: number;
|
|
||||||
oID: string;
|
|
||||||
results: {
|
|
||||||
yea: number;
|
|
||||||
nay: number;
|
|
||||||
present: number;
|
|
||||||
absent: number;
|
|
||||||
};
|
|
||||||
acceptedAt: number;
|
|
||||||
msg: string;
|
|
||||||
processed: boolean;
|
|
||||||
votedDirectors: string[];
|
|
||||||
}
|
|
||||||
|
|
||||||
const Proclamation = new Schema({
|
|
||||||
issuer: { type: String, required: true },
|
|
||||||
subject: { type: String, required: true },
|
|
||||||
body: { type: String, required: true },
|
|
||||||
at: { type: Number, required: true },
|
|
||||||
oID: { type: String, required: true, unique: true },
|
|
||||||
results: {
|
|
||||||
yea: Number,
|
|
||||||
nay: Number,
|
|
||||||
present: Number,
|
|
||||||
absent: Number,
|
|
||||||
},
|
|
||||||
acceptedAt: Number,
|
|
||||||
msg: { type: String, required: true, unique: true },
|
|
||||||
processed: Boolean,
|
|
||||||
votedDirectors: Array,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default model<ProclamationInterface>('Proclamations', Proclamation);
|
|
|
@ -1,33 +0,0 @@
|
||||||
import { Document, model, Schema } from 'mongoose';
|
|
||||||
|
|
||||||
export interface ResolutionInterface extends Document {
|
|
||||||
issuer: string;
|
|
||||||
subject: string;
|
|
||||||
body: string;
|
|
||||||
at: number;
|
|
||||||
oID: string;
|
|
||||||
results: {
|
|
||||||
yea: number;
|
|
||||||
nay: number;
|
|
||||||
present: number;
|
|
||||||
absent: number;
|
|
||||||
};
|
|
||||||
msg: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Resolution = new Schema({
|
|
||||||
issuer: { type: String, required: true },
|
|
||||||
subject: { type: String, required: true },
|
|
||||||
body: { type: String, required: true },
|
|
||||||
at: { type: Number, required: true },
|
|
||||||
oID: { type: String, required: true, unique: true },
|
|
||||||
results: {
|
|
||||||
yea: Number,
|
|
||||||
Nay: Number,
|
|
||||||
present: Number,
|
|
||||||
absent: Number,
|
|
||||||
},
|
|
||||||
msg: { type: String, required: true, unique: true },
|
|
||||||
});
|
|
||||||
|
|
||||||
export default model<ResolutionInterface>('Resolutions', Resolution);
|
|
Loading…
Reference in New Issue