Files
talk/services/moderation/phases/wordlist.js
T
2018-01-22 16:11:13 -07:00

57 lines
1.7 KiB
JavaScript

const { DISABLE_AUTOFLAG_SUSPECT_WORDS } = require('../../../config');
// This phase checks the comment against the wordlist.
module.exports = async (ctx, comment, { settings }) => {
const { connectors: { services: { Wordlist } } } = ctx;
// Create a new instance of the Wordlist.
const wl = new Wordlist();
// Load the wordlist.
wl.upsert(settings.wordlist);
// Scan the comment body for wordlist violations.
const { banned = null, suspect = null } = wl.scan('body', comment.body);
// Decide the status based on whether or not the current asset/settings
// has pre-mod enabled or not. If the comment was rejected based on the
// wordlist, then reject it, otherwise if the moderation setting is
// premod, set it to `premod`.
if (banned) {
// Add the flag related to Trust to the comment.
return {
status: 'REJECTED',
actions: [
{
action_type: 'FLAG',
user_id: null,
group_id: 'BANNED_WORD',
metadata: {},
},
],
};
}
// If the comment has a suspect word or a link, we need to add a
// flag to it to indicate that it needs to be looked at.
// Otherwise just return the new comment.
// If the wordlist has matched the suspect word filter and we haven't disabled
// auto-flagging suspect words, then we should flag the comment!
if (suspect && !DISABLE_AUTOFLAG_SUSPECT_WORDS) {
// TODO: this is kind of fragile, we should refactor this to resolve
// all these const's that we're using like 'COMMENTS', 'FLAG' to be
// defined in a checkable schema.
return {
actions: [
{
action_type: 'FLAG',
user_id: null,
group_id: 'SUSPECT_WORD',
metadata: {},
},
],
};
}
};