Add !edit and !delete with options (disabled by default)

cshd
Dragory 2020-07-19 14:20:45 +03:00
parent 4e9e347b04
commit 3002473905
No known key found for this signature in database
GPG Key ID: 5F387BA66DF8AAC1
3 changed files with 56 additions and 2 deletions

View File

@ -89,6 +89,8 @@ const defaultConfig = {
"typingProxyReverse": false,
"mentionUserInThreadHeader": false,
"rolesInThreadHeader": false,
"allowStaffEdit": false,
"allowStaffDelete": false,
"enableGreeting": false,
"greetingMessage": null,

View File

@ -1,7 +1,9 @@
const { CommandManager, defaultParameterTypes, TypeConversionError } = require('knub-command-manager');
const { CommandManager, defaultParameterTypes, TypeConversionError, IParameter, ICommandConfig } = require('knub-command-manager');
const Eris = require('eris');
const config = require('./cfg');
const utils = require('./utils');
const threads = require('./data/threads');
const Thread = require('./data/Thread');
module.exports = {
createCommandManager(bot) {
@ -84,8 +86,19 @@ module.exports = {
};
};
/**
* @callback InboxThreadCommandHandler
* @param {Eris.Message} msg
* @param {object} args
* @param {Thread} thread
*/
/**
* Add a command that can only be invoked in a thread on the inbox server
* @param {string|RegExp} trigger
* @param {string|IParameter[]} parameters
* @param {InboxThreadCommandHandler} handler
* @param {ICommandConfig} commandConfig
*/
const addInboxThreadCommand = (trigger, parameters, handler, commandConfig = {}) => {
const aliases = aliasMap.has(trigger) ? [...aliasMap.get(trigger)] : [];

View File

@ -1,5 +1,7 @@
const attachments = require("../data/attachments");
const utils = require('../utils');
const config = require('../cfg');
const Thread = require('../data/Thread');
module.exports = ({ bot, knex, config, commands }) => {
// Mods can reply to modmail threads using !r or !reply
@ -16,7 +18,6 @@ module.exports = ({ bot, knex, config, commands }) => {
aliases: ['r']
});
// Anonymous replies only show the role, not the username
commands.addInboxThreadCommand('anonreply', '[text$]', async (msg, args, thread) => {
if (! args.text && msg.attachments.length === 0) {
@ -29,4 +30,42 @@ module.exports = ({ bot, knex, config, commands }) => {
}, {
aliases: ['ar']
});
if (config.allowStaffEdit) {
commands.addInboxThreadCommand('edit', '<messageNumber:number> <text:string$>', async (msg, args, thread) => {
const threadMessage = await thread.findThreadMessageByMessageNumber(args.messageNumber);
if (! threadMessage) {
utils.postError(msg.channel, 'Unknown message number');
return;
}
if (threadMessage.user_id !== msg.author.id) {
utils.postError(msg.channel, 'You can only edit your own replies');
return;
}
await thread.editStaffReply(msg.member, threadMessage, args.text)
}, {
aliases: ['e']
});
}
if (config.allowStaffDelete) {
commands.addInboxThreadCommand('delete', '<messageNumber:number>', async (msg, args, thread) => {
const threadMessage = await thread.findThreadMessageByMessageNumber(args.messageNumber);
if (! threadMessage) {
utils.postError(msg.channel, 'Unknown message number');
return;
}
if (threadMessage.user_id !== msg.author.id) {
utils.postError(msg.channel, 'You can only delete your own replies');
return;
}
await thread.deleteStaffReply(msg.member, threadMessage);
}, {
aliases: ['d']
});
}
};