mirror of
https://github.com/wassname/talk.git
synced 2026-06-28 14:13:38 +08:00
48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
const {getScores, isToxic} = require('./perspective');
|
|
const {ErrToxic} = require('./errors');
|
|
|
|
// We don't add the hooks during _test_ as the perspective API is not available.
|
|
if (process.env.NODE_ENV === 'test') {
|
|
return null;
|
|
}
|
|
|
|
module.exports = {
|
|
RootMutation: {
|
|
createComment: {
|
|
async pre(_, {input}, _context, _info) {
|
|
|
|
// Try getting scores.
|
|
let scores;
|
|
try {
|
|
scores = await getScores(input.body);
|
|
} catch(err) {
|
|
|
|
// Warn and let mutation pass.
|
|
console.trace(err);
|
|
return;
|
|
}
|
|
|
|
// Attach scores to metadata.
|
|
input.metadata = Object.assign({}, input.metadata, {
|
|
perspective: scores,
|
|
});
|
|
|
|
if (isToxic(scores)) {
|
|
if (input.checkToxicity) {
|
|
throw ErrToxic;
|
|
}
|
|
|
|
input.status = 'SYSTEM_WITHHELD';
|
|
input.actions = input.actions && input.actions.length >= 0 ? input.actions : [];
|
|
input.actions.push({
|
|
action_type: 'FLAG',
|
|
user_id: null,
|
|
group_id: 'TOXIC_COMMENT',
|
|
metadata: {}
|
|
});
|
|
}
|
|
},
|
|
},
|
|
},
|
|
};
|