wordwatcher and filter response tweaks & validation

This commit is contained in:
Erik 2022-04-28 18:28:57 +03:00
parent 003a838fad
commit b71de65afe
Signed by untrusted user: Navy.gif
GPG Key ID: 811EC0CD80E7E5FB
2 changed files with 62 additions and 23 deletions

View File

@ -119,9 +119,22 @@ class WordFilterSetting extends FilterSetting {
const words = Util.parseQuotes(content).map(([word]) => word),
params = [],
invalid = [];
let index = 'SETTING_SUCCESS';
if (list === 'regex') for (const word of words) params.push(Util.sanitiseRegex(word));
else if (list === 'presets') for (const word of words) {
if (list === 'regex') {
for (const word of words) {
const sanitised = Util.sanitiseRegex(word);
try {
// eslint-disable-next-line require-unicode-regexp, no-new
new RegExp(sanitised);
params.push(sanitised);
} catch (_) {
invalid.push(word);
index = 'SETTING_FILTER_REGEX_FAIL';
}
}
if (params.length && invalid.length) index += '_SOME';
} else if (list === 'presets') for (const word of words) {
if (FilterPresets.regex[word]) params.push(FilterPresets.regex[word]);
else invalid.push(word);
} else if (list === 'bypass') params.push(...await guild.resolveRoles(words)
@ -130,12 +143,16 @@ class WordFilterSetting extends FilterSetting {
.then((channels) => channels.map((channel) => channel.id)));
else params.push(...words);
if (!params.length) return { error: true, index: 'RESOLVE_FAIL', params: { type: list === 'bypass' ? 'roles' : 'channels' } };
if (!params.length) {
if (['roles', 'channels'].includes(list.value))
return { error: true, index: 'RESOLVE_FAIL', params: { type: list === 'bypass' ? 'roles' : 'channels' } };
return { error: true, index };
}
this[method](setting[list], params);
return { index, params: { updated: list } };
}
return { index: 'SETTING_SUCCESS', params: { updated: list } };
return { index: 'SETTING_SUCCESS_ALT' };
}
@ -213,32 +230,32 @@ class WordFilterSetting extends FilterSetting {
{ name: '\u200b', value: '\u200b', inline: true },
{
name: 'SETTING_WORDFILTER_EXPLICIT',
value: setting.explicit.length ? '||' + setting.explicit.join(', ') + '||' : '`N/A`',
value: setting.explicit.length ? '||' + setting.explicit.join(', ') + '||' : '**N/A**',
inline: true
},
{
name: 'SETTING_WORDFILTER_FUZZY',
value: setting.fuzzy?.length ? '||' + setting.fuzzy.join(', ') + '||' : '`N/A`',
value: setting.fuzzy?.length ? '||' + setting.fuzzy.join(', ') + '||' : '**N/A**',
inline: true
},
{
name: 'SETTING_WORDFILTER_REGEX',
value: setting.regex?.length ? '`' + setting.regex.join('`\n`') + '`' : '`N/A`',
value: setting.regex?.length ? '`' + setting.regex.join('`\n`') + '`' : '**N/A**',
inline: true
},
{
name: 'SETTING_FILTER_WHITELIST',
value: setting.whitelist.join(', ') || '`N/A`',
value: setting.whitelist.join(', ') || '**N/A**',
inline: true
},
{
name: 'GENERAL_IGNORED',
value: setting.ignore.map((channel) => `<#${channel}>`).join(', ') || '`N/A`',
value: setting.ignore.map((channel) => `<#${channel}>`).join(', ') || '**N/A**',
inline: true
},
{
name: 'GENERAL_BYPASS',
value: setting.bypass.map((role) => `<@&${role}>`).join(', ') || '`N/A`',
value: setting.bypass.map((role) => `<@&${role}>`).join(', ') || '**N/A**',
inline: true
},
{
@ -254,7 +271,7 @@ class WordFilterSetting extends FilterSetting {
: '`' + val.trigger + '`'}`; //result.trigger instanceof Array ? result.trigger.join(', ') : result.trigger
acc.push(str);
return acc;
}, []).join('\n') || '`N/A`'
}, []).join('\n') || '**N/A**'
}
];
}

View File

@ -62,7 +62,7 @@ class WordWatcher extends FilterSetting {
if (method && list) {
if (list.value === 'actions') return this._action(interaction, method.value, setting[list.value], { _wordWatcher: true });
else if (method.value === 'list') return { error: false, message: setting[list.value].join(', ') };
else if (method.value === 'list') return { error: false, content: setting[list.value].join(', ') };
const { guild } = interaction;
const time = 120;
@ -75,19 +75,35 @@ class WordWatcher extends FilterSetting {
const words = Util.parseQuotes(content).map(([word]) => word),
params = [],
regex = [];
invalid = [];
let index = 'SETTING_SUCCESS';
if (list.value === 'regex') for (const word of words) regex.push(Util.sanitiseRegex(word));
else if (list.value === 'bypass') params.push(...await guild.resolveRoles(words)
if (list.value === 'regex') {
for (const word of words) {
const sanitised = Util.sanitiseRegex(word);
try { // Validating that the regex is valid
// eslint-disable-next-line require-unicode-regexp, no-new
new RegExp(sanitised);
params.push(sanitised);
} catch (_) {
invalid.push(word);
index = 'SETTING_FILTER_REGEX_FAIL';
}
}
if (params.length && invalid.length) index += '_SOME';
} else if (list.value === 'bypass') params.push(...await guild.resolveRoles(words)
.then((roles) => roles.map((role) => role.id)));
else if (list.value === 'ignore') params.push(...await guild.resolveChannels(words)
.then((channels) => channels.map((channel) => channel.id)));
else params.push(...words);
if (!params.length)
return { error: true, index: 'RESOLVE_FAIL', params: { type: list.value === 'bypass' ? 'roles' : 'channels' } };
if (!params.length) {
if (['roles', 'channels'].includes(list.value))
return { error: true, index: 'RESOLVE_FAIL', params: { type: list.value === 'bypass' ? 'roles' : 'channels' } };
return { error: true, index };
}
this[method.value](setting[list.value], params);
return { index, params: { updated: list.value, invalid: invalid.join('`, `') } };
}
@ -114,18 +130,18 @@ class WordWatcher extends FilterSetting {
},
{
name: 'GENERAL_CHANNEL',
value: setting.channel ? `<#${setting.channel}>` : '`N/A`',
value: setting.channel ? `<#${setting.channel}>` : '**N/A**',
inline: true
},
{ name: '\u200b', value: '\u200b', inline: true },
{
name: 'GENERAL_IGNORED',
value: setting.ignore.map((channel) => `<#${channel}>`).join(', ') || '`N/A`',
value: setting.ignore.map((channel) => `<#${channel}>`).join(', ') || '**N/A**',
inline: true
},
{
name: 'GENERAL_BYPASS',
value: setting.bypass.map((role) => `<@&${role}>`).join(', ') || '`N/A`',
value: setting.bypass.map((role) => `<@&${role}>`).join(', ') || '**N/A**',
inline: true
},
{
@ -141,7 +157,13 @@ class WordWatcher extends FilterSetting {
: '`' + val.trigger + '`'}`; //result.trigger instanceof Array ? result.trigger.join(', ') : result.trigger
acc.push(str);
return acc;
}, []).join('\n') || '`N/A`'
}, []).join('\n') || '**N/A**'
}, {
name: 'SETTING_REGEX',
value: setting.regex.length ? `\`${setting.regex.join('`, `')}\`` : '**N/A**'
}, {
name: 'SETTING_WORDS',
value: setting.words.length ? `\`${setting.words.join('`, `')}\`` : '**N/A**'
}
];
}