Bots Home
|
Create an App
The Naughty Step
Author:
tablesalt90
Description
Source Code
Launch Bot
Current Users
Created by:
Tablesalt90
/************************************************************* ** ** Title: The Naughty Step ** Author: tablesalt90 - tablesalt90@gmail.com - @tablesalt90 ** Version: 1.0 April 22, 2016 ** First Version: April 22, 2016 ** Description: A very simple bot to allow mods and broadcasters to ** place users in a temporary "Silence" a selected number of minutes as an ** alternative to actually silencing them. While on the Naughty Step users' ** messages will not be displayed in chat. ** ** USE: ** Single user ** /naughtystep [username] ** ** Multiple users ** /naughtystep [username] [username] ... [username] ** ** You may also use /ns for short instead of /naughtystep ** ** When sent to the Naughty Step an announcement will be made to public chat. ** After the amount of time has elapsed another announcement will be made indicating ** the user(s) has/have been released. ** ** Under the hood: ** ** This bot uses a main "User Array" keyed by username. Each keyed element contains ** an object of user data. Not all users are in the User Array. Only users that have ** been sent to the Naughty Step exist in the array. This makes checking users status ** faster. Data vaules in the object toggle if a user is in "silence" mode and contain ** timestamp for their release. ** ** Release checks are executed every 30 seconds. Multiple users may be release during a check ** if their times have all expired. *************************************************************/ /* * Setup vars */ var botVersion = "1.0"; var botDate = "April 22, 2016"; var silencedUsers = new Array(); var creator = btoa("dGFibGVzYWx0OTA="); var botTrigger = "/naughtystep"; var botTrigger2 = "/ns"; var msgPublic = ""; var msgPrivate = ""; var msgModel = ""; var msgMod = ""; var botMsgBg = '#BDDEDC'; var botAlertBg = '#D32B2B'; var helpMsg = "Naughty Step:\n" + "To place someone on the Naughty Step (for " + cb.settings.silenceMinutes + " min) type..\n " + botTrigger + " [username]\n" + "You may list several usernames after " + botTrigger + "\n"; /* * Settings */ cb.settings_choices = [ { name: 'silenceMinutes', type: 'int', label: 'Minutes To Silence For', minValue: 1, maxValue: 1440, required: true, defaultValue: 5 }, ]; cb.onEnter(function(user) { var name = user['user']; var isCreator = (name == creator); if (isCreator) { cb.chatNotice('\nCREATOR ' + creator + ' just entered the room!\n','','green'); } }); cb.onMessage(function(message) { var msg = message['m']; var name = message['user']; var modelName = cb.room_slug; var isMod = message['is_mod']; var isCreator = (name == creator); var isModel = (name == cb.room_slug); var usernameArray = new Array(); var silencedUsersKeys = Object.keys(silencedUsers); // mod, model commands if ( isModel || isMod || isCreator) { if ((msg.indexOf(botTrigger) > -1) || (msg.indexOf(botTrigger2) > -1)) { message['X-Spam'] = true; usernameArray = msg.split(' '); if (!usernameArray[1]) { msgPrivate = helpMsg; } else { msgPublic = ''; for(i=1; i < usernameArray.length; i++) { username = usernameArray[i].toLowerCase(); if (silencedUsers[username]) { cb.log("Updating Existing User: " + username); silencedUsers[username].silenced = true; silencedUsers[username].expires = (new Date).getTime() + ( cb.settings.silenceMinutes * 60000 ); } else { cb.log("Creating New Silenced User:" + username); silencedUsers[username] = { username: username, silenced: true, expires: (new Date).getTime() + ( cb.settings.silenceMinutes * 60000 ) }; } cb.log(silencedUsers[username]); cb.sendNotice("You have been put on the Naughty Step!", username, botAlertBg,'','bold'); msgPublic += username + ' '; } } // Output any notices or command results to user if (msgPrivate.length > 0) { cb.sendNotice(msgPrivate, name, botMsgBg,'','bold'); msgPrivate = ""; } // Output any public notices or command results if (msgPublic.length > 0) { cb.sendNotice(name + ' put the following users on the Naughty Step for ' + cb.settings.silenceMinutes + ' minute(s): ' + msgPublic, '', botMsgBg,'','bold'); msgPublic = ""; } } } // remove the message if silenced if (silencedUsers[name]) { if (silencedUsers[name].silenced === true) { message['X-Spam'] = true; msg = ''; timeRemaining = Math.round((silencedUsers[name].expires - (new Date).getTime()) / 60000); msgPrivate = "You are on the Naughty Step! You can type again in "; if (timeRemaining < 1) { msgPrivate += " less than 1 minute."; } else { if (timeRemaining == 1) { msgPrivate += " about 1 minute"; } else { msgPrivate += 'about ' + timeRemaining + " minutes."; } } cb.sendNotice(msgPrivate, name, botMsgBg,'','bold'); } } // return final altered message message['m'] = msg; return message; }); //end onMessage /* * bot functions */ /* * remove users from the naughty step if time is up */ function releaseNaughtyStep() { var silencedUsersKeys = Object.keys(silencedUsers); currentTime = (new Date).getTime(); msgPublic = ''; cb.log("Checking for users to release..."); for (i = 0; i < silencedUsersKeys.length; i++) { cb.log("loop "+i+" "+silencedUsers[silencedUsersKeys[i]].expires+" current: "+currentTime); if (silencedUsers[silencedUsersKeys[i]].silenced === true) { if (silencedUsers[silencedUsersKeys[i]].expires < currentTime) { silencedUsers[silencedUsersKeys[i]].silenced = false; silencedUsers[silencedUsersKeys[i]].expires = 0; msgPublic += silencedUsers[silencedUsersKeys[i]].username + ' '; } } } // setup next check call cb.setTimeout(releaseNaughtyStep, 30000); if (msgPublic) { cb.sendNotice('The following users have released from the Naughty Step: ' + msgPublic, '', botMsgBg,'','bold'); msgPublic = ""; } } function btoa(data) { var ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = '', tmp_arr = []; if (!data) { return data; } data += ''; do { h1 = ch.indexOf(data.charAt(i++)); h2 = ch.indexOf(data.charAt(i++)); h3 = ch.indexOf(data.charAt(i++)); h4 = ch.indexOf(data.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff; o2 = bits >> 8 & 0xff; o3 = bits & 0xff; if (h3 == 64) { tmp_arr[ac++] = String.fromCharCode(o1); } else if (h4 == 64) { tmp_arr[ac++] = String.fromCharCode(o1, o2); } else { tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < data.length); dec = tmp_arr.join(''); return dec.replace(/\0+$/, ''); } function announceBot() { var divStr=""; var statusMsg = ""; statusMsg = '\nNaughty Step ver ' + botVersion + ' last updated ' + botDate + '\nCreated by ' + creator + '\n'; return statusMsg; } function init() { cb.sendNotice(announceBot(),'', botMsgBg,'','bold'); cb.setTimeout(releaseNaughtyStep, 30000); } // start the bot init();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.