mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2024-11-05 20:33:08 +02:00
112 lines
2.8 KiB
JavaScript
112 lines
2.8 KiB
JavaScript
|
const Command = require('../modules/commands/command');
|
|||
|
// eslint-disable-next-line no-unused-vars
|
|||
|
const { MessageAttachment, MessageEmbed, Message } = require('discord.js');
|
|||
|
const fsp = require('fs').promises;
|
|||
|
const { path } = require('../utils/fs');
|
|||
|
const mustache = require('mustache');
|
|||
|
|
|||
|
module.exports = class SurveyCommand extends Command {
|
|||
|
constructor(client) {
|
|||
|
const i18n = client.i18n.getLocale(client.config.locale);
|
|||
|
super(client, {
|
|||
|
internal: true,
|
|||
|
name: i18n('commands.survey.name'),
|
|||
|
description: i18n('commands.survey.description'),
|
|||
|
aliases: [
|
|||
|
i18n('commands.survey.aliases.surveys')
|
|||
|
],
|
|||
|
process_args: false,
|
|||
|
args: [
|
|||
|
{
|
|||
|
name: i18n('commands.survey.args.survey.name'),
|
|||
|
description: i18n('commands.survey.args.survey.description'),
|
|||
|
example: i18n('commands.survey.args.survey.example'),
|
|||
|
required: false,
|
|||
|
}
|
|||
|
],
|
|||
|
staff_only: true
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @param {Message} message
|
|||
|
* @param {string} args
|
|||
|
* @returns {Promise<void|any>}
|
|||
|
*/
|
|||
|
async execute(message, args) {
|
|||
|
const settings = await message.guild.settings;
|
|||
|
const i18n = this.client.i18n.getLocale(settings.locale);
|
|||
|
|
|||
|
const survey = await this.client.db.models.Survey.findOne({
|
|||
|
where: {
|
|||
|
name: args,
|
|||
|
guild: message.guild.id
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
if (survey) {
|
|||
|
const { rows: responses, count } = await this.client.db.models.SurveyResponse.findAndCountAll({
|
|||
|
where: {
|
|||
|
survey: survey.id
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
const users = new Set();
|
|||
|
|
|||
|
|
|||
|
for (const i in responses) {
|
|||
|
const ticket = await this.client.db.models.Ticket.findOne({
|
|||
|
where: {
|
|||
|
id: responses[i].ticket
|
|||
|
}
|
|||
|
});
|
|||
|
users.add(ticket.creator);
|
|||
|
const answers = responses[i].answers.map(a => this.client.cryptr.decrypt(a));
|
|||
|
answers.unshift(ticket.number);
|
|||
|
responses[i] = answers;
|
|||
|
}
|
|||
|
|
|||
|
let template = await fsp.readFile(path('./src/commands/extra/survey.template.html'), {
|
|||
|
encoding: 'utf8'
|
|||
|
});
|
|||
|
|
|||
|
template = template.replace(/\n|\t/, '');
|
|||
|
|
|||
|
survey.questions.unshift('Ticket #');
|
|||
|
|
|||
|
const html = mustache.render(template, {
|
|||
|
survey: survey.name.charAt(0).toUpperCase() + survey.name.slice(1),
|
|||
|
count: {
|
|||
|
responses: count,
|
|||
|
users: users.size
|
|||
|
},
|
|||
|
columns: survey.questions,
|
|||
|
responses
|
|||
|
});
|
|||
|
|
|||
|
const attachment = new MessageAttachment(
|
|||
|
Buffer.from(html),
|
|||
|
`${survey.name}.html`
|
|||
|
);
|
|||
|
|
|||
|
return await message.channel.send({
|
|||
|
files: [attachment]
|
|||
|
});
|
|||
|
} else {
|
|||
|
const surveys = await this.client.db.models.Survey.findAll({
|
|||
|
where: {
|
|||
|
guild: message.guild.id
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
const list = surveys.map(s => `❯ **\`${s.name}\`**`);
|
|||
|
return await message.channel.send(
|
|||
|
new MessageEmbed()
|
|||
|
.setColor(settings.colour)
|
|||
|
.setTitle(i18n('commands.survey.response.list.title'))
|
|||
|
.setDescription(list.join('\n'))
|
|||
|
.setFooter(settings.footer, message.guild.iconURL())
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
};
|