Multivit4min icon

Untitled

Multivit4min | PRO | 10/07/17 09:46:26 AM UTC | 0 ⭐ | 514 👁️ | Never ⏰ | []
JavaScript |

4.21 KB

|

None

|

0 👍

/

0 👎

registerPlugin({
    name: 'BadNick Check',
    version: '1.2',
    description: 'Kicks or Messages People with a Bad Nickname!',
    author: 'Multivitamin <multivitamin.wtf>',
    vars: [
        {
            name: 'badnick',
            title: 'List of Banned Nicknames (Help Script: http://sinus.cat/helpers/badnick/)',
            type: 'multiline'
        },
        {
            name: 'action',
            title: 'What should happen when a Client with a Bad Nickname has been detected?',
            type: 'select',
            options: [
                'Kick',
                'Message'
            ]
        },
        {
            name: 'message',
            title: 'Kick / Warn DEFAULT Message',
            type: 'string',
        },
        {
            name: 'ignore',
            title: 'Comma Seperated List of Groups which should get ignored',
            type: 'string',
        }
    ]
}, function(sinusbot, config) {
 
    var sinusbot = null
 
    var event = require("event")
    var engine = require("engine")
    var engine = require("backend")
 
    var badnicks = []
 
    //Load the badnick Multiline Variable into a List of Nicks
    if (config.badnick !== undefined) {
        for (var key in config.badnick.split('\n')) {
            //Check for Valid Regex String
            if (config.badnick.split('\n')[key].match(/^[ ]{0,}\/(.{1,})\/([gmixXsuUAJ]{0,10})[ ]{0,}(\->[ ]{0,}(.{1,})|)$/i)) {
                var capture = config.badnick.split('\n')[key].match(/^[ ]{0,}\/(.{1,})\/([gmixXsuUAJ]{0,10})[ ]{0,}(\->[ ]{0,}(.{1,})|)$/i)
                var re = new RegExp(capture[1], capture[2])
                var msg = capture[4]
            //User Probably does not know Regex try to use it anyway
            } else {
                engine.log('Invalid Regex Format detected! > '+config.badnick.split('\n')[key])
                var re = new RegExp(config.badnick.split('\n')[key], 'i')
                var msg = undefined
            }
            badnicks.push([re, msg])
        }
    }
 
    //Validate for errors in the Config Input
    var action = config.action ? config.action : 0
    var addcomplaint = config.addcomplaint ? config.addcomplaint : 0
    var message = config.message ? config.message : 'Please do not use this Nickname!'
    var ignore = config.ignore ? config.ignore.split(',') : []
    //Parse Ignore List from String to Int
    for (var key in ignore) {
        if (!isNaN(parseInt(ignore[key]))) ignore[key] = parseInt(ignore[key])
    }
 
    event.on("chat", function (ev) {
        if (ev.client.isSelf()) return
        if (ev.text.match(/^!help ?$/)) {
            ev.client.chat('[b]BAD NICK CHECK[/b] This Bot uses [URL=https://multivitamin.wtf]Multivitamins[/URL] Bad Nick Check Plugin!')
        }
    })
 
    //Events
    //Event for Client Connect / Move
    event.on('clientMove', function(ev) {
        //Filter all Client Connect Events and check against whitelist
        if (!ev.fromChannel && !whitelist(client)) checkNick(ev.client, ev.clientNick)
    })
 
    //Do Initial FullCheck on all Clients connected to the Server
    event.on('connect', function(ev) {
        fullCheck()
    })
    fullCheck()
 
    //Do a check when Client changes its nickname
    event.on('clientNick', function(ev) {
        //Check against whitelist
        if (whitelist(ev.client)) return
        checkNick(ev.client)
    })
 
    //Check if Nick is a Bad Nickname
    function checkNick(client){
        for (var key in badnicks) {
            if (client.nick().match(badnicks[key][0])) {
                engine.log('BadNick detected: '+client.nick()+' via entry \''+badnicks[key][0]+'\'')
                if (action === 1) return client.chat(badnicks[key][1] !== undefined ? badnicks[key][1] : message)
                client.kick(badnicks[key][1] !== undefined ? badnicks[key][1] : message)
            }
        }
    }
 
    //Check all Nicknames on the Server 
    function fullCheck() {
        //Get a List of all Clients connected to the Server
        backend.getClients()
            .filter(function(client) {
                return !whitelist(client)
            })
            .forEach(checkNick)
    }
 
    //Check if User is whitelisted via Ignore Settings
    function whitelist(client) {
        return client.getServerGroups().some(function(group) {
            return ignore.indexOf(group.id()) >= 0
        })
    }
 
})

Comments