Move beforeNewThread hook after validations, fix a couple bugs

cshd
Dragory 2020-08-12 23:19:11 +03:00
parent 468d1fc037
commit d03903ce80
No known key found for this signature in database
GPG Key ID: 5F387BA66DF8AAC1
3 changed files with 23 additions and 7 deletions

View File

@ -208,15 +208,16 @@ class Thread {
} }
// Save the log entry // Save the log entry
const logContent = formatters.formatStaffReplyLogMessage(moderator, text, threadMessage.message_number, { isAnonymous, attachmentLinks });
const threadMessage = await this._addThreadMessageToDB({ const threadMessage = await this._addThreadMessageToDB({
message_type: THREAD_MESSAGE_TYPE.TO_USER, message_type: THREAD_MESSAGE_TYPE.TO_USER,
user_id: moderator.id, user_id: moderator.id,
user_name: fullModeratorName, user_name: fullModeratorName,
body: logContent, body: '',
is_anonymous: (isAnonymous ? 1 : 0), is_anonymous: (isAnonymous ? 1 : 0),
dm_message_id: dmMessage.id dm_message_id: dmMessage.id
}); });
const logContent = formatters.formatStaffReplyLogMessage(moderator, text, threadMessage.message_number, { isAnonymous, attachmentLinks });
await this._updateThreadMessage(threadMessage.id, { body: logContent });
// Show the reply in the inbox thread // Show the reply in the inbox thread
const inboxContent = formatters.formatStaffReplyThreadMessage(moderator, text, threadMessage.message_number, { isAnonymous }); const inboxContent = formatters.formatStaffReplyThreadMessage(moderator, text, threadMessage.message_number, { isAnonymous });

View File

@ -15,6 +15,17 @@ module.exports = {
SYSTEM_TO_USER: 7 SYSTEM_TO_USER: 7
}, },
// https://discord.com/developers/docs/resources/channel#channel-object-channel-types
DISOCRD_CHANNEL_TYPES: {
GUILD_TEXT: 0,
DM: 1,
GUILD_VOICE: 2,
GROUP_DM: 3,
GUILD_CATEGORY: 4,
GUILD_NEWS: 5,
GUILD_STORE: 6,
},
ACCIDENTAL_THREAD_MESSAGES: [ ACCIDENTAL_THREAD_MESSAGES: [
'ok', 'ok',
'okay', 'okay',

View File

@ -13,7 +13,7 @@ const updates = require('./updates');
const Thread = require('./Thread'); const Thread = require('./Thread');
const {callBeforeNewThreadHooks} = require("../hooks/beforeNewThread"); const {callBeforeNewThreadHooks} = require("../hooks/beforeNewThread");
const {THREAD_STATUS} = require('./constants'); const {THREAD_STATUS, DISOCRD_CHANNEL_TYPES} = require('./constants');
const MINUTES = 60 * 1000; const MINUTES = 60 * 1000;
const HOURS = 60 * MINUTES; const HOURS = 60 * MINUTES;
@ -73,9 +73,6 @@ async function createNewThreadForUser(user, opts = {}) {
throw new Error('Attempted to create a new thread for a user with an existing open thread!'); throw new Error('Attempted to create a new thread for a user with an existing open thread!');
} }
const hookResult = await callBeforeNewThreadHooks({ user, opts });
if (hookResult.cancelled) return;
// If set in config, check that the user's account is old enough (time since they registered on Discord) // If set in config, check that the user's account is old enough (time since they registered on Discord)
// If the account is too new, don't start a new thread and optionally reply to them with a message // If the account is too new, don't start a new thread and optionally reply to them with a message
if (config.requiredAccountAge && ! ignoreRequirements) { if (config.requiredAccountAge && ! ignoreRequirements) {
@ -128,6 +125,10 @@ async function createNewThreadForUser(user, opts = {}) {
} }
} }
// Call any registered beforeNewThreadHooks
const hookResult = await callBeforeNewThreadHooks({ user, opts });
if (hookResult.cancelled) return;
// Use the user's name+discrim for the thread channel's name // Use the user's name+discrim for the thread channel's name
// Channel names are particularly picky about what characters they allow, so we gotta do some clean-up // Channel names are particularly picky about what characters they allow, so we gotta do some clean-up
let cleanName = transliterate.slugify(user.username); let cleanName = transliterate.slugify(user.username);
@ -159,7 +160,10 @@ async function createNewThreadForUser(user, opts = {}) {
// Attempt to create the inbox channel for this thread // Attempt to create the inbox channel for this thread
let createdChannel; let createdChannel;
try { try {
createdChannel = await utils.getInboxGuild().createChannel(channelName, null, 'New Modmail thread', newThreadCategoryId); createdChannel = await utils.getInboxGuild().createChannel(channelName, DISOCRD_CHANNEL_TYPES.GUILD_TEXT, {
reason: 'New Modmail thread',
parentID: newThreadCategoryId,
});
} catch (err) { } catch (err) {
console.error(`Error creating modmail channel for ${user.username}#${user.discriminator}!`); console.error(`Error creating modmail channel for ${user.username}#${user.discriminator}!`);
throw err; throw err;