AJDS Core complete
This commit is contained in:
@@ -1,13 +1,15 @@
|
||||
const WordsList = require('./ajds-wordslist.js').BlackList;
|
||||
const OffensiveWordsList = require('./ajds-wordslist.js').BlackList;
|
||||
|
||||
module.exports.ScoreMember = async function(erismember)
|
||||
{
|
||||
// warnings are an object
|
||||
// Higher score = higher trust factor
|
||||
|
||||
// Warnings are an object
|
||||
// of at risk features of
|
||||
// the member, ie
|
||||
// {
|
||||
// warning: "",
|
||||
// severity: int // 0 low, 1 warn, 2 high, 3 action needed
|
||||
// severity: int // 0 low, 1 warn, 2 high, 3 action needed / severe
|
||||
// }
|
||||
let ret = {
|
||||
score: 0,
|
||||
@@ -15,13 +17,70 @@ module.exports.ScoreMember = async function(erismember)
|
||||
warnings: []
|
||||
}
|
||||
|
||||
// Bot clients automatically trusted due to admin
|
||||
// permission needed in order to invite them
|
||||
if (erismember.bot)
|
||||
{
|
||||
ret.score = 50;
|
||||
warnins.push({warning:'member is bot', severity: 0});
|
||||
ret.score = 999;
|
||||
ret.warnins.push({warning:'member is bot', severity: 0});
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Account age -5-10 points
|
||||
// After 2 days of no increase, goes up 1 pt every 2 days of age
|
||||
// prior to 2 days, deduct 5 points
|
||||
let Age = new Date().getTime() - ((erismember.id >> 22 >>> 0) + 1420070400000);
|
||||
// age in days
|
||||
Age = Math.floor(age / 1000 / 60 / 60 / 24);
|
||||
|
||||
if (age < 2)
|
||||
{
|
||||
ret.score -= 5;
|
||||
ret.warnings.push({warning: 'member account very new', severity: 2});
|
||||
} else
|
||||
{
|
||||
let AgeScore = Math.min(Math.max(0, age / 2 - 1), 10);
|
||||
if (AgeScore > 10) ret.warnings.push({warning: 'member account new', severity: 1});
|
||||
ret.score += AgeScore;
|
||||
}
|
||||
|
||||
// Reward non-basic avatar
|
||||
if (erismember.avatar == null)
|
||||
ret.warnings.push({warning: 'member has basic avatar', severity: 1});
|
||||
else
|
||||
ret.score += 4;
|
||||
|
||||
// TODO: proper non-basic colour distance alg
|
||||
|
||||
// Penalize 4 letter usernames
|
||||
if (erismember.username.length == 4) ret.score -= 1;
|
||||
|
||||
// Username profanity check
|
||||
// Inoffensive is +6 while offensive is -5 and severe warning
|
||||
let OffensiveWords = this.NickCheck(erismember.username);
|
||||
if (OffensiveWords.length == 0 || OffensiveWords == undefined)
|
||||
{
|
||||
ret.score += 6;
|
||||
} else
|
||||
{
|
||||
for (OffensiveWord of OffensiveWords)
|
||||
{
|
||||
ret.warnings.push({warning: `members name contains offensive word: ${OffensiveWord}`, severity: 3});
|
||||
}
|
||||
ret.score -= 5;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports.NickCheck = function(name)
|
||||
{
|
||||
// returns an array of every offensive word
|
||||
// included in the name provided
|
||||
let ret = [];
|
||||
|
||||
name = name.toLowerCase();
|
||||
for (OffensiveWord of OffensiveWordsList)
|
||||
if (name.includes(OffensiveWord)) ret.push(OffensiveWord);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,8 @@ const Logger = require('./logger.js');
|
||||
const Database = require('./database.js');
|
||||
const Discord = require('./discord.js');
|
||||
|
||||
const AJDS = require('./ajds-core.js')
|
||||
|
||||
require('dotenv').config()
|
||||
|
||||
module.exports.main = async function()
|
||||
|
||||
Reference in New Issue
Block a user