Bots Home
|
Create an App
assablancatest
Author:
miaforbidden
Description
Source Code
Launch Bot
Current Users
Created by:
Miaforbidden
/************************************************************* ** ** Title: Mellbell's Loyal Family ** Author: tablesalt90 - tablesalt90@gmail.com - @tablesalt90 ** Version: 1.3.0 ** Description: Chat bot for use by Mellbell - chaturbate.com/mellbell ** *************************************************************/ /* * Setup vars */ var timeoutUsersArray = new Array(); var timeoutReleaseArray = new Array(); var friendUsersArray = new Array(); var familyUsersArray = new Array(); var loverUsersArray = new Array(); var fianceUsersArray = new Array(); var husbandUsersArray = new Array(); var specialNames = new Array(); var tempString = ""; var tempArray = new Array(); var botVersion = "1.3.0"; var modelName = cb.room_slug; var msgNotify = ""; var msgPublic = ""; var msgPrivate = ""; var msgModel = ""; var msgMod = ""; var autoNotice1Text = ""; var autoNotice2Text = ""; var botTrigger = "/melbot"; var timeoutReleaseInterval = 1; var modCommands = true; var userGreets = true; var genderEmotes = true; var allowGreyEmotes = true; var botMsgBg = '#BDDEDC'; var botAlertBg = '#D32B2B'; var botNoteBg = '#99FF66'; specialNames[0] = new Array('tablesalt90',':wts90'); specialNames[1] = new Array('likketysplit1',':likketysplit1 has entered the room!'); specialNames[2] = new Array('doublexl100',':wjessxl'); specialNames[3] = new Array('runlikeachicken',':wrunlac'); specialNames[4] = new Array('thegr8saiyaman45',':wvlad has entered the room!'); specialNames[5] = new Array('melsrealmod',':wgoods'); specialNames[6] = new Array('joesdoe_6',':wjoesdoe_6_'); specialNames[7] = new Array('honestboy26',':whonestboy26'); specialNames[8] = new Array('rockerchang',':wrockerchang'); specialNames[9] = new Array('cptbill',':wcptbill'); specialNames[10] = new Array('_kor_',':wkor'); specialNames[11] = new Array('nicu7650',':nicu7650'); /* * Settings */ cb.settings_choices = [ { name: 'allowGreyEmotes', type: 'choice', label: 'Allow GREY Graphics?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, { name: 'genderEmotes', type: 'choice', label: 'Show gender of users in chat?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, { name: 'autoNotice1', label: 'Notification Message 1, use text and emotes', type: 'str', minLength: 0, maxLength: 512, required: false, defaultValue: '' }, { name: 'autoNotice1Interval', label: 'Show Notification 1 Every x Minutes', type: 'choice', choice1: 2, choice2: 5, choice3: 8, choice4: 10, choice5: 12, choice6: 15, choice7: 20, choice8: 25, choice9: 30, choice10: 45, choice11: 60, defaultValue: 5 }, { name: 'autoNotice2', label: 'Notification Message 2, use text and emotes', type: 'str', minLength: 0, maxLength: 512, required: false, defaultValue: '' }, { name: 'autoNotice2Interval', label: 'Show Notification 2 Every x Minutes', type: 'choice', choice1: 2, choice2: 5, choice3: 8, choice4: 10, choice5: 12, choice6: 15, choice7: 20, choice8: 25, choice9: 30, choice10: 45, choice11: 60, defaultValue: 5 }, { name: 'modCommands', type: 'choice', label: 'Allow Moderators to use commands?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, { name: 'userGreets', type: 'choice', label: 'Make special user announcements and emotes when they enter?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, { name: 'friendTag', label: '*** FRIENDS *** *** *** Tag for Friend (non-tippers) users', type: 'str', minLength: 0, maxLength: 25, required: true, defaultValue: '[Friend]' }, { name: 'friendList', label: 'List of Friend users, separated by space (their CB usernames exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: '' }, { name: 'friendColor', label: 'Highlight color to use for Friend users', type: 'choice', choice1: 'None FFFFFF', choice2: 'Green 91EB73', choice3: 'Purple CD73EB', choice4: 'Cyan 73EBEB', choice5: 'Blue 73B5EB', choice6: 'Yellow FCED79', choice7: 'Red FF4A4A', choice8: 'Pink FF99F8', choice9: 'Orange FFC517', defaultValue: 'Cyan 73EBEB' }, { name: 'familyTag', label: '*** FAMILY *** *** *** Tag for Family users', type: 'str', minLength: 0, maxLength: 25, required: true, defaultValue: '[Family]' }, { name: 'familyList', label: 'List of Family users, separated by space (their CB usernames exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: '' }, { name: 'familyColor', label: 'Highlight color to use for Family users', type: 'choice', choice1: 'None FFFFFF', choice2: 'Green 91EB73', choice3: 'Purple CD73EB', choice4: 'Cyan 73EBEB', choice5: 'Blue 73B5EB', choice6: 'Yellow FCED79', choice7: 'Red FF4A4A', choice8: 'Pink FF99F8', choice9: 'Orange FFC517', defaultValue: 'Blue 73B5EB' }, { name: 'loverTag', label: '*** LOVERS *** *** *** Tag for Lovers users', type: 'str', minLength: 0, maxLength: 25, required: true, defaultValue: '[Lover]' }, { name: 'loverList', label: 'List of Lovers useres, separated by space (their CB usernames exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: '' }, { name: 'loverColor', label: 'Highlight color to use for Lover users', type: 'choice', choice1: 'None FFFFFF', choice2: 'Green 91EB73', choice3: 'Purple CD73EB', choice4: 'Cyan 73EBEB', choice5: 'Blue 73B5EB', choice6: 'Yellow FCED79', choice7: 'Red FF4A4A', choice8: 'Pink FF99F8', choice9: 'Orange FFC517', defaultValue: 'Red FF4A4A' }, { name: 'fianceTag', label: '*** FIANCES *** *** *** Tag for Fiance users', type: 'str', minLength: 0, maxLength: 25, required: true, defaultValue: '[Fiance]' }, { name: 'fianceList', label: 'List of Fiance useres, separated by space (their CB usernames exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: '' }, { name: 'fianceColor', label: 'Highlight color to use for Fiance users', type: 'choice', choice1: 'None FFFFFF', choice2: 'Green 91EB73', choice3: 'Purple CD73EB', choice4: 'Cyan 73EBEB', choice5: 'Blue 73B5EB', choice6: 'Yellow FCED79', choice7: 'Red FF4A4A', choice8: 'Pink FF99F8', choice9: 'Orange FFC517', defaultValue: 'Purple CD73EB' }, { name: 'husbandTag', label: '*** HUSBANDS *** *** *** Tag for Husband users', type: 'str', minLength: 0, maxLength: 25, required: true, defaultValue: '[Husband]' }, { name: 'husbandList', label: 'List of Husband useres, separated by space (their CB usernames exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: '' }, { name: 'husbandColor', label: 'Highlight color to use for Husband users', type: 'choice', choice1: 'None FFFFFF', choice2: 'Green 91EB73', choice3: 'Purple CD73EB', choice4: 'Cyan 73EBEB', choice5: 'Blue 73B5EB', choice6: 'Yellow FCED79', choice7: 'Red FF4A4A', choice8: 'Pink FF99F8', choice9: 'Orange FFC517', defaultValue: 'Orange FFC517' }, ]; /* * handle tips from users */ var totalTipped = 0; cb.onTip(function (tip) { var divStr = ""; var msgText = ""; var msgNotify = ""; var tipAmount = parseInt(tip['amount']); var name = tip['from_user']; var modelName = cb.room_slug; switch(tipAmount) { case 5500: msgPublic = name + ' purchased 100 raffle ticket for 5500 tokens! Thank you!!!'; break; case 2000: result = addUser(husbandUsersArray, name); if (result instanceof Array) { husbandUsersArray = result; msgPublic = name + ' is now ' + modelName + '\'s Husband!!! Thank you for your tip!'; msgModel = modelName + ', don\'t forget to add ' + name + ' to Husbands in the bot config!'; } else { if (result == 'duplicate') { msgPublic = name + ' is already ' + modelName + '\'s Husband!!! Thank you for your tip!';; } else { msgPublic = 'Failed to add user ' + name + ' to Husbands. Something went wrong!'; } } break; case 1500: if (!userInArray (husbandUsersArray, name) ) { result = addUser(fianceUsersArray, name); if (result instanceof Array) { fianceUsersArray = result; msgPublic = name + ' is now ' + modelName + '\'s Fiance!!! Thank you for your tip!'; msgModel = modelName + ', don\'t forget to add ' + name + ' to Fiances in the bot config!'; } else { if (result == 'duplicate') { msgPublic = name + ' is already ' + modelName + '\'s Fiance!!! Thank you for your tip!';; } else { msgPublic = 'Failed to add user ' + name + ' to Fiances. Something went wrong!'; } } } else { msgPublic = name + ' already has a higher status than Fiance! Status not changed. Thank you for your tip!'; } break; case 1000: if (!userInArray (husbandUsersArray, name) && !userInArray (fianceUsersArray, name)) { result = addUser(loverUsersArray, name); if (result instanceof Array) { loverUsersArray = result; msgPublic = name + ' is now ' + modelName + '\'s Lover!!! Thank you for your tip!'; msgModel = modelName + ', don\'t forget to add ' + name + ' to Lovers in the bot config!'; } else { if (result == 'duplicate') { msgPublic = name + ' is already ' + modelName + '\'s Lover!!! Thank you for your tip!';; } else { msgPublic = 'Failed to add user ' + name + ' to Lovers. Something went wrong!'; } } } else { msgPublic = name + ' already has a higher status than Lover! Status not changed. Thank you for your tip!'; } break; case 600: msgPublic = name + ' purchased 10 raffle ticket for 600 tokens! Thank you!!!'; break; case 500: if (!userInArray (husbandUsersArray, name) && !userInArray (fianceUsersArray, name) && !userInArray (loverUsersArray, name)) { result = addUser(familyUsersArray, name); if (result instanceof Array) { familyUsersArray = result; msgPublic = name + ' is now in ' + modelName + '\'s Family!!! Thank you for your tip!'; msgModel = modelName + ', don\'t forget to add ' + name + ' to Family in the bot config!'; } else { if (result == 'duplicate') { msgPublic = name + ' is already in ' + modelName + '\'s Family!!! Thank you for your tip!';; } else { msgPublic = 'Failed to add user ' + name + ' to Family. Something went wrong!'; } } } else { msgPublic = name + ' already has a higher status than Family! Status not changed. Thank you for your tip!'; } break; case 150: msgPublic = name + ' tipped 150 tokens for fingering or dildo play! Thank you!'; break; case 100: msgPublic = name + ' tipped 100 tokens to get Mel naked! Thank you!'; break; case 71: msgPublic = name + ' purchased 1 raffle ticket for 71 tokens! Thank you!!!'; break; case 50: msgPublic = name + ' tipped 50 tokens for pussy! Thank you!'; break; case 40: msgPublic = name + ' tipped 40 tokens for ass! Thank you!'; break; case 30: msgPublic = name + ' tipped 30 tokens to see boobies! Thank you!'; break; case 25: msgPublic = name + ' tipped 25 tokens, do you want Mel to view your cam?'; break; case 20: msgPublic = name + ' tipped 20 tokens, do you want to see her feet?'; break; default: msgPublic = 'Thank you ' + name + ' for your tip of ' + tipAmount; if (tipAmount == 1) { msgPublic += ' token!'; } else { msgPublic += ' tokens!'; } break; } // Output any notices or command results to user if (msgPrivate.length > 0) { cb.chatNotice(msgNotify, name, botMsgBg,'','bold'); msgPrivate = ""; } // Output any public notices or command results if (msgPublic.length > 0) { cb.chatNotice(msgPublic, '', botMsgBg,'','bold'); msgPublic = ""; } // Output any messages to the model if (msgModel.length > 0) { cb.chatNotice(msgModel, modelName, botMsgBg,'','bold'); msgModel = ""; } }); /* * handle user entrance messages */ cb.onEnter(function(user) { var lenOfSpecialNames = 0; var nameFound = false; var greeting = ''; var modelName = cb.room_slug; var name = user['user']; var isMod = user['is_mod']; var isFan = user['in_fanclub']; var isTS = (name == 'tablesalt90'); var isReal = (cb.room_slug == 'mellbell'); var isModel = (name == cb.room_slug); var hasTokens = user['has_tokens']; var hasTipped = user['tipped_recently']; var isGrey = !(hasTokens || isMod || isModel || isFan); lenOfSpecialNames = specialNames.length; for(i=0; i < lenOfSpecialNames; i++) { if (specialNames[i][0] == name) { greeting = specialNames[i][1]; nameFound = true; break; } } if (nameFound && userGreets) { cb.chatNotice(greeting,'','#FFFFFF'); } else { if (userGreets) { if ( userInArray (familyUsersArray, user['user']) ) { cb.chatNotice('Welcome Family Member ' + user['user'] + ' to the room!','',familyColor,'','bold'); } else { if ( userInArray (friendUsersArray, user['user']) ) { cb.chatNotice('Welcome Friend ' + user['user'] + ' to the room!','',friendColor,'','bold'); } else { if (userInArray(loverUsersArray, user['user'])) { cb.chatNotice('Welcome Lover ' + user['user'] + ' to the room!','',loverColor,'','bold'); } else { if (userInArray(fianceUsersArray, user['user'])) { cb.chatNotice('Welcome Fiance ' + user['user'] + ' to the room!','',fianceColor,'','bold'); } else { if (userInArray(husbandUsersArray, user['user'])) { cb.chatNotice('Welcome Husband ' + user['user'] + ' to the room!','',husbandColor,'','bold'); } } } } } // show notice if user is in timeout if ( userInArray(timeoutUsersArray, user['user']) ) { cb.chatNotice('Welcome back ' + user['user'] + '! You\'re still in timeout and can\'t type!','',botMsgBg,'','bold'); } } } cb.chatNotice('\nWelcome! Loyal Family Bot is running - Tip 500 to join the Family, 1000 to be my Lover, 1500 to be my Fiance, or 2000 to be my Husband!\n\n',user['user'],botMsgBg,'','bold'); if (genderEmotes) { cb.chatNotice('Gender Emotes are enabled: :avatar_gen_male = Male User :avatar_gen_female = Female User\n :avatar_gen_couple = Couple User :avatar_gen_trans = Transgender User\n :avatar_gen_unknown = Gender Unknown\n\n',user['user'],'#ffffff','','bold'); } if (modelName != 'mellbell') { cb.chatNotice('\nThis is NOT MellBell\'s room!\nThis bot was created for MellBell chaturbate.com/mellbell\nFollower her on twitter @Mellanye_karine and visit her room on CB!\n\n\n',user['user'],botAlertBg,'','bold'); } if (!allowGreyEmotes && isGrey) { cb.chatNotice('\nYou don\'t have any tokens. Use of emoticons for users without tokens and not part of the loyal family is not allowed at this time.\n\n\n',user['user'],botAlertBg,'','bold'); } }); /* * handle messages from users */ cb.onMessage(function(message) { var msg = message['m']; var name = message['user']; var commandProcessed = false; var gender = message['gender']; var modelName = cb.room_slug; var isMod = message['is_mod']; var isFan = message['in_fanclub']; var isTS = (name == 'tablesalt90'); var isReal = (cb.room_slug == 'mellbell'); var isModel = (name == cb.room_slug); var hasTokens = message['has_tokens']; var hasTipped = message['tipped_recently']; var isGrey = !(hasTokens || isMod || isModel || isFan); var divStr = ""; var tempAllowMsg = tempAllowMsg = "Only " + modelName; var userArray = new Array(); var userList = ""; var showOutput = true; var genderStr = ""; var isInGroup = false; if (modCommands) { tempAllowMsg = modelName + " and mods"; } helpMsg = tempAllowMsg + " may use the following commands:\n" + botTrigger + " view [family] = list of level users\n" + botTrigger + " useradd [family] [username] = add username to level\n" + botTrigger + " userdel [family] [username] = delete username from level\n" + botTrigger + " check [username] = show what level a user is in\n" + botTrigger + " mods [on/off] = turns on/off mod commands\n" + botTrigger + " greyemotes [on/off] = turns on/off grey emotes\n" + botTrigger + " note [message] = send a public message to chat\n" + botTrigger + " melnote [message] = send a private message to mel\n" + botTrigger + " modnote [message] = send a private message to mods\n" + botTrigger + " greets [on/off] = turns on/off level user greetings\n" + botTrigger + " status = show bot status\n" + "*** NOTE: To make names stick add them in the bot config."; // handle commands if ( isModel || (isMod && (modCommands === true)) || isTS ) { if (msg.indexOf(botTrigger) > -1) { msgParam1 = getParam(msg,' ',1); msgParam2 = getParam(msg,' ',2); msgParam3 = getParam(msg,' ',3); msgParam4 = getParam(msg,' ',4); var regexCommandSplit = '^' + botTrigger + ' (\\S+)(?:\\b\\s*)(.*)?'; var regexListSplit = /[,\s]+/; var reCmdSplit = new RegExp(regexCommandSplit); var cmdSplit = msg.match(reCmdSplit); var cmd; var cmdval; var cmdValArray; switch(msgParam1) { case 'help': message['X-Spam'] = true; divStr = makeDiv('_',50,50); msgPrivate = divStr + '\nLOYAL FAMILY Bot ver ' + botVersion + '\nCreated by tablesalt90\n' + divStr + '\n'; msgPrivate += helpMsg + '\n' + divStr; break; case 'notice': case 'note': case 'modnote': case 'modnotice': case 'melnote': case 'melnotice': message['X-Spam'] = true; if ( cmdSplit ) { cmdval = cmdSplit[2]; if ( cmdval != null ) { cmdval = cmdval.replace(/^\s+|\s+$/g,''); } // contains message. who do we send it to? switch(msgParam1) { case 'notice': case 'note': msgPublic = '*** ' + name + ' says: ' + cmdval + ' ***'; break; case 'melnote': case 'melnotice': msgModel = '*** Private notice from ' + name + ': ' + cmdval + ' ***'; break; case 'modnote': case 'modnotice': msgMod = '*** Moderator notice from ' + name + ': ' + cmdval + ' ***'; break; } } break; break; case 'checktimeouts': releaseTimeouts(); break; case 'view': case 'show': case 'list': // which user array do we need to display? var showOutput = true; message['X-Spam'] = true; switch(msgParam2) { case "timeout": userArray = timeoutUsersArray; break; case "family": userArray = familyUsersArray; break; case "friends": case "friend": userArray = friendUsersArray; break; case "lovers": case "lover": userArray = loverUsersArray; break; case "fiance": case "fiances": userArray = fianceUsersArray; break; case "husband": case "husbands": userArray = husbandUsersArray; break; default: showOutput = false; msgPrivate = "You must provide a group name to list: family friends lovers fiances husbands"; break; } if (showOutput === true) { userList = getUsers(userArray); arrayProperName = msgParam2.charAt(0).toUpperCase() + msgParam2.substring(1); if (userList.length > 1) { divStr = makeDiv('_',userList.length,50); msgPrivate = divStr + '\n' + arrayProperName + ' Users\n'; msgPrivate += userList; msgPrivate += '\n' + divStr; } else { msgPrivate = 'No ' + arrayProperName + ' users found!'; } if (!isModel) { msgModel = name + ' viewed the list ' + arrayProperName + ' Users.'; } } break; case 'useradd': case 'adduser': case 'add': var validSyntax = true; // check that we got 3 parameters if (msgParam3) { // which user array are we updating? switch(msgParam2) { case "timeout": result = addUser(timeoutUsersArray, msgParam3); if (result instanceof Array) { timeoutUsersArray = result; msgPublic = name + ' put ' + msgParam3 + ' in timeout!!! They will not be able to type until released!'; if (msgParam4 ) { // command has number of minutes result2 = addReleaseTime(timeoutReleaseArray, msgParam3, msgParam4); if (result2 instanceof Array) { timeoutReleaseArray = result2; minutes = 'minutes'; if (msgParam4 == '1') minutes = 'minute'; msgPublic = name + ' put ' + msgParam3 + ' in timeout for ' + msgParam4 + ' ' + minutes + '!!! They will not be able to type until released!'; } else { if (result == 'duplicate') { msgPrivate = 'Failed to put user ' + msgParam3 + ' in timeout they are already scheduled for release!'; } else { msgPrivate = 'Failed to add user ' + msgParam3 + ' to release schedule. Something went wrong!'; } } } } else { if (result == 'duplicate') { msgPrivate = 'Failed to put user ' + msgParam3 + ' in timeout they are already in timeout!'; } else { msgPrivate = 'Failed to add user ' + msgParam3 + ' to timeout. Something went wrong!'; } } break; case "family": result = addUser(familyUsersArray, msgParam3); if (result instanceof Array) { familyUsersArray = result; msgPublic = name + ' added ' + msgParam3 + ' to the list of Family!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to add ' + msgParam3 + ' to the Family list in the bot config!'; } } else { if (result == 'duplicate') { msgPrivate = 'Failed to add user ' + msgParam3 + ' because they are already in Family!'; } else { msgPrivate = 'Failed to add user ' + msgParam3 + ' to Family. Something went wrong!'; } } break; case "friends": case "friend": result = addUser(friendUsersArray, msgParam3); if (result instanceof Array) { friendUsersArray = result; msgPublic = name + ' added ' + msgParam3 + ' to the list of Friends!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to add ' + msgParam3 + ' to Friends in the bot config!'; } } else { if (result == 'duplicate') { msgPrivate = 'Failed to add user ' + msgParam3 + ' because they are already in Friends!'; } else { msgPrivate = 'Failed to add user ' + msgParam3 + ' to Friends. Something went wrong!'; } } break; case "lovers": case "lover": result = addUser(loverUsersArray, msgParam3); if (result instanceof Array) { loverUsersArray = result; msgPublic = name + ' added ' + msgParam3 + ' to the list of Lovers!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to add ' + msgParam3 + ' to Lovers in the bot config!'; } } else { if (result == 'duplicate') { msgPrivate = 'Failed to add user ' + msgParam3 + ' because they are already in Lovers!'; } else { msgPrivate = 'Failed to add user ' + msgParam3 + ' to Lovers. Something went wrong!'; } } break; case "fiance": case "fiances": result = addUser(fianceUsersArray, msgParam3); if (result instanceof Array) { fianceUsersArray = result; msgPublic = name + ' added ' + msgParam3 + ' to the list of Fiances!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to add ' + msgParam3 + ' to Fiances in the bot config!'; } } else { if (result == 'duplicate') { msgPrivate = 'Failed to add user ' + msgParam3 + ' because they are already in Fiances!'; } else { msgPrivate = 'Failed to add user ' + msgParam3 + ' to Fiances. Something went wrong!'; } } break; case "husband": case "husbands": result = addUser(husbandUsersArray, msgParam3); if (result instanceof Array) { husbandUsersArray = result; msgPublic = name + ' added ' + msgParam3 + ' to the list of Husbands!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to add ' + msgParam3 + ' to Husbands in the bot config!'; } } else { if (result == 'duplicate') { msgPrivate = 'Failed to add user ' + msgParam3 + ' because they are already in Husbands!'; } else { msgPrivate = 'Failed to add user ' + msgParam3 + ' to Husbands. Something went wrong!'; } } break; default: validSyntax = false; msgPrivate = 'You didn\'t supply a valid group to add the user to. Valid groups are:\n'; msgPrivate += 'family friend lover fiance husband ... choose only one.'; break; } } else { validSyntax = false; msgPrivate = 'You must provide the group and the username you wish to add. For example,\n' + botTrigger + ' adduser family someusername\n'; msgPrivate += 'or ' + botTrigger + ' adduser husband someuser'; } if (validSyntax === true) { message['X-Spam'] = true; } break; case 'userdel': case 'deluser': case 'delete': case 'remove': var validSyntax = true; // check that we got 3 parameters if (msgParam3) { // which user array are we updating? switch(msgParam2) { case "timeout": result = delUser(timeoutUsersArray, msgParam3); if (result instanceof Array) { timeoutUsersArray = result; msgPublic = name + ' released ' + msgParam3 + ' from timeout!!'; // delete any release time result2 = delReleaseTime(timeoutReleaseArray, msgParam3); } else { if (result == 'notfound') { msgPrivate = 'Failed to remove user ' + msgParam3 + ' from timeout because they are not in timeout!'; } else { msgPrivate = 'Failed to remove user ' + msgParam3 + ' from timeout. Something went wrong!'; } } break; case "family": result = delUser(familyUsersArray, msgParam3); if (result instanceof Array) { familyUsersArray = result; msgPublic = name + ' removed ' + msgParam3 + ' from the Family list!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to remove ' + msgParam3 + ' from the Family list in the bot config!'; } } else { if (result == 'notfound') { msgPrivate = 'Failed to remove user ' + msgParam3 + ' because they are not in Family!'; } else { msgPrivate = 'Failed to remove user ' + msgParam3 + ' from Family. Something went wrong!'; } } break; case "friends": case "friend": result = delUser(friendUsersArray, msgParam3); if (result instanceof Array) { friendUsersArray = result; msgPublic = name + ' removed ' + msgParam3 + ' from the list of Friends!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to remove ' + msgParam3 + ' from Friends in the bot config!'; } } else { if (result == 'notfound') { msgPrivate = 'Failed to remove user ' + msgParam3 + ' because they are not in Friends!'; } else { msgPrivate = 'Failed to remove user ' + msgParam3 + ' from Friends. Something went wrong!'; } } break; case "lovers": case "lover": result = delUser(loverUsersArray, msgParam3); if (result instanceof Array) { loverUsersArray = result; msgPublic = name + ' removed ' + msgParam3 + ' from the list of Lovers!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to remove ' + msgParam3 + ' from Lovers in the bot config!'; } } else { if (result == 'notfound') { msgPrivate = 'Failed to remove user ' + msgParam3 + ' because they are not in Lovers!'; } else { msgPrivate = 'Failed to remove user ' + msgParam3 + ' from Lovers. Something went wrong!'; } } break; case "fiance": case "fiances": result = delUser(fianceUsersArray, msgParam3); if (result instanceof Array) { fianceUsersArray = result; msgPublic = name + ' removed ' + msgParam3 + ' from the list of Fiances!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to remove ' + msgParam3 + ' from Fiances in the bot config!'; } } else { if (result == 'notfound') { msgPrivate = 'Failed to remove user ' + msgParam3 + ' because they are not in Fiances!'; } else { msgPrivate = 'Failed to remove user ' + msgParam3 + ' from Fiances. Something went wrong!'; } } break; case "husband": case "husbands": result = delUser(husbandUsersArray, msgParam3); if (result instanceof Array) { husbandUsersArray = result; msgPublic = name + ' removed ' + msgParam3 + ' from the list of Husbands!'; // if model didn't issue command remind model to update the bot if (!isModel) { msgModel = modelName + ', don\'t forget to remove ' + msgParam3 + ' from Husbands in the bot config!'; } } else { if (result == 'notfound') { msgPrivate = 'Failed to remove user ' + msgParam3 + ' because they are not in Husbands!'; } else { msgPrivate = 'Failed to remove user ' + msgParam3 + ' from Husbands. Something went wrong!'; } } break; default: validSyntax = false; msgPrivate = 'You didn\'t supply a valid group to remove the user from. Valid groups are:\n'; msgPrivate += 'family friend lover fiance husband ... choose only one.'; break; } } else { validSyntax = false; msgPrivate = 'You must provide the group and the username you wish to remove. For example,\n' + botTrigger + ' deluser family someusername\n'; msgPrivate += 'or ' + botTrigger + ' deluser husband someuser'; } if (validSyntax === true) { message['X-Spam'] = true; } break; case 'check': if (msgParam2) { message['X-Spam'] = true; groupList = checkUser(msgParam2); msgPrivate = 'User ' + msgParam2 + ' found in: ' + groupList; } break; case 'modcommands': case 'mods': if(isModel || isTS) { if (msgParam2) { message['X-Spam'] = true; switch(msgParam2) { case "on": modCommands = true; msgPublic = name + ' has enabled Moderator commands!'; break; case "off": modCommands = false; msgPublic = name + ' has disabled Moderator commands!'; break; default: // invalid option msgPrivate = 'Invalid option, you must use on or off. Example: ' + botTrigger + ' modcommands off'; break; } } else { // missing on/off value msgPrivate = 'Missing option, you must use on or off. Example: ' + botTrigger + ' modcommands on'; } } break; case 'greyemote': case 'greyemotes': case 'grayemote': case 'grayemotes': case 'emotes': case 'emote': if (msgParam2) { message['X-Spam'] = true; switch(msgParam2) { case "on": allowGreyEmotes = true; msgPublic = name + ' has enabled grey emotes!'; break; case "off": allowGreyEmotes = false; msgPublic = name + ' has disabled grey emotes!'; break; default: // invalid option msgPrivate = 'Invalid option, you must use on or off. Example: ' + botTrigger + ' greyemotes off'; break; } } else { // missing on/off value msgPrivate = 'Missing option, you must use on or off. Example: ' + botTrigger + ' greyemotes on'; } break; case 'greets': case 'greetings': if(isModel || isTS) { if (msgParam2) { message['X-Spam'] = true; switch(msgParam2) { case "on": userGreets = true; msgPublic = name + ' has enabled User Greetings!'; break; case "off": userGreets = false; msgPublic = name + ' has disabled User Greetings!'; break; default: // invalid option msgPrivate = 'Invalid option, you must use on or off. Example: ' + botTrigger + ' greets off'; break; } } else { // missing on/off value msgPrivate = 'Missing option, you must use on or off. Example: ' + botTrigger + ' greets on'; } } break; case "status": case "announce": message['X-Spam'] = true; msgPrivate = announceBot(); break; default: message['X-Spam'] = true; msgPrivate = 'You must provide a command. Type ' + botTrigger + ' help\n ...to get a list of options.'; break; } // 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(msgPublic, '', botMsgBg,'','bold'); msgPublic = ""; } // Output any messages to the mods if (msgMod.length > 0) { cb.sendNotice(msgMod,'', botMsgBg,'','bold','red'); msgMod = ""; } // Output any messages to the model if (msgModel.length > 0) { cb.sendNotice(msgModel, modelName, botMsgBg,'','bold'); msgModel = ""; } } } // if user is in a group, add the group tag to their message // and change the background color if ( userInArray (familyUsersArray, name) ) { message['background'] = familyColor; message['m'] = familyTag + ' ' + message['m']; isInGroup = true; } else { if ( userInArray (friendUsersArray, name) ) { message['background'] = friendColor; message['m'] = friendTag + ' ' + message['m']; isInGroup = true; } else { if (userInArray(loverUsersArray, name)) { message['background'] = loverColor; message['m'] = loverTag + ' ' + message['m']; isInGroup = true; } else { if (userInArray(fianceUsersArray, name)) { message['background'] = fianceColor; message['m'] = fianceTag + ' ' + message['m']; isInGroup = true; } else { if (userInArray(husbandUsersArray, name)) { message['background'] = husbandColor; message['m'] = husbandTag + ' ' + message['m']; isInGroup = true; } } } } } // see if user envoked emotes that should be removed (no grey emotes) if (!isInGroup && !isTS && !isModel && !allowGreyEmotes && isGrey) { //user is grey, is not in a group, not TS, not model and grey emotes are not allowed cb.log('checking for grey emotes'); if (message['m'].indexOf(':') > -1) { cb.log('found colon, removing'); //colon found, replace all with _ message['m'] = message['m'].replace(/:([^\s]+)/g,"[blocked emote]"); } } // if gender emotes are enabled, prefix message with correct gender if (genderEmotes) { switch (gender) { case 'm': genderStr = ':avatar_gen_male'; break; case 'f': genderStr = ':avatar_gen_female'; break; case 's': genderStr = ':avatar_gen_trans'; break; case 'c': genderStr = ':avatar_gen_couple'; break; default: genderStr = ':avatar_gen_unknown'; break; } // special user icons if (isTS) { genderStr= ':tsalien [Creator]'; } if (isModel) { genderStr = ':melbot_crown_queen'; } if (name == 'likketysplit1' || name == 'joesdoe_6') { genderStr = ':melbot_crown_king'; } if (name == 'thegr8saiyaman45') { genderStr = ':gjester1'; } if (name == 'melsrealmod') { genderStr = ':melbot_robot'; } if (name == 'runlikeachicken') { genderStr = ':runpenis'; } if (name == 'doublexl100') { genderStr = ':jesshat'; } message['m'] = genderStr + ' ' + message['m']; } // show notice if user is in timeout if ( userInArray(timeoutUsersArray, name) ) { timeoutMessages = new Array(); timeoutMessages[1]= '[TIMEOUT] I\'m typing but my keys are not working! Oh yeah, I\'m in TIMEOUT!'; timeoutMessages[2]= '[TIMEOUT] I was very very bad! Now I\'m not allowed to type!'; timeoutMessages[3]= '[TIMEOUT] Blah Blah Blah Blah!'; timeoutMessages[4]= '[TIMEOUT] Look at me! I\'m talking to myself!'; timeoutMessages[5]= '[TIMEOUT] What did I say? HaHa! You\'ll never know!'; selectedTimeoutMessage = Math.floor(Math.random() * 5) + 1; message['m'] = timeoutMessages[selectedTimeoutMessage]; } }); //end onMessage /* * bot functions */ /* * add a user to the release array */ function addReleaseTime(userArray, username, timeoutMinutes) { var userArrayLength = userArray.length; username = username.toLowerCase(); // check if username is in userarray usernameExists = userInReleaseArray(userArray, username); if (usernameExists === true) { return "duplicate"; // username found in array, return duplicate } else { // add username to array currentEpoch = (new Date).getTime(); userArray[userArrayLength] = new Array(username,currentEpoch + (timeoutMinutes * 60000)); //userArray[userArrayLength][0] = username; //userArray[userArrayLength][1] = currentEpoch + timeoutMinutes * 60000; // check to see that addition of user worked usernameExists = userInReleaseArray(userArray, username); if (usernameExists === true) { return userArray; // it worked, return the array } else { return "failed"; // failed, return failed } } } function delReleaseTime(userArray, username) { var releaseArrayLength = userArray.length; var userElement = -1; username = username.toLowerCase(); if (userInReleaseArray(userArray, username)) { userElement = getRelaseArrayElement(userArray, username); if (userElement > -1) { tempArray = removeArrayElement(userArray, userElement); if (!userInReleaseArray(userArray, username)) { // user was removed return tempArray; } else { // user was not removed, failed return "failed"; } } else { //user element was not in array for some reason return "failed"; } } else { return 'notfound'; } } /* * remove users from timeout if their time has expired */ function releaseTimeouts() { // set current epoch time currentEpoch = (new Date).getTime(); //loop through all elements in timeout release array for (i = 0; i < timeoutReleaseArray.length; i++) { if (timeoutReleaseArray[i][1] < currentEpoch) { username = timeoutReleaseArray[i][0]; delUser(timeoutUsersArray, username); msgPublic += "User " + username + " has been released from timeout!\n"; delReleaseTime(timeoutReleaseArray, username); } } // setup next check call cb.setTimeout(releaseTimeouts, timeoutReleaseInterval * 60000); if (msgPublic) { cb.chatNotice(msgPublic, '', botMsgBg,'','bold'); msgPublic = ""; } } /* * display notification message and start interval timer */ function displayNotification1() { cb.chatNotice(autoNotice1Text,'',botNoteBg,'','bold'); cb.setTimeout(displayNotification1, cb.settings.autoNotice1Interval * 60000); } function displayNotification2() { cb.chatNotice(autoNotice2Text,'',botNoteBg,'','bold'); cb.setTimeout(displayNotification2, cb.settings.autoNotice2Interval * 60000); } /* * return parameter value from a message string * Req: msgString = full message as string * Req: splitChr = character to split on (usually space) * Req: paramNumber = number of the parameter to return (first is 0) * Return: paramValue = value of the requested parameter */ function getParam(msgString,splitChr,paramNumber) { var tempArray = new Array(); tempArray = msgString.split(splitChr); paramValue = tempArray[paramNumber]; return paramValue; } /* * build a variable length divider from a character * Req: divChr = the character to use for the divier, ie: _ - * * Req: strLen = length of the data to be divided (lenth of a string, or fixed) * Req: maxDivLen = the max number of characters the div can grow to * Return: divStr = string of repeated character that make the divider */ function makeDiv(divChr, strLen, maxDivLen) { var divLen = 0; var divStr = ""; if (strLen > maxDivLen) { divLen = maxDivLen; } else { divLen = strLen; } while (divStr.length < divLen) { divStr = divChr + divStr; } return divStr; } /* * return array of users with the new user added, duplicate, * or error string. * Req: userArray = array of users to add the new user to * Req: username = username of new user * Return: array of users with new users added * On error: return "duplicate" if username in user array already * On error: return "failed" if user no duplicate and wasn't added */ function addUser(userArray, username) { var userArrayLength = userArray.length; username = username.toLowerCase(); // check if username is in userarray usernameExists = userInArray(userArray, username); if (usernameExists === true) { return "duplicate"; // username found in array, return duplicate } else { // remove user from all user arrays delUserFromAll(username); // add username to array userArray[userArrayLength] = username; // check to see that addition of user worked usernameExists = userInArray(userArray, username); if (usernameExists === true) { return userArray; // it worked, return the array } else { return "failed"; // failed, return failed } } } /* * return array of users with the new user removed, duplicate, * or error string. * Req: userArray = array of users to add the new user to * Req: username = username of new user * Return: array of users with user removed * On error: return "notfound" if username not in user array * On error: return "failed" if user no duplicate and wasn't added */ function delUser(userArray, username) { var userArrayLength = userArray.length; var userElement = -1; username = username.toLowerCase(); if (userInArray(userArray, username)) { userElement = getArrayElement(userArray, username); if (userElement > -1) { tempArray = removeArrayElement(userArray, userElement); if (!userInArray(userArray, username)) { // user was removed return tempArray; } else { // user was not removed, failed return "failed"; } } else { //user element was not in array for some reason return "failed"; } } else { return 'notfound'; } } /* * remove a user from all groups * Req: username = name over user to remove * Return: none */ function delUserFromAll(username) { if ( userInArray(friendUsersArray, username) ) { result = delUser(friendUsersArray, username); if (result instanceof Array) { friendUsersArray = result; } } if ( userInArray(familyUsersArray, username) ) { result = delUser(familyUsersArray, username); if (result instanceof Array) { familyUsersArray = result; } } if ( userInArray(loverUsersArray, username) ) { result = delUser(loverUsersArray, username); if (result instanceof Array) { loverUsersArray = result; } } if ( userInArray(fianceUsersArray, username) ) { result = delUser(fianceUsersArray, username); if (result instanceof Array) { fianceUsersArray = result; } } if ( userInArray(husbandUsersArray, username) ) { result = delUser(husbandUsersArray, username); if (result instanceof Array) { husbandUsersArray = result; } } } /* * return the element or index number of an array value * Req: sourceArray = array to parse * Req: value = value to find * Return: index of the element */ function getArrayElement(sourceArray, value) { var index = 0; for (i = 0; i < sourceArray.length; i++) { if (sourceArray[i] == value) { index = i; } } return index; } /* * same as getArrayElement but for timeout release array */ function getRelaseArrayElement(sourceArray, value) { var index = 0; for (i = 0; i < sourceArray.length; i++) { if (sourceArray[i][0] == value) { index = i; } } return index; } /* * return an array with the indicated element removed * Req: sourceArray = array to be modified * Req: element = element to be removed * Return: the modified array */ function removeArrayElement(sourceArray,element) { sourceArray.splice(element, 1); return sourceArray; } /* * return boolean if user is in user array * Req: userArray = array of users to parse * Req: userName = name of user to parse fr * Returns: userFound = true or false */ function userInArray(userArray, username) { var userFound = false; username = username.toLowerCase(); if (userArray.length > 0) { for(i=0; i < userArray.length; i++) { if (userArray[i] == username) userFound = true; } } return userFound; } /* * return boolean if user is in user release array * Req: timeoutReleaseArray = array of users to parse * Req: username = name of user to parse fr * Returns: userFound = true or false */ function userInReleaseArray(userArray, username) { var userFound = false; username = username.toLowerCase(); if (userArray.length > 0) { for(i=0; i < userArray.length; i++) { if (userArray[i][0] == username) userFound = true; } } return userFound; } /* * return a string of usernames from an array of users * Req: userArray = array of users * Return: string of of usersnames */ function getUsers(userArray) { var userList = ""; for (i = 0; i < userArray.length; i++) { userList += userArray[i] + ' '; } return userList; } /* * return list of groups that a user is a member of * Req: username = username to find * Return: string with list of groups the user was found in */ function checkUser(username) { var groupList = ""; username = username.toLowerCase(); if (userInArray(familyUsersArray, username)) groupList += "Family "; if (userInArray(friendUsersArray, username)) groupList += "Friends "; if (userInArray(loverUsersArray, username)) groupList += "Lovers "; if (userInArray(fianceUsersArray, username)) groupList += "Fiances "; if (userInArray(husbandUsersArray, username)) groupList += "Husbands"; return groupList; } function notModel() { var notModelMsg = '\n\n' + modelName + '! This bot was created for '; notModelMsg += 'MellBell, you are not her! Please consider having your own '; notModelMsg += 'bot created. Contact tablesalt90 on here or twitter @tablesalt90\n\n'; return notModelMsg; } /* * Builds user arrays and strings based on data provided by bot * config settings */ function loadSettings() { // grey graphics if (cb.settings.allowGreyEmotes == 'Yes') { allowGreyEmotes = true; } else { allowGreyEmotes = false; } // mod commands if (cb.settings.modCommands == 'Yes') { modCommands = true; } else { modCommands = false; } // greetings if (cb.settings.userGreets == 'Yes') { userGreets = true; } else { userGreets = false; } // gender emotes if (cb.settings.genderEmotes == 'Yes') { genderEmotes = true; } else { genderEmotes = false; } // load friends into array and other variables if (cb.settings.friendList) { tempStr = cb.settings.friendList.toLowerCase(); //make names all lowercase cb.settings.friendList = tempStr.trim(); // remove extra spaces friendUsersArray = cb.settings.friendList.split(' '); } if (cb.settings.friendTag) { friendTag = cb.settings.friendTag.trim(); } if (cb.settings.friendColor) { tempArray = cb.settings.friendColor.split(' '); friendColor = '#' + tempArray[1]; } // load family into array and other variables if (cb.settings.familyList) { tempStr = cb.settings.familyList.toLowerCase(); //make names all lowercase cb.settings.familyList = tempStr.trim(); // remove extra spaces familyUsersArray = cb.settings.familyList.split(' '); } if (cb.settings.familyTag) { familyTag = cb.settings.familyTag.trim(); } if (cb.settings.familyColor) { tempArray = cb.settings.familyColor.split(' '); familyColor = '#' + tempArray[1]; } // load lover into array and other variables if (cb.settings.loverList) { tempStr = cb.settings.loverList.toLowerCase(); //make names all lowercase cb.settings.loverList = tempStr.trim(); // remove extra spaces loverUsersArray = cb.settings.loverList.split(' '); } if (cb.settings.loverTag) { loverTag = cb.settings.loverTag.trim(); } if (cb.settings.loverColor) { tempArray = cb.settings.loverColor.split(' '); loverColor = '#' + tempArray[1]; } // load fiance into array and other variables if (cb.settings.fianceList) { tempStr = cb.settings.fianceList.toLowerCase(); //make names all lowercase cb.settings.fianceList = tempStr.trim(); // remove extra spaces fianceUsersArray = cb.settings.fianceList.split(' '); } if (cb.settings.fianceTag) { fianceTag = cb.settings.fianceTag.trim(); } if (cb.settings.fianceColor) { tempArray = cb.settings.fianceColor.split(' '); fianceColor = '#' + tempArray[1]; } // load husband into array and other variables if (cb.settings.husbandList) { tempStr = cb.settings.husbandList.toLowerCase(); //make names all lowercase cb.settings.husbandList = tempStr.trim(); // remove extra spaces husbandUsersArray = cb.settings.husbandList.split(' '); } if (cb.settings.husbandTag) { husbandTag = cb.settings.husbandTag.trim(); } if (cb.settings.husbandColor) { tempArray = cb.settings.husbandColor.split(' '); husbandColor = '#' + tempArray[1]; } // load notifications if (cb.settings.autoNotice1) { autoNotice1Text = cb.settings.autoNotice1.trim(); } if (cb.settings.autoNotice2) { autoNotice2Text = cb.settings.autoNotice2.trim(); } } function announceBot() { var divStr=""; var statusMsg = ""; divStr = makeDiv('*', 45, 45); statusMsg = divStr + '\nLOYAL FAMILY Bot ver ' + botVersion + '\nCreated by tablesalt90\n' + divStr + '\n'; statusMsg += 'Gender Emotes: '; if (genderEmotes) { statusMsg += 'On'; } else { statusMsg += 'Off'; } statusMsg += '\n'; statusMsg += 'Grey Emotes: '; if (allowGreyEmotes) { statusMsg += 'On'; } else { statusMsg += 'Off'; } statusMsg += '\n'; statusMsg += 'Mod Commands: '; if (modCommands) { statusMsg += 'On'; } else { statusMsg += 'Off'; } statusMsg += '\n'; statusMsg += 'User Greetings: '; if (userGreets) { statusMsg += 'On'; } else { statusMsg += 'Off'; } statusMsg += '\n'; statusMsg += 'Number of Friends: ' + friendUsersArray.length + '\n'; statusMsg += 'Number in Family: ' + familyUsersArray.length + ' (tip 500)\n'; statusMsg += 'Number of Lovers: ' + loverUsersArray.length + ' (tip 1000)\n'; statusMsg += 'Number of Fiances: ' + fianceUsersArray.length + ' (tip 1500)\n'; statusMsg += 'Number of Husbands: ' + husbandUsersArray.length + ' (tip 2000)\n'; statusMsg += 'Type - ' + botTrigger + ' help - for list commands\n'; statusMsg += divStr; return statusMsg; } loadSettings(); cb.chatNotice(announceBot(),'', botMsgBg,'','bold'); if (modelName !='mellbell') cb.chatNotice(notModel(),modelName,botAlertBg,'','bold'); if (autoNotice1Text) cb.setTimeout(displayNotification1, cb.settings.autoNotice1Interval * 60000); if (autoNotice2Text) cb.setTimeout(displayNotification2, cb.settings.autoNotice2Interval * 60000); // start timeout release event cb.setTimeout(releaseTimeouts, timeoutReleaseInterval * 60000);
© Copyright Chaturbate 2011- 2026. All Rights Reserved.