forked from Galactic/modmail
83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
const Command = require('../Command');
|
|
|
|
class CannedReply extends Command {
|
|
|
|
constructor(client) {
|
|
super(client, {
|
|
name: 'cannedreply',
|
|
aliases: ['cr', 'canned'],
|
|
showUsage: true,
|
|
usage: `<canned response name>`
|
|
});
|
|
}
|
|
|
|
async execute(message, { args }) {
|
|
|
|
const [first] = args.map((a) => a);
|
|
// eslint-disable-next-line prefer-const
|
|
let { channel, content, _caller } = message,
|
|
anon = false;
|
|
content = content.replace(`${this.client.prefix}${_caller}`, '');
|
|
const op = args.shift().toLowerCase();
|
|
if (op === 'anon') {
|
|
anon = true;
|
|
content = content.replace(first, '');
|
|
} else if (['create', 'delete'].includes(op)) {
|
|
return this.createCanned(op, args, message);
|
|
} else if (['list'].includes(first.toLowerCase(op))) {
|
|
|
|
const list = Object.entries(this.client.modmail.replies);
|
|
let str = '';
|
|
for (const [name, content] of list) {
|
|
if (str.length + content.length > 2000) {
|
|
await channel.send(str).catch(this.client.logger.error.bind(this.client.logger));
|
|
str = '';
|
|
}
|
|
str += `**${name}:** ${content}\n`;
|
|
}
|
|
if (str.length) return channel.send(str).catch(this.client.logger.error.bind(this.client.logger));
|
|
return '**__None__**';
|
|
}
|
|
return this.client.modmail.sendCannedResponse({ message, responseName: content.trim(), anon });
|
|
|
|
}
|
|
|
|
async createCanned(op, args, { channel, author }) {
|
|
|
|
if (args.length < 1) return {
|
|
error: true,
|
|
msg: 'Missing reply name'
|
|
};
|
|
const [_name, ...rest] = args;
|
|
|
|
const name = _name.toLowerCase();
|
|
const canned = this.client.modmail.replies;
|
|
let confirmation = null;
|
|
|
|
if (op === 'create') {
|
|
if (!rest.length) return {
|
|
error: true,
|
|
msg: 'Missing content'
|
|
};
|
|
|
|
if (canned[name]) {
|
|
confirmation = await this.client.prompt(`A canned reply by the name ${name} already exists, would you like to overwrite it?`, { channel, author });
|
|
if (!confirmation) return 'Timed out.';
|
|
confirmation = ['y', 'yes', 'ok'].includes(confirmation.content.toLowerCase());
|
|
if (!confirmation) return 'Cancelled';
|
|
}
|
|
|
|
canned[name] = rest.join(' ');
|
|
|
|
} else {
|
|
delete canned[name];
|
|
}
|
|
|
|
this.client.modmail.saveReplies();
|
|
return `Updated ${_name}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = CannedReply; |